MySQL表自增id溢出的故障复盘如何解决?本篇文章小编给大家分享一下MySQL表自增id溢出的故障复盘解决方法,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
问题:MySQL某个表自增id溢出导致某业务block
背景:
tokudb引擎的一个大表tb1,存放业务上的机审日志,每天有大量的写入, 并且由于历史原因,这张表是int signed 类型的,最大只能存 2147483647行记录 。
处理过程:
增加DBLE中间件代理,然后做range分区,将新数据写到新加的的一个分片上。 同时业务上修改连接将这个表tb1的连接方式改走DBLE。 但是业务上改完代码后,发现还有残余的部分insert into tb1的写请求被转发到了老的表上,且有些表被错误得路由到了DBLE上。 这加剧了事情的复杂度。最终业务上将这个写tb1的代码下线后,整个业务才恢复正常。
后来复盘后,我想了下其实这种情况下,对于日志类的表的问题,DBA应该采用迅速果断的措施 尽快恢复业务,然后再考虑其它问题。 这样考虑的话,上面的问题就好解决了。 只需要下面几步:
use logdb; select max(id) from tb1; -- 记录下当前最大的id为 xxxx create table tb2 LIKE tb1; -- 创建影子表 alter table tb2 modify column id bigint unsigned not null auto_increment ; -- 修改新表为bigint unsigned类型,能存 18446744073709551615 行数据。 alter table tb2 auto_increment=xxxx+1; -- 改大新表的自增主键起始值 rename table tb1 to tb_archive , tb2 to tb1; -- 切换表名
这样操作后,tb1就可以写入数据了,业务也能暂时恢复,剩下的工作就是把 tb_archive 表的数据迁移到 tb1 里面的(迁移数据可以使用pt-archiver工具在后台慢慢跑就行)。
算了下,整个操作中切表最多5分钟左右即可恢复业务的写入操作,剩余的迁移数据的影响相对会小一些。
忍者必须死34399账号登录版 最新版v1.0.138v2.0.72
下载勇者秘境oppo版 安卓版v1.0.5
下载忍者必须死3一加版 最新版v1.0.138v2.0.72
下载绝世仙王官方正版 最新安卓版v1.0.49
下载Goat Simulator 3手机版 安卓版v1.0.8.2
Goat Simulator 3手机版是一个非常有趣的模拟游
Goat Simulator 3国际服 安卓版v1.0.8.2
Goat Simulator 3国际版是一个非常有趣的山羊模
烟花燃放模拟器中文版 2025最新版v1.0
烟花燃放模拟器是款仿真的烟花绽放模拟器类型单机小游戏,全方位
我的世界动漫世界 手机版v友y整合
我的世界动漫世界模组整合包是一款加入了动漫元素的素材整合包,
我的世界贝爷生存整合包 最新版v隔壁老王
我的世界MITE贝爷生存整合包是一款根据原版MC制作的魔改整