1. mysql下載地址:MySQL :: Download MySQL Community Server
2. mgr文件:MySQL :: MySQL 8.0 Reference Manual :: 18 Group Replication
3. 安裝例項:
a) 解壓 tar -xvf mysql-8.0.31-linux-glibc2.17-x86_64-minimal.tar.xz
b) 新增使用者
groupadd mysql useradd -r -g mysql mysql chown mysql:mysql -R /usr/local/mysql
c) 初始化: ./bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data --user=mysql --initialize
需要記住初始密碼,第一次登入需要
d) 配置軟連線:
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql ln -s /usr/local/mysql/bin/mysql /usr/bin
e) 更改root密碼(授權遠端登入)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' flush privileges;
f) mysql開啟失敗時可能是目錄沒有許可權 chown mysql:mysql -R /usr/local/mysql/data
或者log檔案沒有建立,需要手動建立
初始化密碼登入失敗,需要注意跳脫字元,登入命令新增 -h127.0.0.1
4. mgr配置:
a) my.cnf,注意 server-id 是組內唯一的,group_replication_local_address 為本機地址,group_replication_group_name 是組內相同的
[mysqld] datadir=/usr/local/mysql/data socket=/usr/local/mysql/data/mysql.sock # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # Settings user and group are ignored when systemd is used. # If you need to run mysqld under a different user or group, # customize your systemd unit file for mariadb according to the # instructions in http://fedoraproject.org/wiki/Systemd #user=root #開啟GTID,必須開啟 gtid_mode=ON #強制GTID的一致性 enforce_gtid_consistency=ON log_bin=binlog #log_slave_updates=ON #binlog格式,MGR要求必須是ROW,不過就算不是MGR,也最好用row binlog_format=row #server-id必須是唯一的 server-id = 2 #MGR使用樂觀鎖,所以官網建議隔離級別是RC,減少鎖粒度 transaction_isolation = READ-COMMITTED #因為叢集會在故障恢復時互相檢查binlog的資料, #所以需要記錄下叢集內其他伺服器發過來已經執行過的binlog,按GTID來區分是否執行過. log-slave-updates=1 #binlog校驗規則,5.6之後的高版本是CRC32,低版本都是NONE,但是MGR要求使用NONE binlog_checksum=NONE #基於安全的考慮,MGR叢集要求複製模式要改成slave記錄記錄到表中,不然就報錯 master_info_repository=TABLE #同上配套 relay_log_info_repository=TABLE report_host = '192.168.229.188' #組複製設定 #記錄事務的演算法,官網建議設定該引數使用 XXHASH64 演算法 transaction_write_set_extraction = XXHASH64 #plugin_load_add='group_replication.so' #相當於此GROUP的名字,是UUID值,不能和叢集內其他GTID值的UUID混用,可用uuidgen來生成一個新的, #主要是用來區分整個內網裡邊的各個不同的GROUP,而且也是這個group內的GTID值的UUID group_replication_group_name = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa' #IP地址白名單,預設只新增127.0.0.1,不會允許來自外部主機的連線,按需安全設定 group_replication_ip_whitelist = '127.0.0.1/8,192.168.0.0/16,192.168.229.189,192.168.229.190' #是否隨伺服器啟動而自動啟動組複製,不建議直接啟動,怕故障恢復時有擾亂資料準確性的特殊情況 group_replication_start_on_boot = OFF #本地MGR的IP地址和埠,host:port,是MGR的埠,不是資料庫的埠 group_replication_local_address = '192.168.229.188:33081' #需要接受本MGR例項控制的伺服器IP地址和埠,是MGR的埠,不是資料庫的埠 group_replication_group_seeds = '192.168.229.188:33081,192.168.229.189:33081,192.168.229.190:33081' #開啟引導模式,新增組成員,用於第一次搭建MGR或重建MGR的時候使用,只需要在叢集內的其中一臺開啟, group_replication_bootstrap_group = OFF #是否啟動單主模式,如果啟動,則本例項是主庫,提供讀寫,其他例項僅提供讀,如果為off就是多主模式了 #group_replication_single_primary_mode = ON #多主模式下,強制檢查每一個例項是否允許該操作,如果不是多主,可以關閉 #loose-group_replication_enforce_update_everywhere_checks = OFF [mysqld_safe] log-error=/usr/local/mysql/log/mariadb.log pid-file=/usr/local/mysql/mariadb.pid # # include all files from the config directory # !includedir /etc/my.cnf.d
b) 進入mysql配置組複製連結登入憑證(所有例項都需要配置)
SET SQL_LOG_BIN=0; CREATE USER rpl_user@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%'; GRANT CONNECTION_ADMIN ON *.* TO rpl_user@'%'; GRANT BACKUP_ADMIN ON *.* TO rpl_user@'%'; GRANT GROUP_REPLICATION_STREAM ON *.* TO rpl_user@'%'; FLUSH PRIVILEGES; SET SQL_LOG_BIN=1; CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='password' FOR CHANNEL 'group_replication_recovery';
c) 安裝外掛
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
d) 引導啟動 主節點
SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF;
SELECT * FROM performance_schema.replication_group_members; ## 查詢組成員
e) 新增 從節點
START GROUP_REPLICATION;
f) 新增節點出現異常: This member has more executed transactions than those present in the group 可以嘗試 reset master; reset slave;
或者:在欲加入的節點執行 reset master; 然後在組內任一節點查詢 show master status\G ,取值Executed_Gtid_Set,
然後再加入節點執行 SET GLOBAL GTID_PURGED = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-197687:1000003-1000379'; ###Executed_Gtid_Set值
節點無法連線時,可能是防火牆限制
新增節點時異常: Authentication requires secure connection. Error_code: MY-002061,另例項重啟後再次加入組時也需要重新執行
CHANGE MASTER TO MASTER_USER='rpl', MASTER_PASSWORD='rpl123' FOR CHANNEL 'group_replication_recovery';