利用innodb_force_recovery 解决MySQL服务器crash无法重启问题_kominancy的博客-程序员宅基地

技术标签: mysql  数据库  sql  

数据库在机器crash导致日志文件损坏,重启之后无法正常恢复。
error 1236 日志损坏 数据文件损坏  

 因为日志已经损坏,这里采用非常规手段,首先修改innodb_force_recovery参数,使mysqld跳过恢复步骤,将mysqld 启动,将数据导出来然后重建数据库。
innodb_force_recovery可以设置为1-6,大的数字包含前面所有数字的影响。
  1. (SRV_FORCE_IGNORE_CORRUPT):忽略检查到的corrupt页。
  2. (SRV_FORCE_NO_BACKGROUND):阻止主线程的运行,如主线程需要执行full purge操作,会导致crash。
  3. (SRV_FORCE_NO_TRX_UNDO):不执行事务回滚操作。
  4. (SRV_FORCE_NO_IBUF_MERGE):不执行插入缓冲的合并操作。
  5. (SRV_FORCE_NO_UNDO_LOG_SCAN):不查看undo logs,InnoDB存储引擎会将未提交的事务视为已提交。
  6. (SRV_FORCE_NO_LOG_REDO):不执行前滚的操作。
注意 
  a 当设置参数值大于0后,可以对表进行select,create,drop操作,但insert,update或者delete这类操作是不允许的。
  b 当innodb_purge_threads 和 innodb_force_recovery一起设置会出现一种loop现象:    

  1. 150125 17:07:42 InnoDB: Waiting for the background threads to start
  2. 150125 17:07:43 InnoDB: Waiting for the background threads to start
  3. 150125 17:07:44 InnoDB: Waiting for the background threads to start
  4. 150125 17:07:45 InnoDB: Waiting for the background threads to start
  5. 150125 17:07:46 InnoDB: Waiting for the background threads to start
  6. 150125 17:07:47 InnoDB: Waiting for the background threads to start
在my.cnf中修改以下两个参数
innodb_force_recovery=6
innodb_purge_thread=0

重启MySQL 

  1. 150125 17:10:47 [Note] Crash recovery finished.
  2. 150125 17:10:47 [Note] Server socket created on IP: '0.0.0.0'.
  3. 150125 17:10:47 [Note] Event Scheduler: Loaded 0 events
  4. 150125 17:10:47 [Note] /vdata/webserver/mysql/bin/mysqld: ready for connections.
  5. Version: '5.5.37-MariaDB-log' socket: '/tmp/mysql.sock' port: 3306 Source distribution
立即对数据库做逻辑导出 ,完成之后将innodb_force_recovery设置为0 ,innodb_purge_thread=1 , 然后重建数据库  。
另外 MySQL 版本 5.5以及之前 ,当innodb_purge_threads =1,innodb_force_recovery >1 的情况会出现上文提到的循环报warning 问题(=1 没有问题),
原因:
MySQL 的源代码中显示  当innodb_purge_threads 和 innodb_force_recovery一起设置会出现loop循环
  while   ( srv_shutdown_state  = =  SRV_SHUTDOWN_NONE )  { 
       if   ( srv_thread_has_reserved_slot ( SRV_MASTER )   = =  ULINT_UNDEFINED 
           | |   ( srv_n_purge_threads  = =  1 
          && srv_thread_has_reserved_slot ( SRV_WORKER )  
           = =  ULINT_UNDEFINED ) )  { 
          ut_print_timestamp ( stderr ) ;  
          fprintf ( stderr ,   " InnoDB:  Waiting for the background threads to  start\n" ) ;
          os_thread_sleep ( 1000000 ) ;         
      }  else  { 
          break ;  
      } 
  }
所以当需要设置innodb_force_recovery>1的时候需要关闭 innodb_purge_threads,设置为0(默认)。


原文:http://blog.itpub.net/22664653/viewspace-1441389/
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012887385/article/details/54406489

智能推荐

SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'dtdate' 解决方法-程序员宅基地

