服务器意外断电MySQL无法启动

全栈技术精选

共 1194字,需浏览 3分钟

 · 2021-04-04

1.背景

客户反映无法登录系统。再三询问之下,客户说出一个情况:服务器因信息中心人为原因,最近总是意外断电。更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』

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

2.尝试过程

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

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

3.解决

1.在配置文件/etc/mysql/my.cnf中添加如下语句

[mysqld]innodb_force_recovery = 4

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

1.重新启动 mysql 之后表都是只读状态,此时可以备份数据库2.将备份文件导入到新的数据库中更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』

4.后记

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


-----------------------

微信公众号:全栈技术精选 (ID: Pythonnote)

个人博客:https://www.pythonnote.cn


点击关注下方账号,每天了解一些奇奇怪怪小知识

-----------------------

浏览 38
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报