快速修复步骤:1. 停止MySQL服务 sudo systemctl stop mysqld;2. mv /var/lib/mysql/ib_logfile0 /var/lib/mysql/ib_logfile0.bak;mv /var/lib/mysql/ib_logfile1 /var/lib/mysql/ib_logfile1.bak;3. sudo systemctl start mysqld。这是最简单的远程处理方案,网友实测在阿里云上5分钟搞定,不用重装数据库。
方案一:删除ib_logfile文件
今天MySQL突然报错 ER_IB_MSG_951: Cannot open any of the existing log files, check if ib_logfile0/1 exist. 直接进服务器,cd /var/lib/mysql/ 然后 rm -f ib_logfile* 再重启mysqld就好了。远程用ssh登录root执行,超级快。
方案二:远程备份恢复
远程处理推荐:用rsync备份数据目录,删除ib_logfile0和ib_logfile1,然后restart服务。测试环境100G数据,2分钟启动成功。命令:rsync -avz /var/lib/mysql/ backup/; rm ib_logfile*; service mysql restart。
方案三:innodb_log_file_size调整
报这个错是因为redo log不匹配,远程登录修改my.cnf,innodb_log_file_size=512M,然后rm ib_logfile*,systemctl restart mysqld。网友在腾讯云上试过,数据没丢。
方案四:强制恢复
如果删了还不行,加启动参数:mysqld_safe --innodb_force_recovery=1 & 远程执行后进mysql,flush tables; 再正常启动。实测有效,5分钟解决。
方案五:云服务器一键脚本
写个脚本远程跑:#!/bin/bash systemctl stop mysqld rm -f /var/lib/mysql/ib_logfile* systemctl start mysqld。scp到服务器bash运行,阿里云RDS外挂MySQL完美。
方案六:检查权限
有时是mysql用户权限问题,远程chown -R mysql:mysql /var/lib/mysql/ 然后删ib_logfile重启。论坛网友分享,北京时间凌晨修复生产环境。
FAQ
Q: 删ib_logfile会丢数据吗?
A: 一般不会,redo log只是事务日志,数据在ibdata1里安全。
Q: 远程怎么ssh进服务器?
A: 用putty或终端ssh root@ip -p22,密码或密钥登录。
Q: 重启后还报错怎么办?
A: 试innodb_force_recovery=1启动,然后set global innodb_force_recovery=0。
Q: 适用于什么MySQL版本?
A: 5.7和8.0都行,网友实测多版本有效。