MySQL binlog 復(fù)制服務(wù)的一次故障

最近發(fā)生了一次 binlog 復(fù)制服務(wù)的一次故障, 記錄一下.

0x00 背景

線上有個(gè) MySQL 服務(wù)器, 通過 binlog 同步將數(shù)據(jù)更新發(fā)送到 Kafka, 供后續(xù)搜索等服務(wù)消費(fèi). MySQL 權(quán)限僅給了 db1 的所有 Table 的 SELECT 權(quán)限和 Slave 權(quán)限.

0x01 故障過程

由于要做線上 schema 變更, 因此同事在 test 庫上作了一次預(yù)演:

  • 創(chuàng)建了一個(gè)臨時(shí)表tmp_table1
  • 完成線上 schema 修改的預(yù)演實(shí)驗(yàn)
  • DROP 了上面的 tmp_table1

整個(gè)過程也就幾分鐘, 但對(duì)于 binlog 復(fù)制服務(wù)來說:

  • 創(chuàng)建新的表, binlog 中收到了一個(gè) TableMapEvent
  • 然而所屬的 MySQL user 并沒有該表的 DESC 權(quán)限, 獲取 tmp_table1 的詳細(xì)信息時(shí)報(bào)錯(cuò)沒有權(quán)限, 同步服務(wù)就此卡住
  • 過了一段時(shí)間, 主從復(fù)制 lag 到達(dá)閾值, 觸發(fā) pagerduty 告警
  • on-call 工程師接到告警, 查看日志定位到問題后, 試圖通過賦予binlog 復(fù)制服務(wù)的 MySQL 賬戶 *.*SELECT 權(quán)限解決問題, 但tmp_table1已經(jīng)被 DROP 掉, 因此 binlog 服務(wù)卡住了, 服務(wù)無法恢復(fù)
  • 隨后工程師決定跳過這些 binlog 的位置, 但 MySQL binlog 的 offset 是文件中的物理位置, 而不是類似 Kafka 的 offset 一樣的類似日志 ID, 猜測了好幾次才得以找到一個(gè)正確的 offset

整個(gè)過程下來, TTR(Time-To-Recover)估計(jì)有30分鐘.

0x02 事后總結(jié)

整個(gè)事故有什么可以學(xué)習(xí)到的呢?

1. binlog 復(fù)制服務(wù)不適合的場景

所有的架構(gòu)都是有適用場景的, binlog 復(fù)制也不例外, 可以學(xué)習(xí)到的是, 如果是那種經(jīng)常 DROP 表的 MySQL 實(shí)例(少見, 但這次不就是構(gòu)造了這種場景么), 在沒有做 binlog 特殊處理的情況下是不適合的, 非常容易觸發(fā)這種 binlog 復(fù)制服務(wù)找不到對(duì)應(yīng)的表的情況

2. 線上數(shù)據(jù)庫操作必須在嚴(yán)格的 staging 環(huán)境預(yù)演后再進(jìn)行

線上數(shù)據(jù)操作, 在嚴(yán)格的 staging 環(huán)境預(yù)演, 注意是 嚴(yán)格的 staging 環(huán)境. 上述問題, 如果是隨便 setup 的staging 環(huán)境, 有些細(xì)節(jié)跟線上不同, 就會(huì)失去提前暴露問題的機(jī)會(huì). 通過自動(dòng)化, 確保線上環(huán)境和 staging 環(huán)境除了數(shù)據(jù)和密碼不一樣, 其他都保持一致, 有時(shí)候是"救命"的

這個(gè)故障剛過, 當(dāng)天夜里 MySQL --> Hive 的全量同步服務(wù)也出現(xiàn)了故障: 做線上 schema 更改, 使用的工具創(chuàng)建了_開頭的臨時(shí)表在線上庫, 但 _開頭的表在 Hive 中是違法的表名, 導(dǎo)致數(shù)據(jù)同步完成后在 Hive 中創(chuàng)建表失敗. 一天兩個(gè)故障, 身心俱疲[捂臉].

