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溢出内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • my.cnf参数配置实现InnoDB引擎性能优化

    my.cnf参数配置实现InnoDB引擎性能优化

    目前来说:InnoDB是为Mysql处理巨大数据量时的最大性能设计。它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。在数据量大的网站或是应用中Innodb是倍受青睐的。另一方面,在数据库的复制操作中Innodb也是能保证master和slave数据一致有一定的作用。
    2017-05-05
  • 浅谈mysql一张表到底能存多少数据

    浅谈mysql一张表到底能存多少数据

    这篇文章主要介绍了浅谈mysql一张表到底能存多少数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 关于MySQL的存储过程与存储函数

    关于MySQL的存储过程与存储函数

    存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集(这些SQL语句已经编译过了),它存储在数据库中,一次编译后永久有效,需要的朋友可以参考下
    2023-05-05
  • mysql数据库连接失败常见问题小结

    mysql数据库连接失败常见问题小结

    你有没有碰到过mysql数据库连接不上的问题呢?很多的小伙伴表示,经常会时不时的出现这些问题,下面这篇文章主要给大家介绍了关于mysql数据库连接失败常见问题的相关资料,需要的朋友可以参考下
    2023-06-06
  • Ubuntu16.04安装mysql5.7.22的图文教程

    Ubuntu16.04安装mysql5.7.22的图文教程

    这篇文章主要介绍了Ubuntu16.04安装mysql5.7.22的图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • mysql获取随机数据的方法

    mysql获取随机数据的方法

    在mysql中获取随机数据方法很简单只要使用order by rand()即可了,但是如果你是百万级数据量,使用order by rand()获取随机数据你会等死去,下面我来介绍具体的解决办法
    2013-11-11
  • MySQL中Set与Enum的区别和使用详解

    MySQL中Set与Enum的区别和使用详解

    这篇文章主要介绍了MySQL中Set与Enum的区别和使用详解,数据库中的 set 是一种集合数据类型,用于存储不同的元素,每个元素只能出现一次,Set 的主要作用是方便进行集合运算,如并集、交集等操作,需要的朋友可以参考下
    2024-01-01
  • mySQL之关键字的执行优先级讲解

    mySQL之关键字的执行优先级讲解

    这篇文章主要介绍了mySQL之关键字的执行优先级讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • mysql not in、left join、IS NULL、NOT EXISTS 效率问题记录

    mysql not in、left join、IS NULL、NOT EXISTS 效率问题记录

    mysql not in、left join、IS NULL、NOT EXISTS 效率问题记录,需要的朋友可以参考下。
    2011-12-12
  • MySQL慢查询的坑

    MySQL慢查询的坑

    这篇文章主要介绍了MySQL慢查询的坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04

最新评论