专栏首页二狗的DBA之路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分钟左右即可恢复业务的写入操作,剩余的迁移数据的影响相对会小一些。

后续优化措施:

    增加对自增id的监控, 见这里 https://blog.51cto.com/lee90/2427912

    整理些生产上可能遇到的突发问题,并正对性的制定相关的应急预案

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Greenplum 5.16.0初探

    个人觉得GP目前比较尴尬。性能比Presto稍差点,唯品会已经把GP改用Presto替换看了。另外数仓/数据集市方面还有性能强悍的HAWQ ,支持更大数据规模H...

    二狗不要跑
  • awk在生产环境中高端应用

    转自张sir的博客:http://freeze.blog.51cto.com/1846439/829728

    二狗不要跑
  • MYSQL EXPLAIN 中的KEY_LEN的说明

    对于explain extended 查看执行计划里面的一些信息作为一个DBA还是必须掌握的。

    二狗不要跑
  • 2018年前端工具调查

    前端黑板报
  • C++之内联函数与constexpr

    inline 函数 规模小,流程直接且频繁调用 cout<<shortString(s1,s2)<<endl; = cout<<(s1.size()<s2.si...

    互联网金融打杂
  • 如何优雅判断属性值为空

    假设我们现在需要取出 a.b.c,但是并不清楚它们是否都存在,那么代码会写成这样:

    前端达人
  • 改Hosts文件上google

    用户1130771
  • 《Oracle Concept》第三章 - 6

    按照《Oracle Conecpt》的结构一起了解Oracle数据库,这是学习Oracle从入门到精通的基础。

    bisal
  • 美摄音视频SDK:独家提供VR全景视频编辑功能,支持“抖音”等特效

    如今的移动视频行业,在BAT与今日头条等互联网巨头的重金刺激下,新一轮的增长迎来了该领域的“黄金时代”。与此同时,巨头的分割,也让身处该行业的百余位玩家深陷混战...

    BestSDK
  • 《Oracle Concept》第三章 - 5

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/...

    bisal

扫码关注云+社区

领取腾讯云代金券