小闫同学的IT日常-服务器意外断电MySQL无法启动

太刺激了,服务器断电,数据库无法启动!

更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』

1.背景

客户反映无法登录系统。再三询问之下,客户说出一个情况:服务器因信息中心人为原因,最近总是意外断电。

what?服务器这么儿戏吗?这么不安全吗?不管什么情况,先去现场检查一番。

2.尝试过程

  1. 登录服务器启动服务。
  2. 检查服务运行状态,发现 MySQL 容器一直处于尝试重启状态。
  3. 检查 docker 日志,筛选 MySQL 容器报错部分。
  4. 提示:数据库由于非正常情况关闭,正在尝试恢复,重新启动。然后一直处于启动报错关闭、启动报错关闭……
  5. 先检查 SQL 备份文件是否正常,虽然有,但是文件大小明显不对,完蛋。。只能寄希望于断电那一刻的数据恢复了。
  6. 在 MySQL 的配置文件中有一项配置项【innodb_force_recovery】代表强制恢复,它的值从1-6效果不断加强。越强,数据损坏的可能性越大,但是数据库正常启动的概率也越大。因此不能一上来就加足马力,最好是逐级递增尝试。
  7. 在设置为 4 时,容器终于正常启动。但此时并不代表正常,因为此时数据库所有表的状态为锁定只读状态。我们只需要将此时的数据导出备份即可。
  8. 导出最后一刻数据库后,将其导入到另一备用数据库中,恢复数据接入系统正常使用。

以上步骤是事后梳理而成,其实真实解决过程中问题不断,sql 导出文件无法使用,数据库问题,服务器问题,各种小问题不断。但是为了突出问题本身,不能将其他不相干的问题一一记录,否则会干扰大家问题解决。

3.解决

  1. 在配置文件/etc/mysql/my.cnf中添加如下语句
1
2
[mysqld]
innodb_force_recovery = 4

innodb_force_recovery参数的值从 1-6 依次尝试,恢复等级越来越强。

  1. 重新启动 mysql 之后表都是只读状态,此时可以备份数据库
  2. 将备份文件导入到新的数据库中

4.后记

生产环境所有操作必须三思而后行,在重大的压力、各种状况不断的情况下,很难保持一个清醒的头脑,不要自乱阵脚,让问题更复杂。

更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』

打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • 页面访问量: 独立访客访问数:
  • 更多精彩文章请关注微信公众号『全栈技术精选』,id 为『Pythonnote』

请我喝杯咖啡吧~

支付宝
微信