【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
- MySQL 主鍵衝突,無法插入資料MySql
- 生產環境mysql主主同步主鍵衝突處理MySql
- UPDATE 時主鍵衝突引發的思考(連結)
- 安裝MySQL 5.6.10包衝突問題MySql
- mysql忽略主鍵衝突、避免重複插入的幾種方式MySql
- mysql 忽略主鍵衝突、避免重複插入的幾種方式MySql
- CentOS7安裝MySQL衝突和問題解決小結CentOSMySql
- mapstruct結合lombok使用的衝突問題StructLombok
- 利用觸發器解決更新主鍵衝突的問題觸發器
- 批量插入資料時主鍵衝突的處理
- MySQL的主鍵和欄位型別問題總結MySql型別
- JAR衝突問題的解決JAR
- git 解決版本衝突問題Git
- wsl docker 和 ubuntu 衝突問題DockerUbuntu
- VMware無法啟動/VMware和wsl衝突問題/VMware與Hyper-V衝突問題
- MySQL自增主鍵跳號問題MySql
- GO 問題之多版本衝突解決Go
- MySQL5.5加主鍵鎖讀問題MySql
- MySql插入唯一鍵衝突的三種可選方式MySql
- android NestedScrollView和ListView衝突問題AndroidView
- sysbench花式採坑之二:自增值導致的主鍵衝突
- 線上更改MySQL表結構工具gh-ost的特點介紹MySql
- 一個網路IP地址衝突的問題
- Maven中解決依賴衝突的問題Maven
- SSIS 資料庫排序規則衝突問題資料庫排序
- oracle客戶端同sap衝突的問題Oracle客戶端
- jQuey與json.jar的衝突問題JSONJAR
- MySQL(二):主從複製結構、半同步複製、雙主複製結構、利用SSL實現安全的MySQL主從複製MySql
- 演算法與資料結構——雜湊衝突演算法資料結構
- 電腦熱鍵衝突巧解決
- Android 解決BottomSheetDialog 拖曳衝突問題Android
- PtrClassicFrameLayout與viewpager橫向滑動衝突的問題Viewpager
- 如何解決jQuery的美元$符號衝突問題jQuery符號
- jquery如何解決版本之間衝突的問題jQuery
- 如解決jquery與原生js衝突的問題jQueryJS
- 關於click事件與touch事件衝突的問題事件
- 部落衝突叢林主題大更新 建築小屋全面升級