环境背景
利用rancher 部署的K8S环境,部署了单节点mysql容器,数据利用PVC进行了持久化。
故障现象:
mysql容器因为某些原因重启,一直无法启动成功,报错error日志为:
[ERROR] InnoDB: Ignoring the redo log due to missing MLOG_CHECKPOINT between the checkpoint 286993093713 and the end 287061357167.
[ERROR] InnoDB: Plugin initialization aborted with error Generic error.
...
排错过程(最好不要尝试删除ib_logfile 的方法)
- 初步判断是mysql启动是check redo log的 checkpoint 异常导致无法启动mysql
mysql配置文件中增加配置:
innodb_force_recovery=1
这里注意下:这个配置可配置的值为 1~6 , 数值越高,可能丢失数据风险越高。我自己的环境是配置到6mysql才正常启动。
- 连接mysql服务将原来的数据dump出来,偶尔会遇到某些表报错,可增加忽略此表的参数
--ignore-table,如果忽略多个表则多次使用此参数
mysqldump -h 127.0.0.1 -uroot -pxxxxxxxxx --single-transaction --all-databases --ignore-table ban_ba.scmsdfs > fullbackup.sql
- 重新启动一个新的mysql实例,
- 连接到新的mysql实例 并将之前备份的SQL文件导入新的mysql实例
- 单独处理之前报错的表,单独拷贝到新实例。(这里具体看各自情况来判定如何拷贝)
- 验证数据完整性。