MySQL表自增id溢出的故障复盘解决
作者:我的二狗呢 发布时间:2024-01-24 05:00:50
标签: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
整理些生产上可能遇到的突发问题,并正对性的制定相关的应急预案
来源:https://blog.51cto.com/lee90/2428250


猜你喜欢
- 表操作 例 1 对于表的教学管理数据库中的表 STUDENTS ,可以定义如
- 情境还原: 公司一项目新上线,刚上线的第2天,在后台发现数据库服务器与IIS服务器的网络IO出现瓶颈,1GB的网络带宽,占用了70%-100
- 目录1. format格式化_填充符号使用1.1 format格式化1.2 format的填充符号的使用2. 字符串相关的方法3. 列表的相
- 前言Jenkins, DevOps 技术栈的核心之一,CI/CD 离不开编写 Pipeline 脚本,上手 Jenkins ,简单查一下文档
- 日历功能在个人博客网站及一些任务类网站都有广泛的应用,当然,在一些通用网站的后台也不乏这些日历功能的综合应用,所以,一个结构合理、代码清晰的
- 本文主要介绍的是python3中对str(字符串)的使用操作总结,文中介绍的非常详细,需要的朋友们下面来一起看看吧。__add__函数 (在
- 本文实例讲述了Python中函数及默认参数的定义与调用操作。分享给大家供大家参考,具体如下:#coding=utf8''
- cli2去掉eslint检查器报错eslint在编写过程中及其严格,甚至单引号和双引号或者空格注释都会引起报错,导致项目无法正常运行因此,只
- 本文实例讲述了Python中类的创建和实例化操作。分享给大家供大家参考,具体如下:python中同样使用关键字class创建一个类,类名称第
- 方法一:函数添加1 import sys2 查看sys.path3 添加sys.path.append("c:\\")方
- 目录背景目的拆分前流程设计目录结构设计存在的问题拆分后流程设计目录结构设计解决的问题关键代码总结其他实现方式背景由于之前的数据库防火墙产品与
- 一直以来都是链接SQL Server数据库服务但是在部署时将很麻烦,所以突发奇想,直接连接到MDF文件,刚开始还很混乱不会连接,后来向导,连
- 要在Windows .bat文件中运行PHP脚本,可以使用以下方法:1. 打开记事本或任何文本编辑器。2. 编写.bat文件。例如,以下是一
- 前言从层次上来看,对象的复制可以简单地分为浅复制和深复制,顾名思义,浅复制是指只复制一层对象的属性,不会复制对象中的对象的属性,对象的深复制
- Jupyter Notebook是一个基于浏览器的交互式编程环境(REPL, read eval print loop),它主要构建在IPy
- 最近随着狂风计划的席卷,我也终于开始橱窗产品位列表展示的编码工作,这只是一个改进项目,因此有原代码可供参考。但是当我打开原代码模板的时候便愣
- 目录一、字符串:二、使用:(1)空字符串和 len( ) 函数(2)转译字符( \ )(3)字符串拼接(4)字符串复制(
- 程序测试是展现BUG存在的有效方式,但令人绝望的是它不足以展现其缺位。——艾兹格·迪杰斯特拉(Edsger W. Dijkstra)算法审查
- 本节内容深浅拷贝循环方式字典常用方法总结一、深浅拷贝列表、元组、字典(以及其他)对于列表、元组和字典而言,进行赋值(=)、浅拷贝(copy)
- 最初开发的 Matplotlib,仅支持绘制 2d 图形,后来随着版本的不断更新, Matplotlib 在二维绘图的基础上,构建了一部分较