MySQL表自增id溢出的故障復(fù)盤解決
問題:MySQL某個表自增id溢出導(dǎo)致某業(yè)務(wù)block
背景:
tokudb引擎的一個大表tb1,存放業(yè)務(wù)上的機審日志,每天有大量的寫入, 并且由于歷史原因,這張表是int signed 類型的,最大只能存 2147483647行記錄 。
處理過程:
增加DBLE中間件代理,然后做range分區(qū),將新數(shù)據(jù)寫到新加的的一個分片上。 同時業(yè)務(wù)上修改連接將這個表tb1的連接方式改走DBLE。 但是業(yè)務(wù)上改完代碼后,發(fā)現(xiàn)還有殘余的部分insert into tb1的寫請求被轉(zhuǎn)發(fā)到了老的表上,且有些表被錯誤得路由到了DBLE上。 這加劇了事情的復(fù)雜度。最終業(yè)務(wù)上將這個寫tb1的代碼下線后,整個業(yè)務(wù)才恢復(fù)正常。
后來復(fù)盤后,我想了下其實這種情況下,對于日志類的表的問題,DBA應(yīng)該采用迅速果斷的措施 盡快恢復(fù)業(yè)務(wù),然后再考慮其它問題。 這樣考慮的話,上面的問題就好解決了。 只需要下面幾步:
use logdb; select max(id) from tb1; -- 記錄下當(dāng)前最大的id為 xxxx create table tb2 LIKE tb1; -- 創(chuàng)建影子表 alter table tb2 modify column id bigint unsigned not null auto_increment ; -- 修改新表為bigint unsigned類型,能存 18446744073709551615 行數(shù)據(jù)。 alter table tb2 auto_increment=xxxx+1; -- 改大新表的自增主鍵起始值 rename table tb1 to tb_archive , tb2 to tb1; -- 切換表名
這樣操作后,tb1就可以寫入數(shù)據(jù)了,業(yè)務(wù)也能暫時恢復(fù),剩下的工作就是把 tb_archive 表的數(shù)據(jù)遷移到 tb1 里面的(遷移數(shù)據(jù)可以使用pt-archiver工具在后臺慢慢跑就行)。
算了下,整個操作中切表最多5分鐘左右即可恢復(fù)業(yè)務(wù)的寫入操作,剩余的遷移數(shù)據(jù)的影響相對會小一些。
后續(xù)優(yōu)化措施:
增加對自增id的監(jiān)控, 見這里 http://www.dhdzp.com/article/184935.htm
整理些生產(chǎn)上可能遇到的突發(fā)問題,并正對性的制定相關(guān)的應(yīng)急預(yù)案
到此這篇關(guān)于MySQL表自增id溢出的故障復(fù)盤解決的文章就介紹到這了,更多相關(guān)MySQL自增id溢出內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mysql 8 新特性 window functions 的作用
MySQL是眾多網(wǎng)站技術(shù)棧中的標(biāo)準(zhǔn)配置,是廣受歡迎的開源數(shù)據(jù)庫,已經(jīng)推出了8.0的第一個候選發(fā)行版本。接下來通過本文給大家分享Mysql 8 新特性 window functions 的作用,需要的朋友參考下吧2017-11-11
規(guī)范化的SQL數(shù)據(jù)修改語句總結(jié)
本文將提供一些標(biāo)準(zhǔn)的SQL句,可供一些有需求的朋友參考2012-11-11
MySql字符串拆分實現(xiàn)split功能(字段分割轉(zhuǎn)列)
本文主要介紹了MySql字符串拆分實現(xiàn)split功能(字段分割轉(zhuǎn)列),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05
MySQL獲得當(dāng)前日期時間函數(shù)示例詳解
這篇文章主要給大家介紹了關(guān)于MySQL獲得當(dāng)前日期時間函數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12

