mysql主從複製配置(基於GTID)

MySQL 5.6 的新特性之一,是加入了全局事務 ID (GTID) 來強化數據庫的主備一致性,故障恢復,以及容錯能力。
GTID(Global Transaction Identifiers)是全局事務標識。當使用GTIDS時,在主上提交的每一個事務都會被識別和跟蹤,並且運用到所有從MySQL,而且配置主從或者主從切換時不再需要指定 master_log_files和master_log_pos;由於GTID-base複製是完全基於事務的,所以能很簡單的決定主從複製的一致性;官方建議Binlog採用Row格式。
GTID的表示方式:
source_id:transaction_id
source_id:表示執行事務的主庫的UUID(server_uuid:Mysql5.6的data目錄下啓動時會生成auto.cnf文件記錄了uuid,重啓後uuid不變,刪除文件後會重新生成新的uuid);
transaction_id:是一個從1開始自增的計數,表示在這個主庫上執行的第n個事務;
由於每臺Mysql的uuid是全球唯一的,transaction_id自身唯一,就保證了GTID全局唯一性
查詢:show variables like 'server_uuid';
要在MySQL 5.6中使用複製功能,其服務配置段[mysqld]中於少應該定義如下選項:
1. binlog-format:二進制日誌的格式,有row、statement和mixed幾種類型;
需要注意的是:當設置隔離級別爲讀提交READ-COMMITED必須設置二進制日誌格式爲ROW,現在MySQL官方認爲STATEMENT這個已經不再適合繼續使用;但mixed類型在默認的事務隔離級別下,可能會導致主從數據不一致;log-slave-updates(slave更新是否記入日誌)、gtid-mode(gtid類型)、enforce-gtid-consistency(強制gtid一致性)、report-port和report-host:用於啓動GTID及滿足附屬的其它需求;
2.master-info-repository(資源庫)和relay-log-info-repository:啓用此兩項,可用於實現在崩潰時保證二進制及從服務器安全的功能;
3.sync-master-info:確保服務器崩潰時無信息丟失;
4.slave-paralles-workers:設定從服務器的SQL線程數;0表示關閉多線程複製功能;值與你要複製的數據庫數目相同即可;
5.binlog-checksum校驗碼、master-verify-checksum和slave-sql-verify-checksum:啓用複製有關的所有校驗功能;
6.binlog-rows-query-log-events:用於在二進制日誌詳細記錄事件相關的信息,可降低故障排除的複雜度;
7.log-bin:啓用二進制日誌,這是保證複製功能的基本前提;
8.server-id:同一個複製拓撲中的所有服務器的id號必須惟一;
一、環境
master  192.168.0.109 
slave   192.168.0.110
mysql版本 5.7.12
二、配置
1.master配置
server-id=1
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-rows-query-log-events=1
binlog-checksum=CRC32 
master-verify-checksum=1
slave-sql-verify-checksum=1
relay_log_purge = 1  
relay_log_recovery = 1
report-port=3306
report-host=192.168.0.109
2.slave配置
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-rows-query-log-events=1
binlog-checksum=CRC32 
master-verify-checksum=1
slave-sql-verify-checksum=1
relay_log_purge = 1  
relay_log_recovery = 1  
report-port=3306
report-host=192.168.0.110
3.參數說明
binlog_format 
log-slave-updates/gtid-mode/enforce-gtid-consistency/report-port/report-host:用於啓動GTID及滿足附屬的其它需求[其中啓動GTID必須同時設置gtid-mode/enforce-gtid-consistency/]  
master-info-repository/relay-log-info-repository : 設置爲TABLE,mysql.slave_master_info與 mysql.slave_relay_log_info 中,table都是innodb類型的,支持事務,比文件安全. 默認值是FILE, 比如master info就保存在master.info文件中,relay log info保存在relay-log.info文件中,如果服務器意外關閉,正確的relay info 沒有來得及更新到 relay-log.info文件,這樣會造成數據丟失
slave-parallel-workers :  開啓基於庫的多線程複製.默認是0,不開啓,最大併發數爲1024個線程  
relay_log_purge/relay_log_recovery :啓用relaylog的自動修復功能,避免由於網絡之類的外因造成日誌損壞,主從停止
binlog-checksum/master-verify-checksum/slave-sql-verify-checksum : 啓用binlog/relaylog的校驗,防止日誌出錯  
三、開啓複製
1.在master上添加複製用戶
>create user 'repltest'@'192.168.0.%'  identified by 'Repltest123#@!';
>grant  replication slave on *.* to 'repltest'@'192.168.0.%';
2.在slave配置複製
change master to , 
-> master_host='192.168.0.109', 
-> master_port=3306,
-> master_user='repltest', 
-> master_password='Repltest123#@!',  
-> master_auto_position=1,  
-> master_delay=30;  
參數說明:
master_auto_position  自動尋找position號  
master_delay  延時30秒執行復制,relay日誌會及時同步到slave機,只是日誌的中的事件會根據事件的時間戳延時30秒執行.此參數具有實用性  
3.開啓同步
start slave;
查看狀態:show slave status\G;
主要看以下兩個參數:[這兩個參數如果是yes就表示主從同步正常]  
Slave_IO_Running: Yes    #IO線程
Slave_SQL_Running: Yes  #sql線程
Retrieved_Gtid_Set項:記錄了relay日誌從Master獲取了binlog日誌的位置 
Executed_Gtid_Set項:記錄本機執行的binlog日誌位置,(如果是從機,包括Master的binlog日誌位置和slave本身的binlog日誌位置)
4.測試
(略)
5.基於GTID複製出錯的解決辦法
當發現不能複製,IO線程不工作時,或者數據庫,表、記錄等衝突時。可以將從複製跳過已經丟失的binlog,繼續複製或者重新做主從。
 show global variables like 'GTID_EXECUTED';
 stop slave;
set global GTID_PURGED="21ad8db5-f038-11e3-a14a-0200c0a80ad8:1-223937";
start slave;
 與GTID複製相關的參數:

gtid_executed:表示已經在該實例上執行過的事務;執行RESET MASTER可以置空該參數;也可以設置GTID_NEXT執行一個空事務來影響GTID_EXECUTED
gtid_owned:表示正在執行的事務的GTID以及對應的線程ID
gtid_purged:表示被刪除的binlog事務GTID,它是GTID_EXCUTED的子集,MySQL5.6.9,該參數無法被設置
gtid_next:是SESSION級別參數,表示下一個事務被執行使用的GTID(show variables like ‘gtid_%’;)

參考文檔:

發佈了404 篇原創文章 · 獲贊 205 · 訪問量 227萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章