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

 更新时间:2020年04月17日 11:56:37   作者:我的二狗呢  
这篇文章主要介绍了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中自定义参数的使用详解

    在MySQL中自定义参数的使用详解

    今天小编就为大家分享一篇在MySQL中自定义参数的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • Mysql 8 新特性 window functions 的作用

    Mysql 8 新特性 window functions 的作用

    MySQL是众多网站技术栈中的标准配置,是广受欢迎的开源数据库,已经推出了8.0的第一个候选发行版本。接下来通过本文给大家分享Mysql 8 新特性 window functions 的作用,需要的朋友参考下吧
    2017-11-11
  • 详解MySQL资源组的使用方法

    详解MySQL资源组的使用方法

    MySQL支持创建和管理资源组,并允许将服务器内运行的线程分配给特定的组,本文主要介绍了详解MySQL资源组的使用方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • MySQL的中文UTF8乱码问题

    MySQL的中文UTF8乱码问题

    MySQL从4.x版本开始支持Unicode,3.x只有latin1编码。刚工作的时候就开始用MySQL了,用的php存取,网页xxx.php是gb2312的编码,存进去的数据用php取出来是中文,用phpMyAdmin执行select、update、dump都是中文,没有乱码问题。
    2010-05-05
  • 规范化的SQL数据修改语句总结

    规范化的SQL数据修改语句总结

    本文将提供一些标准的SQL句,可供一些有需求的朋友参考
    2012-11-11
  • MySql字符串拆分实现split功能(字段分割转列)

    MySql字符串拆分实现split功能(字段分割转列)

    本文主要介绍了MySql字符串拆分实现split功能(字段分割转列),文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • MySQL获得当前日期时间函数示例详解

    MySQL获得当前日期时间函数示例详解

    这篇文章主要给大家介绍了关于MySQL获得当前日期时间函数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Mysql实现简易版搜索引擎的示例代码

    Mysql实现简易版搜索引擎的示例代码

    前段时间,因为项目需求,需要根据关键词搜索聊天记录,所以本文实现了Mysql实现简易版搜索引擎,具有一定的参考价值,感兴趣的可以了解一下
    2021-08-08
  • 深入浅析Mysql联合索引最左匹配原则

    深入浅析Mysql联合索引最左匹配原则

    这篇文章主要介绍了Mysql联合索引最左匹配原则,使用联合索引的好处多多,具体内容详情大家跟随脚本之家小编一起学习吧
    2018-06-06
  • MySQL压测神器HammerDB的部署及使用详解

    MySQL压测神器HammerDB的部署及使用详解

    HammerDB 是一个开源的数据库负载测试和基准测试工具,同时支持 Windows 和 Linux 平台,这篇文章主要介绍了MySQL压测神器HammerDB的部署及使用,需要的朋友可以参考下
    2022-08-08

最新评论