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

作者:我的二狗呢 时间:2024-01-24 05:00:50 

问题: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

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

来源:https://blog.51cto.com/lee90/2428250

标签:MySQL,自增id,溢出
0
投稿

猜你喜欢

  • python实现自动化群控的步骤

    2023-07-04 11:50:25
  • Python文件遍历os.walk()与os.listdir()使用及说明

    2022-11-10 21:53:36
  • 使用Matlab将矩阵保存到csv和txt文件

    2022-11-25 16:08:35
  • python下读取公私钥做加解密实例详解

    2022-04-17 03:39:00
  • SQL Server Table中XML列的操作代码

    2011-11-03 17:18:16
  • go slice 数组和切片使用区别示例解析

    2023-06-22 04:07:16
  • Golang TCP粘包拆包问题的解决方法

    2023-07-18 11:04:43
  • asp如何修改WINNT的登录密码?

    2010-06-10 17:06:00
  • MSSQL安全设置的具体步骤和方法小结

    2024-01-18 05:55:43
  • python 删除字符串中连续多个空格并保留一个的方法

    2021-08-16 14:07:25
  • SqlServer参数化查询之where in和like实现之xml和DataTable传参介绍

    2012-05-22 18:38:49
  • Python中的random函数实例详解

    2021-01-09 13:01:49
  • 教你用Python创建微信聊天机器人

    2021-10-06 21:50:14
  • Django crontab定时任务模块操作方法解析

    2022-08-01 03:50:56
  • Python字符串拼接六种方法介绍

    2021-07-30 01:34:14
  • python主线程与子线程的结束顺序实例解析

    2023-10-09 12:46:07
  • Go语言快速入门图文教程

    2023-07-23 10:30:16
  • python获取时间及时间格式转换问题实例代码详解

    2021-12-20 12:46:20
  • 悟透JavaScript

    2008-05-29 22:15:00
  • Go 防止 goroutine 泄露的方法

    2024-04-26 17:26:28
  • asp之家 网络编程 m.aspxhome.com