1.概述 從MYSQL5.6 開始,mysql開始支持GTID複製。 基於日誌點複製的缺點: 從那個二進位日誌的偏移量進行增量同步,如果指定錯誤會造成遺漏或者重覆,導致數據不一致。 基於GTID複製: 1.從伺服器會告訴主伺服器已執行的事務的GTID值。 2.主庫會告訴從哪些GTID事務沒有被執行。... ...
1.概述
從MYSQL5.6 開始,mysql開始支持GTID複製。
基於日誌點複製的缺點:
從那個二進位日誌的偏移量進行增量同步,如果指定錯誤會造成遺漏或者重覆,導致數據不一致。
基於GTID複製:
1.從伺服器會告訴主伺服器已執行的事務的GTID值。
2.主庫會告訴從哪些GTID事務沒有被執行。
同一個事務在指定的從庫執行一次。
什麼是GTID
GTID即全局事務ID,器保證為每一個在主上提交的事務在複製集群中可以生成一個唯一的ID.
GTID=source_id:transaction_id
source_id:是主庫的server UUID,在數據目錄的auto.cnf 文件中。
transaction_id: 從1開始的一個序列。
2.基於GTID複製的步驟
1.在主DB伺服器上建立複製帳號。
和日誌點是一樣的。
2.配置主資料庫伺服器
bin_log =mysql-bin
server_id=1001
gtid_mode=on
enforce-gtid-consiste:強制事務一致性,保證事務的安全
不能使用:
1.create table 。。select
2.在事務中使用create temporary table 建立臨時表,使用關聯更新事務表和非事務表。
log-slave-updates=on
在從伺服器中記錄從主伺服器傳過來的日誌數據。
使用GTID 5.6 必須使用此參數,5.7可以不使用。
3.配置從伺服器。
server_id=1002
relay_log=relay_log
gtid_mode=on
enforce-gtid-consistency
建議配置
read_only=on
保證從伺服器數據安全性
master_info_reposistory=TABLE
relay_log_info_reposistory=TABLE
從伺服器連接主伺服器的信息和中繼日誌存放咱 master_info,和relay_log中。
4.初始化從伺服器數據。
mysqldump --master-data=2 -single-transaction
xtarbackup –slave-info
記錄備份時最後的事務GTID值。
導出數據
mysqldump --single-transaction --master-data=2 --triggers -routines --all-databases -uroot -p -P3308 >all2.sql
導入數據
mysql -uroot -p -P3309 < all2.sql
5.啟動基於GTID的複製
change master to master-host=’主服務IP’,
master_user=’repl’,
master_password=’password’,
master_auto_position=1
change master to MASTER_HOST='192.168.1.106',
MASTER_PORT=3308,
MASTER_USER='repl',
MASTER_PASSWORD='repl',
master_auto_position=1;
start slave;
show slave status \G;
在啟動slave時報錯。
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
解決辦法:
reset slave;重置slave
再啟動 slave
start slave;
測試同步:
1.在主庫創建一張表,插入記錄。
2.在從庫查詢驗證是否正確,經驗證配置正確。