MySQL 基于 GTID 復制是一種新的復制模式,它可以幫助解決多源復制的一些復雜性問題。在以前的 MySQL 復制模式中,當有多個從庫同時復制同一個主庫時,很容易出現主從復制失敗的情況,因為多從庫之間的同步問題比較難處理。GTID 復制模式可以幫助解決這個問題,下面我們來詳細介紹一下。
GTID,全稱為 Global Transaction ID,翻譯為全局事務標識。它是 MySQL 5.6.9 版本中新增的一個特性,它可以為每個事務生成一個唯一的標識,而這個標識不僅僅是在當前的數據庫中有效,而且在整個 MySQL 復制鏈路中都是有效的。
使用 GTID 復制模式的好處是,它可以讓從庫分別將主庫上已經執行的事務進行記錄,并保存在自身的 binlog 文件中。這樣,在出現多從庫之間的同步問題時,可以根據 GTID 來輕松實現同步。具體來說,可以通過重放某個從庫的事務,進而讓其它從庫也執行同樣的事務,從而達到同步的目的。
下面我們來看一下如何啟用 GTID 復制:
# 在主庫上添加以下配置項 gtid_mode=ON enforce_gtid_consistency=true # 在每個從庫上添加以下配置項 gtid_mode=ON
在配置了 GTID 的 MySQL 復制集群中,可以通過mysql.gtid_executed
這個系統表來查看當前庫實際執行的 GTID 列表。例如,可以運行以下 SQL 語句來查看:
SELECT @@GLOBAL.gtid_executed;
需要注意的是,GTID 復制模式有一些限制,例如,它不支持基于語句的復制模式,只支持 ROW 和 MIXED 兩種模式,此外,因為 GTID 值是全局唯一的,因此很難手動修改 GTID 值。因此,在使用 GTID 復制模式時需要格外謹慎。