GTID相關:
在mysql5.6之前,mysql主從複制是slave通過配置master的binlog位置實作的,且每一個slave自身的binlog卻不同。而在mysql5.6版本後引入了GTID(全局事務辨別符),這個值在master生成,slave隻要在開啟主從複制時指定master的使用者,密碼,就可擷取master的GTID實作同步,而無需再每次去檢視master的binlog位置,大大友善了主從同步的配置。GTID的唯一性強化了資料的主備一緻性,故障恢複,以及容錯能力。
延遲複制相關:
在之前的部落格中介紹過mysql的延遲複制,當時是基于第三方工具percona-toolkit實作的。在mysql5.6版本後,mysql自帶了延遲複制的功能,且配置十分簡單。
實驗環境:
主庫:192.168.52.128:3306
從庫:192.168.52.135:3306
配置GTID複制:
1:安裝mysql(不贅述)
2:開啟GTID模式,主從庫都要:
在my.cnf配置檔案中加入binlog以及gtid相關配置,并重新開機mysql。
主:[mysqld]
binlog-format=ROW
log-bin=master-bin-log
log-slave-updates=true
gtid-mode=on ----開啟gtid
enforce-gtid-consistency=true ---強制GTID一緻性
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=2 ---設定從伺服器的SQL線程數
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
server-id=1
從:[mysqld]
server-id = 2
log-bin=mysql-bin
binlog_format=row
log-slave-updates=true
gtid-mode=on
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=4
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
重新開機mysql:service mysqld restart
檢視主庫及叢庫的gtid是否開啟:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLyV2YhB3cvw1coRXYwNWaw91dfB3LcRHb1FmZlR2LcNXZtVGa09CXxYjM19CXl9CXt92Yu8GdjFTNuc2bsJ2Lc9CX6MHc0RHaiojIsJye.gif)
這時主庫上會配置設定一個gtid号:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLyV2YhB3cvw1coRXYwNWaw91dfB3LcRHb1FmZlR2LcNXZtVGa09CXxYjM19CXl9CXt92Yu8GdjFTNuc2bsJ2Lc9CX6MHc0RHaiojIsJye.gif)
3:在主庫上建立複制所需的賬戶:mysql>grant replication slave on *.* to [email protected].% identified by '123456';
mysql>flush privileges;
4:從庫上配置同步。mysql>change master to master_host='192.168.52.128',master_user='repl',master_password='123456',master_auto_position=1;
mysql>slave start;
可以看到這裡不用去主庫查找binlog與相關的位置資訊,直接使用master_auto_position=1,mysql會自動查找同步的位置
5:檢視效果:
可以看到同步已經正常進行中,同步位置為7。
進行一些操作,驗證同步效果:
主:建立一個執行個體,并建立一張表,插入一些資料
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLyV2YhB3cvw1coRXYwNWaw91dfB3LcRHb1FmZlR2LcNXZtVGa09CXxYjM19CXl9CXt92Yu8GdjFTNuc2bsJ2Lc9CX6MHc0RHaiojIsJye.gif)
從:
同步正常,使用show slave stautus\G檢視同步狀态,可以看到同步位置執行到了10;
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLyV2YhB3cvw1coRXYwNWaw91dfB3LcRHb1FmZlR2LcNXZtVGa09CXxYjM19CXl9CXt92Yu8GdjFTNuc2bsJ2Lc9CX6MHc0RHaiojIsJye.gif)
複制延遲配置:mysql>stop slave;
mysql>CHANGE MASTER TO MASTER_DELAY = 100; -------機關為秒
mysql>start slave;
mysql>show slave status \G;
SQL_Delay:字段變為100,表示此時從庫與主庫的同步開始有了100秒的固定延遲。
SQL_Remaining_Delay:當主庫有了新的操作,該字段會進入倒計時,從配置的延遲時間(這裡為100)開始。正常情況下為NULL。