码迷,mamicode.com
首页 > 数据库 > 详细

MySQL--使用innodb_force_recovery修复数据库异常

时间:2019-03-19 15:00:22      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:损坏   red   recover   bsp   检查   主线程   恢复   执行   失败   

当MySQL服务异常重启失败后,可以通过配置参数innodb_force_recovery来对MySQL服务进行修复启动。

参数innodb_force_recovery选项:

1 (SRV_FORCE_IGNORE_CORRUPT): 忽略检查到的 corrupt 页。尽管检测到了损坏的 page 仍强制服务运行。一般设置为该值即可,然后 dump 出库表进行重建。

2 (SRV_FORCE_NO_BACKGROUND): 阻止主线程的运行,如主线程需要执行 full purge 操作,会导致 crash。 阻止 master thread 和任何 purge thread 运行。若 crash 发生在 purge 环节则使用该值。

3 (SRV_FORCE_NO_TRX_UNDO): 不执行事务回滚操作。

4 (SRV_FORCE_NO_IBUF_MERGE): 不执行插入缓冲的合并操作。如果可能导致崩溃则不要做这些操作。不要进行统计操作。该值可能永久损坏数据文件。若使用了该值,则将来要删除和重建辅助索引。

5 (SRV_FORCE_NO_UNDO_LOG_SCAN): 不查看重做日志,InnoDB 存储引擎会将未提交的事务视为已提交。此时 InnoDB 甚至把未完成的事务按照提交处理。该值可能永久性的损坏数据文件。

6 (SRV_FORCE_NO_LOG_REDO): 不执行前滚的操作。恢复时不做 redo log roll-forward。使数据库页处于废止状态,继而可能引起 B 树或者其他数据库结构更多的损坏。

参数innodb_force_recovery设置:

在配置文件中的mysqld模块添加参数innodb_force_recovery。

[mysqld]
innodb_force_recovery    =     N

 

相同参数innodb_force_recovery在不同MySQL版本允许的操作可能不同,所有版本中innodb_force_recovery>0时都允许对表进行SELECT操作。

使用参数innodb_force_recovery建议:

1、如果MySQL服务故障重启后,因为事务回滚导致异常,可以将参数innodb_force_recovery设置为3跳过回滚阶段

2、如果因为MySQL数据页损坏导致异常,可以使用SELECT+WHERE查找出未损坏数据并将其通过mysqldump导出。

3、将innodb_force_recovery参数设置大于0启动服务后,应通过修改端口或域名(VIP)指向来屏蔽应用访问。

4、将innodb_force_recovery参数设置大于0启动服务后,可以通过mysqlcheck命令来对表进行检查/分析/优化/修复。

5、使用force_recovery重启服务前,建议对数据库所有文件进行备份,避免修复过程中对数据进行二次损害。

 

在日常运维中,应将使用innodb_force_recovery参数进行数据恢复作为最后手段,做好完善的备份恢复机制,避免对数据库做高危操作。

 

MySQL--使用innodb_force_recovery修复数据库异常

标签:损坏   red   recover   bsp   检查   主线程   恢复   执行   失败   

原文地址:https://www.cnblogs.com/gaogao67/p/10558531.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!