MySQL 強同步復制是指多個 MySQL 數據庫之間進行同步復制時,保證數據的強一致性,即只有數據完全一致才能被視為同步完成。
在 MySQL 強同步復制中,使用了兩個關鍵技術:二進制日志(binlog)和 GTID(Global Transaction ID)。
// 配置 GTID gtid_mode=ON enforce_gtid_consistency=ON // 配置 binlog log-bin=mysql-bin binlog-format=ROW sync-binlog=1 // 配置主從關系 server-id=1 // 主庫 log-slave-updates=1 // 從庫記錄 binlog replicate-do-db=test // 從庫復制的數據庫 // 配置復制賬號 create user 'repl'@'%' identified by '123456'; grant replication slave on *.* to 'repl'@'%';
通過以上代碼可以看出,MySQL 強同步復制需要先設置 GTID 模式,可以避免出現不一致的情況。同時,使用 ROW 格式的 binlog 可以記錄每一行數據的修改,而不是整個語句。將從庫設為 log-slave-updates,可以讓從庫將 binlog 記錄到自己的 binlog 中,這樣在從庫上執行的事務也可以被記錄并同步到主庫。設置復制賬號可以讓從庫通過網絡連接到主庫并復制數據。
通過以上步驟,當主庫執行一個事務時,會生成一個唯一的 GTID,并將這個 GTID 和 binlog 記錄下來。當從庫要復制這個事務時,會通過 binlog 查找對應的 GTID,然后執行對應的事務,保證數據的一致性。
總體來說,MySQL 強同步復制的實現較為復雜,但可以保證數據的強一致性,有效避免了多個數據庫之間數據不一致的問題。