MySql表的主鍵超限導(dǎo)致的生產(chǎn)事故

前兩天系統(tǒng)的一張明細(xì)表的主鍵字段超出了限制范圍,引發(fā)了一次生產(chǎn)事故定罢。由于是底層服務(wù)使用的表笤虫,導(dǎo)致公司多個(gè)業(yè)務(wù)線系統(tǒng)無法使用,屬于比較重大的生產(chǎn)事故祖凫,分享給大家琼蚯,避免出現(xiàn)此類低級(jí)又重大的生產(chǎn)問題。

奮力寫bug.png

事故反饋

首先反饋出異常的是服務(wù)的告警機(jī)制蝙场,告警群中出現(xiàn)大量MySQL異常告警:


告警群.png

然后一線業(yè)務(wù)使用方在工作群中反饋系統(tǒng)不可用凌停,然后我們趕快緊急排查并解決問題。你懂的售滤,在你排查解決問題的過程中各個(gè)相關(guān)的同事都會(huì)過來問候你一下:產(chǎn)品經(jīng)理、上級(jí)領(lǐng)導(dǎo)台诗、運(yùn)營完箩、其它服務(wù)調(diào)用方....此時(shí),你面不改色拉队,鎮(zhèn)定自若弊知,其實(shí)內(nèi)心(手動(dòng)狗頭)...

事故原因

導(dǎo)致此次線上事故的原因是系統(tǒng)的一張老表(很早的一張表)的主鍵是int類型,表中數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)量(行數(shù))達(dá)到了int值的上限:2147483647粱快。你可以想象到這個(gè)表有多大:上百GB秩彤!
你可能會(huì)覺得這種問題好low笆宥蟆!你說還債也好漫雷,報(bào)應(yīng)也罷瓜富,我們就當(dāng)一次日后吹牛逼的話題吧。針對(duì)此次事故降盹,重要的是我們解決問題的過程以及從中獲取的經(jīng)驗(yàn)

解決方案

方案1
刪除表中的舊數(shù)據(jù)与柑,設(shè)置表的主鍵自增從0開始,此方案溝通后不行蓄坏。原因:

  1. 生產(chǎn)數(shù)據(jù)不能隨便刪除价捧,可能有未知隱患
  2. 表中數(shù)據(jù)量太大,這張表日增數(shù)據(jù)量近百萬級(jí)涡戳,從幾百G的大表中刪除百萬數(shù)據(jù)(需夠一天使用)结蟋,這個(gè)操作將會(huì)消耗大量的數(shù)據(jù)庫實(shí)例的資源,進(jìn)而影響其它業(yè)務(wù)渔彰,不可接受

方案2
把表的主鍵類型由int改為bigint嵌屎,對(duì)應(yīng)的代碼model由Integer改為Long。此處可能是大家有些著急吧胳岂,犯了一個(gè)流程性的問題:我們開發(fā)認(rèn)為代碼層面方案沒問題编整,在熱火朝天的修改,結(jié)果表結(jié)構(gòu)的變更工單提交給DBA審批乳丰,不通過掌测,表數(shù)據(jù)量太大,變更表結(jié)構(gòu)極其耗時(shí)产园,可能小時(shí)級(jí)汞斧,方案廢棄

方案3
創(chuàng)建一張新表,結(jié)構(gòu)和原表一樣(只是把主鍵類型換為bigint)什燕,主鍵自增從2300000000開始(為了和舊表數(shù)據(jù)區(qū)分)粘勒,修改業(yè)務(wù)代碼:

  1. 代碼中,新數(shù)據(jù)寫入到新建的表中
  2. 代碼中查數(shù)據(jù)屎即,從新表和老表中一起查詢庙睡,合并返回。之所以新舊表一起查詢技俐,是因?yàn)槭鹿拾l(fā)生時(shí)有的業(yè)務(wù)已經(jīng)產(chǎn)生過明細(xì)數(shù)據(jù)乘陪,然后又被業(yè)務(wù)人員重新操作,新數(shù)據(jù)存在新表中

最終采用此方案雕擂,修復(fù)上線啡邑,問題解決。

方案后續(xù)處理

  1. 后續(xù)將舊表的數(shù)據(jù)同步到新表中井赌,恢復(fù)單表查詢
  2. 表數(shù)據(jù)歸檔

復(fù)盤反思

  1. 數(shù)據(jù)庫表的主鍵建議采用bigint類型(一般性規(guī)約谤逼,除非是簡(jiǎn)單的配置表用int)
  2. 對(duì)老系統(tǒng)贵扰,可以定期巡查相關(guān)數(shù)據(jù)表(有告警最好),提早發(fā)現(xiàn)遺留問題流部,提前解決
  3. 處理緊急問題戚绕,思路很重要,不能盲目修改
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末贵涵,一起剝皮案震驚了整個(gè)濱河市列肢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宾茂,老刑警劉巖瓷马,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異跨晴,居然都是意外死亡欧聘,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門端盆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來怀骤,“玉大人,你說我怎么就攤上這事焕妙〗祝” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵焚鹊,是天一觀的道長痕届。 經(jīng)常有香客問我,道長末患,這世上最難降的妖魔是什么研叫? 我笑而不...
    開封第一講書人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮璧针,結(jié)果婚禮上嚷炉,老公的妹妹穿的比我還像新娘。我一直安慰自己探橱,他們只是感情好申屹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著隧膏,像睡著了一般独柑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上私植,一...
    開封第一講書人閱讀 51,115評(píng)論 1 296
  • 那天,我揣著相機(jī)與錄音车酣,去河邊找鬼曲稼。 笑死索绪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的贫悄。 我是一名探鬼主播瑞驱,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼窄坦!你這毒婦竟也來了唤反?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤鸭津,失蹤者是張志新(化名)和其女友劉穎彤侍,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體逆趋,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盏阶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了闻书。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片名斟。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖魄眉,靈堂內(nèi)的尸體忽然破棺而出砰盐,到底是詐尸還是另有隱情,我是刑警寧澤坑律,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布岩梳,位于F島的核電站,受9級(jí)特大地震影響脾歇,放射性物質(zhì)發(fā)生泄漏蒋腮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一藕各、第九天 我趴在偏房一處隱蔽的房頂上張望池摧。 院中可真熱鬧,春花似錦激况、人聲如沸作彤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽竭讳。三九已至,卻和暖如春浙踢,著一層夾襖步出監(jiān)牢的瞬間绢慢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來泰國打工洛波, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胰舆,地道東北人骚露。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像缚窿,于是被迫代替她去往敵國和親棘幸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容