摘要:今天给大家带来一篇MySQL数据库崩溃的修复案例
问题描述
研究MySQL源代码,调试并压测MySQL源代码时,MySQL崩溃了!问题是它竟然崩溃了!而且还损坏了InnoDB文件!!还好是在调试环境下发生的,赶紧看看如何解决这个问题,经过一系列的查阅资料、验证、对比、MySQL源码调试跟踪、修复损坏的InnoDB文件、总结等流程,整理成此文,如果以后真的发生在线上的生产坏境,也不用担心是不是要跑路的问题了,可以分分钟搞定MySQL的崩溃问题了!!查看错误日志,如下:
问题分析
从日志中可以看出是innodb引擎出了问题。日志里提示到 在mysql的配置文件my.cnf里找到 [mysqld]字段下,添加 innodb_force_recovery=1:
如果innodb_force_recovery = 1不生效,则可尝试2——6几个数字
然后重启mysql,重启成功。然后使用mysqldump或 pma 导出数据,执行修复操作等。修复完成后,把该参数注释掉,还原默认值0。
配置文件的参数:innodb_force_recovery
innodb_force_recovery影响整个InnoDB存储引擎的恢复状况。默认为0,表示当需要恢复时执行所有的恢复操作(即校验数据页/purge undo/insert buffer merge/rolling back&forward),当不能进行有效的恢复操作时,mysql有可能无法启动,并记录错误日志;
innodb_force_recovery可以设置为1-6,大的数字包含前面所有数字的影响。当设置参数值大于0后,可以对表进行select,create,drop操作,但insert,update或者delete这类操作是不允许的。
- (SRV_FORCE_IGNORE_CORRUPT):忽略检查到的corrupt页。
- (SRV_FORCE_NO_BACKGROUND):阻止主线程的运行,如主线程需要执行full purge操作,会导致crash。
- (SRV_FORCE_NO_TRX_UNDO):不执行事务回滚操作。
- (SRV_FORCE_NO_IBUF_MERGE):不执行插入缓冲的合并操作。
- (SRV_FORCE_NO_UNDO_LOG_SCAN):不查看重做日志,InnoDB存储引擎会将未提交的事务视为已提交。
- (SRV_FORCE_NO_LOG_REDO):不执行前滚的操作。
解决方案
一般修复方法参考:
建立一张新表:
把数据导进去
删除掉原表:
注释掉 innodb_force_recovery 之后,重启。
重命名:
最后改回存储引擎:
另一个方法是使用mysqldump将表格导出,然后再导回到InnoDB表中。这两种方法的结果是相同的。
备份导出(包括结构和数据):
还原方法1:
还原方法2(系统命令行):
注意,CHECK TABLE命令在InnoDB数据库中基本上是没有用的。
1、配置my.cnf
配置innodb_force_recovery = 1或2——6几个数字,重启MySQL
2、导出数据脚本
导出SQL脚本。或者用Navicat将所有数据库/表导入到其他服务器的数据库中。
注意:必须成功备份此处的数据。然后删除原始数据库中的数据。
[En]
Note: the data here must be backed up successfully. Then delete the data in the original database.
3、删除ib_logfile0、ib_logfile1、ibdata1
备份MySQL数据目录下的ib_logfile0、ib_logfile1、ibdata1三个文件,然后将这三个文件删除
4、配置my.cnf
将my.cnf中innodb_force_recovery = 1或2——6几个数字这行配置删除或者配置为innodb_force_recovery = 0,重启MySQL服务
5、将数据导入MySQL数据库
使用该方法应注意的问题:
[En]
Problems that should be paid attention to in this method:
- ib_logfile0、ib_logfile1、ibdata1这三个文件一定要先备份后删除;
- 确保原始数据导出成功
[En]
make sure that the original data is exported successfully*
- 当数据导出成功后,删除原数据库中的数据时,如果提示不能删除,可在命令行进入MySQL的数据目录,手动删除相关数据库的文件夹或者数据库文件夹下的数据表文件,前提是数据一定导出或备份成功。
Original: https://www.cnblogs.com/huaweiyun/p/16629980.html
Author: 华为云开发者联盟
Title: 记一次血淋淋的MySQL崩溃修复案例
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/504932/
转载文章受原作者版权保护。转载请注明原作者出处!