一次深刻的教训(阿里云自建mysql,centos6.9,mysql5.6),没有对数据库备份足够的重视,升级服务没有做应急预案,导致线上环境停机4小时维护。
一、事情经过:
1、应用需要升级,
2、阿里云提示系统有漏洞需要打补丁,需要重启服务器
3、停了应用服务,没有手工停mysql服务,重启服务器
4、部署好应用,发现mysql连接异常,一脸懵逼。
提示:Cannot connect to local MYSQL server through socket '/var/lib/mysql/mysql.sock'
找不到mysql.sock,通过网上搜索也没找到原因,
执行 service mysqld restart;提示stop成功,start failed。
执行service mysqld status,提示mysql dead but subsys locked
一时间定位不到问题,查看错误日志。

二、通过请教高人,解决问题的步骤:
1、应该是表中有错误的数据导致启动失败,此时mysql -uroot -P已经连接不到mysql,通过修改/ect/my.cnf 增加一行innodb_force_recovery=2,强制启动mysql,完成数据备份。
2、此时该出错的表还是操作不了,通过navicat导出除此表之外的其他数据,庆幸这张表还只是暂时的日志文件,还没太大的意义。
3、mysqldump到错误表处就结束了。
4、新建一个数据库实例,数据导入,新建出错的表,启动服务恢复生产应用。
到此,离停服务器已经过去4个小时,仿佛经历了一场大劫难,以长时间停止线上服务和丢失数据的风险为代价,这个教训实在太大了。

本文记录了一次因服务器重启导致mysql无法启动的故障恢复过程,详细描述了问题定位、解决步骤以及后续的备份规划。故障期间线上服务停机4小时,提醒我们重视数据库备份和应急预案的重要性。解决方案包括设置innodb_force_recovery启动mysql进行数据备份,重新部署并恢复服务。为避免类似问题,提出了定期全量与增量备份、完善应急预案、考虑使用云服务以及提升数据库维护的专业性等策略。

被折叠的 条评论
为什么被折叠?