3. 監(jiān)控一定要全面

出問題不可怕, 可怕的是"用戶"比你先發(fā)現(xiàn), 反過來通知你就尷尬了. 因此告警一定要覆蓋全面, 一旦出現(xiàn)問題, 立馬通知受影響的"用戶"(內(nèi)部系統(tǒng)或者外部用戶). 欣慰的是, 這兩次故障都是告警系統(tǒng)發(fā)現(xiàn)的.

0x03 Chaos Engineering

最后還是想, 還是要努力推進(jìn) chaos engineering, 平時(shí)通過錯(cuò)誤注入觸發(fā)錯(cuò)誤, 再回頭看自己系統(tǒng)的健壯性才是正解...

-- EOF --

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末含潘,一起剝皮案震驚了整個(gè)濱河市艺沼,隨后出現(xiàn)的幾起案子锥腻,更是在濱河造成了極大的恐慌彰导,老刑警劉巖瓮孙,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異绍赛,居然都是意外死亡钾菊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門匣砖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來科吭,“玉大人,你說我怎么就攤上這事脆粥∑瞿纾” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵变隔,是天一觀的道長规伐。 經(jīng)常有香客問我,道長匣缘,這世上最難降的妖魔是什么猖闪? 我笑而不...
    開封第一講書人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮肌厨,結(jié)果婚禮上培慌,老公的妹妹穿的比我還像新娘。我一直安慰自己柑爸,他們只是感情好吵护,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般馅而。 火紅的嫁衣襯著肌膚如雪祥诽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評(píng)論 1 308
  • 那天瓮恭,我揣著相機(jī)與錄音雄坪,去河邊找鬼。 笑死屯蹦,一個(gè)胖子當(dāng)著我的面吹牛维哈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播登澜,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼阔挠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了帖渠?” 一聲冷哼從身側(cè)響起谒亦,我...
    開封第一講書人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎空郊,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體切揭,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡狞甚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了廓旬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哼审。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖孕豹,靈堂內(nèi)的尸體忽然破棺而出涩盾,到底是詐尸還是另有隱情,我是刑警寧澤励背,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布春霍,位于F島的核電站,受9級(jí)特大地震影響叶眉,放射性物質(zhì)發(fā)生泄漏址儒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一衅疙、第九天 我趴在偏房一處隱蔽的房頂上張望莲趣。 院中可真熱鬧,春花似錦饱溢、人聲如沸喧伞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽潘鲫。三九已至绿聘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間次舌,已是汗流浹背熄攘。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留彼念,地道東北人挪圾。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像逐沙,于是被迫代替她去往敵國和親哲思。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

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

  • 一吩案、什么是Mysql主從復(fù)制 MySQL主從復(fù)制是其最重要的功能之一棚赔。主從復(fù)制是指一臺(tái)服務(wù)器充當(dāng)主數(shù)據(jù)庫服務(wù)器,另...
    人在碼途閱讀 2,758評(píng)論 0 23
  • MySQL運(yùn)維實(shí)踐 5.1-MySQL日志系統(tǒng) 什么是日志 日志(log)是一種順序記錄事件流水的文件 記錄計(jì)算機(jī)...
    極客圈閱讀 1,418評(píng)論 1 11
  • 灰常重要——Day 20 畢業(yè)大作 不限主題不限形式徘郭,把自己21天所感所得靠益,呈現(xiàn)出來。完成本篇作業(yè)残揉,可獲得母后手繪...
    採琢閱讀 232評(píng)論 0 1
  • A 我是簡兮胧后,像往日一樣,啪抱环,關(guān)掉燈光壳快,走出辦公室,嘟啷著嘴“哼镇草,光加班不給加班費(fèi)眶痰,又是一個(gè)被滅絕師太剝削的夜晚”...
    簡小石榴閱讀 363評(píng)論 0 3
  • 我又來了
    f3e15aaa8d48閱讀 105評(píng)論 0 0