MariaDB GTID 複製同步
GTID:Global Transaction ID,全域性事務ID,在整個主從複製架構中任何兩個事物ID是不能相同的。全域性事務ID是Mster伺服器生成一個128位的UUID+事物的ID號組成的,UUID標示主伺服器的身份,此UUID在整個主從複製架構中是絕對唯一,而且即使更換主伺服器後UUID也不會改變而是繼承當前主伺服器的UUID身份。
一、環境確認
master IP : 10.6.0.96
slave IP : 10.6.0.138
配置本地hosts
vim /etc/hosts
10.6.0.96 master.mysql
10.6.0.138 slave.mysql
二、配置檔案確認,確保配置檔案中有以下的配置:
binlog_format 二進位制日誌的格式,有row、statement和mixed幾種型別;
log-slave-updates、
report-port
report-host: 用於啟動GTID及滿足附屬的其它需求;
master-info-repository
relay-log-info-repository 啟用此兩項,可用於實現在崩潰時保證二進位制及從伺服器安全的功能;
sync-master-info 啟用之可確保無資訊丟失;
slave-parallel-workers 設定從伺服器的SQL執行緒數;0表示關閉多執行緒複製功能;
binlog-checksum
master-verify-checksum
slave-sql-verify-checksum 啟用複製有關的所有校驗功能;
binlog-rows-query-log-events 啟用之可用於在二進位制日誌記錄事件相關的資訊,可降低故障排除的複雜度;
log-bin 啟用二進位制日誌,這是保證複製功能的基本前提;
server-id 同一個複製拓撲中的所有伺服器的id號必須惟一.
三、配置master配置檔案
//修改如下內容
log-bin=/opt/local/mysql/binlog/mysql-bin #二進位制日誌檔案目錄
server-id = 1 #從伺服器不能跟此id重複
binlog_format=ROW #二進位制日誌檔案格式
innodb_file_per_table=1 #innodb表空間獨立
log-slave-updates=true #從master取得並執行的二進位制日誌寫入自己的二進位制日誌檔案中
//新增以下內容
binlog-do-db=mysql #指定只同步mysql庫
master-info-repository=TABLE #用於實現在崩潰時保證二進位制及從伺服器安全的功能;
relay-log-info-repository=TABLE #用於實現在崩潰時保證二進位制及從伺服器安全的功能;
sync-master-info=1 #啟用之可確保無資訊丟失
slave-parallel-threads=2 #設定從伺服器的SQL執行緒數;0表示關閉多執行緒複製功能
binlog-checksum=CRC32 #啟用複製有關的所有校驗功能
master-verify-checksum=1 #啟用複製有關的所有校驗功能
slave-sql-verify-checksum=1 #啟用複製有關的所有校驗功能
binlog-rows-query-log_events=1 #啟用之可用於在二進位制日誌記錄事件相關的資訊,可降低故障排除的複雜度;
report-host=master.mysql #master 主機名,必須能ping通
report-port=3306 #埠
// 重啟 mysql
service mysqld restart
//master建立用於主從複製的賬號
mysql -uroot -p
grant replication slave,replication client on *.* to "rep"@'10.6.0.138' identified by 'rep12345';
flush privileges;
四、配置slave配置檔案
//修改如下內容
log-bin=/opt/local/mysql/binlog/mysql-bin #二進位制日誌檔案目錄
server-id = 10 #從伺服器不能跟此id重複
binlog_format=ROW #二進位制日誌檔案格式
innodb_file_per_table=1 #innodb表空間獨立
log-slave-updates=true #從master取得並執行的二進位制日誌寫入自己的二進位制日誌檔案中
relay-log=/opt/local/mysql/relaylog/s74-relay-bin
//新增以下內容
replicate-do-db=mysql #指定只同步mysql庫
master-info-repository=TABLE #用於實現在崩潰時保證二進位制及從伺服器安全的功能;
relay-log-info-repository=TABLE #用於實現在崩潰時保證二進位制及從伺服器安全的功能;
sync-master-info=1 #啟用之可確保無資訊丟失
slave-parallel-threads=2 #設定從伺服器的SQL執行緒數;0表示關閉多執行緒複製功能
binlog-checksum=CRC32 #啟用複製有關的所有校驗功能
master-verify-checksum=1 #啟用複製有關的所有校驗功能
slave-sql-verify-checksum=1 #啟用複製有關的所有校驗功能
binlog-rows-query-log_events=1 #啟用之可用於在二進位制日誌記錄事件相關的資訊,可降低故障排除的複雜度;
report-host=slave.mysql #slave 主機名,必須能ping通
report-port=3306 #埠
# 在slave伺服器使用主mysql上建立的賬號密碼登陸
mysql -uroot -p
change master to master_host='10.6.0.96',master_user='rep',master_password='rep12345',master_use_gtid=current_pos;
start slave;
# 檢視是否啟用 gtid:
show processlist;
# 檢視同步狀態:
show slave status\G;
以下為傳統主從複製的解決方案
-----------------------------------------------------------------------------------------
# 在master 檢視 Position
show master status;
記錄 Position
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000008 | 1062 | | |
+------------------+----------+--------------+------------------+
# 在 slave 上面 執行
CHANGE MASTER TO MASTER_HOST='10.6.0.96',MASTER_USER='rep',MASTER_PASSWORD='rep12345',MASTER_LOG_FILE='mysql-bin.000008',MASTER_LOG_POS=1062;
start slave;
show slave status \G;