• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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://www.jb51.net/article/184935.htm

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

    到此这篇关于MySQL表自增id溢出的故障复盘解决的文章就介绍到这了,更多相关MySQL自增id溢出内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • MySQL的自增ID(主键) 用完了的解决方法
    • 关于mysql自增id,你需要知道的
    • 关于MySQL自增ID的一些小问题总结
    • 关于Mysql自增id的这些你可能还不知道
    • mysql自增id超大问题的排查与解决
    • MySQL分表自增ID问题的解决方法
    • 线上MySQL的自增id用尽怎么办
    上一篇:mysql自定义函数原理与用法实例分析
    下一篇:详解MySQL 表中非主键列溢出情况监控
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    MySQL表自增id溢出的故障复盘解决 MySQL,表自,增,溢出,的,故障,