Docker中MySQL断电后数据库的修复

docker重启之前没有关闭MySQL,导致重启后MySQL异常一直重启,发现是数据库中存在表损坏,需要修复。尝试把volume中的数据复制出来,下了几个修复软件修复,要么就是收费,要么就是破解失败导出乱码,修复不完整,只能尝试手动修复。

编辑MySQL的配置文件并在配置文件中的[mysqld]中添加:innodb_force_recovery 参数以只读方式启动,调整整个InnoDB存储引擎的恢复状况,innodb_force_recovery参数的值从 1-6 依次尝试,恢复等级越来越强。

innodb_force_recovery参数说明

innodb_force_recovery影响整个InnoDB存储引擎的恢复状况,默认值为0,表示当需要恢复时执行所有的恢复操作!! 
当不能进行有效的恢复操作时,Mysql有可能无法启动,并记录下错误日志。 
innodb_force_recovery可以设置为1-6,大的数字包含前面所有数字的影响。 
当该参数的数值设置大于0后,可以对表进行select,create,drop操作,但insert,update或者delete这类操作是不允许的。 
innodb_force_recovery=0 表示当需要恢复时执行所有的恢复操作; 
innodb_force_recovery=1 表示忽略检查到的corrupt页; 
innodb_force_recovery=2 表示阻止主线程的运行,如主线程需要执行full purge操作,会导致crash; 
innodb_force_recovery=3 表示不执行事务回滚操作; 
innodb_force_recovery=4 表示不执行插入缓冲的合并操作; 
innodb_force_recovery=5 表示不查看重做日志,InnoDB存储引擎会将未提交的事务视为已提交; 
innodb_force_recovery=6 表示不执行前滚的操作,强制重启! 
在主从库出现这种情况时,如果配置文件里之前就有这个参数,则尝试将该参数值修改为0或6,依次尝试重启。

1.编辑MySQL的配置文件添加innodb_force_recovery参数

找到Mysql的配置文件,一般都在路由器/etc/mysql/my.cnf,编辑MySQL的配置文件并在配置文件中的[mysqld]中添加:innodb_force_recovery = 6,添加好后保存启动数据库即可。

2.Docker安装的Mysql添加参数

Docker安装的Mysql如果启动失败是无法直接进入容器内部修改的,如果在之前已经将Mysql配置文件挂载到宿主机直接修改即可,如果没有挂载需要新建一个全新的mysql容器,修改my.cnf后再把原来的wordpress的数据库部分复制到新容器的volume中。

此时,该数据库不能正常使用,需要利用phpAdmin打开数据库,导出wordpress所有数据,然后再把my.cnf替换回原始的。再删除刚才新建的mysql容器和volume。最后再又新建一个mysql容器,导入刚才导出的所有wordpress数据。将wordpress重新建立连接。

3.Wordpress端修复

连接数据库后可能会出现白屏或者报错,此时需要打开wordpress的Debug模式。打开wordpress目录下的wp-config.php文件,修改以下部分:


define( 'WP_DEBUG', !!getenv_docker('WORDPRESS_DEBUG', '') );//注释该行并加上以下内容
// 开启WP_DEBUG模式
define( 'WP_DEBUG', true);
// 开启DEBUG日志,一定要记得关闭这个日志功能并清理这个日志文件哦,产生的日志文件在: /wp-content/debug.log
define( 'WP_DEBUG_LOG', true);
// 显示errors and warnings
define( 'WP_DEBUG_DISPLAY', true);
@ini_set( 'display_errors', 'On');

可能是由于某些插件或者主题的冲突,根据报错提示通过修改主题文件夹或插件文件夹名称,以及修改对应报错代码即可。

点赞

发表回复

电子邮件地址不会被公开。必填项已用 * 标注