【MySQL】gh-ost改雙主表結構主鍵衝突問題
1)背景:
最近幫業務方排查了兩例主主複製丟資料或者主鍵衝突的問題,DB側的同事也問我這是什麼一個原理,在解答他們的同時,順便也把這個問題記錄一下
2)現象:
公司一南北業務採用主主複製,而且該表的主鍵是自增ID,每個主庫的自增ID是錯開的,但是業務的主鍵卻出現了主鍵衝突,開始以為是設定不當,或者認為修改造成,但是翻看歷史記錄,沒人有過操作,而且配置也正確,沒人重啟;在調查binlog中,發現了一個有意思的現象,MySQL的一個主庫binlog中出現了兩條主鍵ID是一樣的binlog,而且是insert產生的binlog,具體現象如下:
17:19分一條
17:22分鐘的一條
開始自己的感覺是懵逼的,怎麼主鍵相同,還能插入同一張表?後面猛然一想,這應該是gh-ost改表結構造成的(本公司DBA嚴重不足,部分DB操作只能讓業務運維也承擔一部分了)
3)模擬分析:
前提:假設有兩個雙主,分別叫主庫A與主庫B,上面存在表T,T表只有一個主鍵,在ghost修改之前的表,我們叫T,修改之後的表是T'(T跟T'其實是同一張表,只是產生的時間不同的叫法,方便表示)
①主庫B進行rename table T to T_old,new_t TO T操作,這時候主庫A是T'表了
②同時主庫A插入T表13的資料,但是主庫B還沒收到(延遲關係)
③主庫A的T表被主庫B傳過來的rename table T to T_old,new_t TO T修改,變成了T';由於T'表在主庫B還沒收到第二步發過來的13,所以主庫A的T'表肯定也沒13這個值
④主庫A在這時又向T'插入13,正在複製給主庫B的T'中(由於延遲,還沒傳送到主庫的T'表)
⑤主庫B的T'接收到第二步主庫A插入T的13
⑥第四步主庫A寫入T'的13已經傳到主庫B,發現B主庫的T'表已經有了13(第五步過來的),然後主鍵衝突
到此,主鍵衝突的原因已經找到,這種衝突意味著資料有丟失(此分析需要你對gh-ost的原理有充分的理解)
4)如何避免
在用gh-ost修改表結構的工程中,如果是雙主都有寫入,則必須將寫入切到單邊,然後再進行修改
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30221425/viewspace-2676301/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle 序列值導致的主鍵衝突問題Oracle
- 主鍵衝突引發的死鎖
- mapstruct結合lombok使用的衝突問題StructLombok
- insert引起的死鎖,起因主鍵衝突
- git 解決版本衝突問題Git
- android NestedScrollView和ListView衝突問題AndroidView
- wsl docker 和 ubuntu 衝突問題DockerUbuntu
- JAR衝突問題的解決JAR
- MySQL自增主鍵跳號問題MySql
- VMware無法啟動/VMware和wsl衝突問題/VMware與Hyper-V衝突問題
- Android 解決BottomSheetDialog 拖曳衝突問題Android
- GO 問題之多版本衝突解決Go
- MySql插入唯一鍵衝突的三種可選方式MySql
- sysbench花式採坑之二:自增值導致的主鍵衝突
- 一個網路IP地址衝突的問題
- anaconda中python環境路徑衝突問題Python
- 演算法與資料結構——雜湊衝突演算法資料結構
- 線上更改MySQL表結構工具gh-ost的特點介紹MySql
- Git Worktree:解決分支依賴衝突的問題Git
- ScrollView巢狀RecyclerView滑動衝突相關問題View巢狀
- PtrClassicFrameLayout與viewpager橫向滑動衝突的問題Viewpager
- 部落衝突叢林主題大更新 建築小屋全面升級
- MySQL雙主雙從配置MySql
- 解決gerrit commit後pull發生衝突的問題MIT
- ivew表格中render函式與tooltip:true衝突問題函式
- 主鍵為聯合主鍵時,索引B+樹結構索引
- Mysql關於自增主鍵,自增主鍵優化總結MySql優化
- Mysql主從架構搭建的時候遇到的問題MySql架構
- cad快捷鍵和win10衝突怎麼辦_cad快捷鍵和win10衝突的解決方法Win10
- mysql主從同步問題整理MySql主從同步
- repmgr 叢集雙主問題處理
- 自動檢測ARouter路由地址分組使用衝突問題路由
- 簡單介紹Lombok使用@Tolerate實現衝突相容問題Lombok
- mysql雙主雙從 搭建配置MySql
- windows10玩遊戲鍵盤衝突怎麼辦 win10遊戲與鍵盤衝突解決方法Windows遊戲Win10
- [20200107]vim 按鍵與金山詞霸衝突.txt
- mysql 新增時,唯一索引衝突時更新MySql索引
- Maven依賴衝突解決總結Maven