记一次mysql故障处理

最近遇到的问题还是有点多的,所以遇到问题就记录一下以免以后忘记了怎么解决

mysql版本5.7,centos环境,无法正常启动服务,提示

2021-06-10T08:18:06.378567Z 0 [ERROR] InnoDB: Trying to access page number 4294967295 in space 0, space name innodb_system, which is outside the tablespace bounds. Byte offset 0, len 16384, i/o type read. I
f you get this error at mysqld startup, please check that your my.cnf matches the ibdata files that you have in the MySQL server.

找了一圈不清楚哪出的问题,因为数据库只是开发环境所以直接重置数据文件

rm -rf /var/lib/mysql/*

如果是生产环境则不能这么简单粗暴,先配置

/etc/my.cnf加入innodb_force_recovery=X行
X为0-6数字
0正常运行mysql
1(SRV_FORCE_IGNORE_CORRUPT):忽略检查到的corrupt页。
2(SRV_FORCE_NO_BACKGROUND):阻止主线程的运行,如主线程需要执行full purge操作,会导致crash。
3(SRV_FORCE_NO_TRX_UNDO):不执行事务回滚操作。
4(SRV_FORCE_NO_IBUF_MERGE):不执行插入缓冲的合并操作。
5(SRV_FORCE_NO_UNDO_LOG_SCAN):不查看重做日志,InnoDB存储引擎会将未提交的事务视为已提交。
6(SRV_FORCE_NO_LOG_REDO):不执行前滚的操作。

数字越大跳过的mysql项就越多,跳过内容向下兼容,本次的mysql直到5才可以正常启动,启动后就可以正常运行服务

当设置innodb_force_recovery参数值大于0后,可以对表进行select,create,drop操作,但insert,update或者delete这类操作

然后进行备份

mysqldump -uroot -p --all-databases> back.sql

再执行上面的重置数据文件

rm -rf /var/lib/mysql/*

之后进入my.cnf取消删除innodb_force_recovery行,重启mysql服务

以下操作么有经过检验:

重新执行MySQL的安全脚本mysql_secure_installation,设置root登录密码,然后登录MySQL进行数据库的恢复。

source back.sql(备份文件的绝对路径);

mysql忘记密码(version 5.7)

在 /etc/my.cnf 【mysql】模块下最后加入skip-grant-tables=1就可以直接使用mysql -uroot 登录,之后进行密码修改操作

记一次mysql故障处理

上一篇:postgresql 重要参数汇总


下一篇:常见超参数调优工具