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.在從庫查詢驗證是否正確,經驗證配置正確。