MySQL Group Replication(組複製MGR)
MGR基本要求:
1、InnoDB儲存引擎
2、主鍵,每個表必須具有已定義的主鍵或等效的主鍵,其中等效項是非null唯一鍵
3、IPv4網路
4、網路效能
5、開啟二進位制日誌並開啟GTID模式
6、mysql版本在5.7.17以上
MGR限制:
1、組複製不支援mysiam引擎
2、不支援binlog的checksum校驗
3、併發DDL與DML操作。 使用多主模式時,不支援針對同一物件但在不同伺服器上執行的併發資料定義語句和資料操作語句,因為鎖不共享
4、具有級聯約束的外來鍵
5、非常大的事務
6、最多包含9個伺服器
開啟replication配置:
所有的例項中必須包含以下引數配置:
server-id=1 #標識伺服器唯一
log-bin=mysql-bin #二進位制日誌開啟
enforce_gtid_consistency = ON #GTID模式
binlog-format=row #必須是ROW模式
gtid-mode=ON #GTID保證事物編號全域性唯一 (Global Transaction ID)
master-info-repository=TABLE
relay-log-info-repository=TABLE #記錄同步的資訊,便於管理和恢復
log-slave-update = ON #需要記錄事務的binlog,用作以後的恢復用,哪怕不是寫入點,也需要
binlog-checksum=NONE #MGR本身不支援binlog的checksum校驗
slave-parallel-workers=8
slave-preserve-commit-order=1 #GTID配置,SQL執行緒按照順序重放事物
slave-parallel-type=LOGICAL_CLOCK
. #SQL執行緒工作模式。有兩種。
#組複製配置:
transaction_write_set_extraction=XXHASH64 #指示伺服器對於每個事務,它必須收集寫集並使用XXHASH64
雜湊演算法將其編碼為 雜湊
loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" #命名格式,每個例項必須完全相同
loose-roup_replication_start_on_boot=off #外掛在伺服器啟動時不自動啟動操作
loose-group_replication_local_address =“127.0.0.1:24903” #指定本機地址及埠,是通訊埠,不是例項埠
loose-group_replication_group_seeds= "127.0.0.1:24903,127.0.0.1:24903,127.0.0.1:24903" #設定組成員的主機名和埠,埠使用的是通訊埠,不是例項埠
loose-group_replication_bootstrap_group=off #引導是否開啟,選擇關閉,手動引導
loose-group_replication_auto_increment_increment=7 #指定自增量,預設為7
loose-group_replication_single_primary_mode = off #關閉單主模式的引數
loose-group_replication_enforce_update_everywhere_checks = on #開啟強制檢查
建立複製賬號:
SET SQL_LOG_BIN=0;
#不寫入二進位制日誌,避免擴散到其他機器
grant replication slave on *.* to 'backup'@'%' identified by '123456';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
主執行:
CHANGE MASTER TO MASTER_USER='stemp', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery'; #加入組
INSTALL PLUGIN group_replication SONAME 'group_replication.so'; #安裝組複製外掛。mysql自帶有這個外掛
SHOW PLUGINS;
#檢視外掛是否安裝成功
SET GLOBAL group_replication_bootstrap_group = ON; #開始引導組 START GROUP_REPLICATION; #開啟組複製 SET GLOBAL group_replication_bootstrap_group = OFF; #關閉引導
檢視:
SELECT * FROM performance_schema.replication_group_members; #檢視是否加入成功
其他機器執行(加入組複製):
SET SQL_LOG_BIN=0;
#不寫入二進位制日誌,避免擴散到其他機器
grant replication slave on *.* to 'backup'@'%' identified by '123456';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
CHANGE MASTER TO MASTER_USER='stemp', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';
INSTALL PLUGIN group_replication SONAME'group_replication.so';
START GROUP_REPLICATION;
這裡和第一臺機器不同的是不執行引導組的語句。
檢視:SELECT * FROM performance_schema.replication_group_members;