建表如下:CREATE TABLE `mh_1485_praise` ( `auto_id` int(11) NOT NULL AUTO_INCREMENT, `user_id` varchar(50) NOT NULL DEFAULT '', `user_ip` varchar(50) NOT NULL DEFAULT '', `type` varchar(10) NOT NU...

Web框架开发-用户认证(auth)模块-程序员宅基地

一、auth模块from django.contrib import auth  1、authenticate():验证用户输入的用户名和密码是否相同提供了用户认证,即验证用户名以及密码是否正确,一般需要username password两个关键字参数如果认证信息有效,会返回一个 User 对象。authenticate()会在User 对象上设置一个属性标识那...

Extending the B0-based remote API_qt simxcallscriptfunction_星夜之北的博客-程序员宅基地

The BØ-based remote API should not be mixed-up with thelegacy remote API(or simplyremote API), which is an older version of the remote API that is less flexible, and more difficult to extend.基于BØ的远程API不要与早期的远程API(或简单的远程API)混淆,早期的是远程API的旧版本,灵活性较差You ..._qt simxcallscriptfunction

navicat for mysql registration_NavicatforMySQL有密钥-程序员宅基地

【实例简介】NavicatforMySQL包里有密钥【实例截图】【核心代码】NavicatforMySQL└── NavicatforMySQL├── key.txt└── Navicat for MySQL├── dparser.dll├── freetype6.dll├── libcairo-2.dll├── libcurl.dll├── libdd.dll├── libeay32.dll├─..._navicat for mysql密钥

JS实践与写博客-序-程序员宅基地

大二的时候,就开始接触JavaScript了。 当时学了1年多,主要是认真看了一本JavaScript的入门书籍,了解了JavaScript大致怎么回事。在独自做Web项目的时候,用的都是JavaScript比较基本的功能,闭包和Propotype等概念都没有怎么深入学习...

1097 : 计算平均成绩(函数专题)_1097计算-程序员宅基地

题目描述输入某位同学各门课的成绩,输出平均成绩。输入的成绩均为五级制成绩,五级制成绩转换为百分之成绩的规则如下:'A’转换为百分之成绩为95分,'B’对应85分,C对应75分,'D’对应65分,'E’对应40分。 输出的平均成绩为一个实数,保留1为小数。输入输入为一行只包含’A’~'E’的字母,每个字母表示一门课的成绩,长度小于10输出输出平均成绩,为一个实数,保留一位小数。样例输入ABCDE样例输出72.0代码#include <stdio.h>int f(char c_1097计算

随便推点

linux下使"adb devices"识别Android手机所需的配置-程序员宅基地

you'd better add {android-sdk}/platform-tools into ~/.bashrc's PATH variablelsusbIf you don't know which is vendor id, you can check: http://www.gtdcloud.com/?p=40gedit ~/.android/ad

默认网关,子网掩码_子网掩码 默认网关-程序员宅基地

一,为什么要计算网络地址 一句话就是让网络中的计算机能够相互通讯.先看看最简单的网络,图3中是用网线(交叉线)直接将两台计算机连起来.下面是几种IP地址设置,看看在不同设置下网络是通还是不通. 1,设置1号机的IP地址为192.168.0.1子网掩码为255.255.255.0,2号机的IP地址为192.168.0.200子网掩码为255.255.255.0,这来台计算机就能正常通讯.2,如..._子网掩码 默认网关

Delphi 中哈希表TStringHash和THashedStringList性能速度_thashedstringlist values-程序员宅基地

Delphi的IniFiles单元中有两个哈希表类TStringHash和THashedStringList【TStringHash】优点:速度快,尤其是添加时(调用.Add)速度比THashedStringList快得多。缺点:1、Key只能是字符串,Value只能是数字2、无法进行遍历【THashedStringList】优点:继承与TStringL_thashedstringlist values

SAP:常用的T-code-程序员宅基地

11个模块较常用的一些T-Code,希望对大家有所帮助! http://www.sapforum.net/archiver/?tid-4437.html大家可以在SAP中查询T-Code,当然前提是你有足够的权限。 具体方法...

dcm2jpg异常:No Reader for format: jpeg2000-cv registered_no reader for format: jpeg-cv registered-程序员宅基地

继No Writer for format: jpeg2000-cv registered后又报一个No Reader for format: jpeg2000-cv registered错。我太难了。我在做dcm2jpg的处理,完整异常如下:报错具体代码:导入的dcm4che包:需要的dll文件:在这些都存在的情况下还是报错。最后很奇葩的解决了这个问题。..._no reader for format: jpeg-cv registered

利用反射操作Unsafe类_unsafe 反射-程序员宅基地

由于sun.misc.Unsafe类可以操作内存,JDK对其作了限制,不允许整个渠道使用Unsafe类,可通过反射机制,来获取Unsafe实例,进而操作Unsafe实例方法。public class UnSafeTest { static final Unsafe unsafe; static final long stateOffset; private volatile long state = 0; static { try { //利用反射获取Unsafe的成员变量th_unsafe 反射