中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決MySQL中gh-ost改雙主表結構主鍵沖突問題

發布時間:2021-10-08 17:15:41 來源:億速云 閱讀:340 作者:柒染 欄目:MySQL數據庫

如何解決MySQL中gh-ost改雙主表結構主鍵沖突問題,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

1)背景:

最近幫業務方排查了兩例主主復制丟數據或者主鍵沖突的問題,DB側的同事也問我這是什么一個原理,在解答他們的同時,順便也把這個問題記錄一下

2)現象:

    公司一南北業務采用主主復制,而且該表的主鍵是自增ID,每個主庫的自增ID是錯開的,但是業務的主鍵卻出現了主鍵沖突,開始以為是設置不當,或者認為修改造成,但是翻看歷史記錄,沒人有過操作,而且配置也正確,沒人重啟;在調查binlog中,發現了一個有意思的現象,MySQL的一個主庫binlog中出現了兩條主鍵ID是一樣的binlog,而且是insert產生的binlog,具體現象如下:

17:19分一條

    如何解決MySQL中gh-ost改雙主表結構主鍵沖突問題

17:22分鐘的一條

    如何解決MySQL中gh-ost改雙主表結構主鍵沖突問題

    開始自己的感覺是懵逼的,怎么主鍵相同,還能插入同一張表?后面猛然一想,這應該是gh-ost改表結構造成的(本公司DBA嚴重不足,部分DB操作只能讓業務運維也承擔一部分了)

3)模擬分析:

    如何解決MySQL中gh-ost改雙主表結構主鍵沖突問題

    前提:假設有兩個雙主,分別叫主庫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修改表結構的工程中,如果是雙主都有寫入,則必須將寫入切到單邊,然后再進行修改

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

正蓝旗| 宁海县| 旬邑县| 仲巴县| 正镶白旗| 顺昌县| 襄城县| 陇南市| 南投市| 阿拉善盟| 徐汇区| 栾川县| 富蕴县| 沿河| 辰溪县| 明溪县| 三河市| 凤凰县| 车致| 南岸区| 锡林浩特市| 阿荣旗| 隆昌县| 黄大仙区| 桃源县| 彭阳县| 星子县| 且末县| 石景山区| 阳谷县| 平乐县| 吉隆县| 广南县| 陇川县| 临沧市| 万山特区| 奎屯市| 罗平县| 华容县| 周宁县| 兴国县|