暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

技术分享 | 断电后MySQL数据库重启失败导致业务中断,你慌了么?(二)

MySql星探 2021-04-07
1155

作者:猴子的救兵
任职于中国500强、知名零售上市公司xx零售事业部DBA,主要负责事业部mysql以及redis等数据库维护。
本文来源:原创
* MySql星探出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。

从事数据库运维工作的你,是否有遇到过突然断电,数据库重启失败的经历?重启失败,意味着所提供的服务中断,业务全部瘫痪,是否会让你压力倍增?这次是案例分享的后半段,前面已分享过案例前半部分

回顾下案例的前半段,大致的事情经过如下,MySql星探微信群成员求助,自建数据库断电重启后,服务一直未能重启成功,分享的数据库错误日志如下。

在我的建议下,使用innodb_force_recovery参数,进行逐步恢复,后面恢复成功,再次进行数据库正常关闭,去掉强制恢复参数后,重启依旧失败,网友放弃进行修复,我记录了他给我反馈的问题,老天不负有心人,哈哈,我在后面工作中遇到了这个同样的问题,原因是开发环境由于磁盘空间不足,而导致数据库非正常关断,后面重启失败,现象与上面的截图是一样的,我也使用加innodb_force_recovery参数强制重启,重启成功,正常关闭后去掉参数,再次重启后,现象也是重启失败,这次我处理的过程大致如下:我再次加上参数,重启成功后,我用命令查看了下数据库的进程,发现有一个一直处在回滚当中

那么此时我突然明白了,突然断电,存在能来的及及时刷盘的大事物,数据库异常关断,导致innodb页损坏,直接重启失败因为数据已经损坏,加上强制重启参数个大事物就忽略而迅速启成功,但是这个是已属于正常提交的事物,强制重启成功后,这个事物他就一直处于回滚状态,从回滚进程中可以发现的执行的SQL语句


那其实原因就已经基本找到了,现在已处于强制恢复成功状态,但是这些强制跳过的回滚,而这个大事物就是其中一个,你立即又正常关闭后,其实这个回滚事物还是没有回滚完成,去掉参数,再重启结果是一样的,所以只有在加入强制参数恢复成功后,你需要等待这个回滚事物回滚成功再去正常关,去掉参数,重启,实例就会重启成功

有了上面这个思路,我就开始操作了,因为这是在开发环境,并且SQL是属于insert   into  xxx select  ... 语句,我并没有一直去等待这个事物回滚,因为这个事物比较大,可能需要耗费很长时间,我直接删除了这个xxx表,为什么这么处理,开发环境可以在执行一次,不会影响任何的东西,在删除这个表后,事物顺序回滚成功,个人感觉这个回滚其实也是删除xxx表的数据,所以直接drop,相当于加速了回滚,在这个处理完成之后,我正常关闭数据库,然后数据库重启成功,大功告成!这就是整个的过程,有的人说,那我一直加上这个参数,不就好了,不行,加上这个参数后,数据库基本就无法进行其他操作,报错如下,禁止你进行其他操作


整个的分享如上,遇到问题,才能带给你思考,也许才能让你更渗入的理解某些东西,多多关注,一起探讨,一起成长,也欢迎加入MySql星探!




MySql星探简介

星星之火,可以燎原

作为长沙互联网数据库领域兴起的一点星星之火,希望可以打造一片属于MySql星探成员自己的天地

星探创建者:猴子的救兵

成员数:66人





MySql星探



本文关键字:#MySQL星探# #mysql#innodb
 喜欢的话点一下“在看”,然后可以留言


最后修改时间:2021-04-07 15:13:15
文章转载自MySql星探,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论