国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

在MySQL中使用GTIDs復制協議和中斷協議的教程

2024-07-24 12:46:15
字體:
來源:轉載
供稿:網友

 MySQL5.6有很多新的特性,其中很多人都感興趣的一條就是全局事務序號功能(GTIDs)。而大家都對這一特性很感興趣的原因也很好理解,即:本來重新連接從服務器和一個新的主服務器一直是件很麻煩的事,然而在啟用GTIDs功能之后就變得簡單易行。可是,GTIDs的使用不單單是用單獨的標識符替換舊的二進制日志文件/位置,它也采用了新的復制協議。假如你還不太明白這些,那你可以在這篇文章里學點什么。
復制協議:新的 VS 舊的

舊的協議往往簡單直接即:首先從服務器上在一個特定的偏移量那里連接到一個給定的二進制日志文件,然后主服務器在從那里發送所有的事務。


新協議稍有不同:slave首先會發送它已經執行過的GTID的范圍,然后master發送每一個丟失的事務. 它也確保了一個給定的GTID只可以在一個特定的slave中執行一次.

實踐中,這會改變任何東西嗎? 使得,它會改變很多東西. 想象一下下面的場景: 你想要從trx 4開始復制,但是trx2在slave上因為某種緣故丟失了. 

2015422100429095.png (529×265)

 使用老協議的話,trx 2再也不會被執行一次,而使用新協議,它就會被自動的再執行一次.

下面是兩個你可以在實踐中看到新協議的通用場景.

跳過事務

眾所周知老的 SET GLOBAL sql_slave_skip_counter = N 在你想要跳過一個事務時不再提供支持,而GTID就可以被啟用了. 換用 GTID XXX:N 來跳過事務, 你須得 注入一個空的事務:
 

mysql> SET gtid_next = 'XXX:N';mysql> BEGIN; COMMIT;mysql> SET gtid_next = 'AUTOMATIC';

為什么我們不能使用 sql_slave_skip_counter? 就是因為新的復制協議!

想象一下我們擁有如下圖所示的三臺服務器: 

2015422100610975.png (529×416)

 讓我們假設 sql_slave_skip_counter 可以用并且已經被用在S2上用于跳過trx2. 如果你吧S2設置成S1的一個slave將會發生什么呢?


兩個服務器會互相交換被執行了GTID的范圍,并且S1將會意識到其必須將trx2發送給S2. 然后會發生的事情有兩種可能:

        如果 trx 2 仍然在S1的二進制日志中,它將會被發送給S2,而事務在也不會被跳過了.     如果 trx 2 不再存在于S1的二進制日志中,你將會得到一個復制錯誤.

    很明顯這不安全,這就是為什么 sql_slave_skip_counter 在使用GTID時是不能用的. 要想跳過一個事務,唯一安全的選擇就是去執行一個虛擬的事務,而不是一個真實的事務.
     
    錯誤的事務

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 库车县| 淅川县| 定兴县| 桐城市| 普安县| 德惠市| 永胜县| 新宾| 侯马市| 即墨市| 香格里拉县| 大悟县| 彰武县| 宣威市| 彝良县| 崇左市| 瓮安县| 尉犁县| 兰州市| 南京市| 白河县| 丹寨县| 宝应县| 台湾省| 肥城市| 阿克陶县| 曲松县| 涡阳县| 云浮市| 宝兴县| 吉林省| 永和县| 广河县| 洛隆县| 高安市| 肥乡县| 临颍县| 万山特区| 西宁市| 西宁市| 佛坪县|