前提
现在每台机器上部署好MySQL5.7
可以参考:juejin.cn/user/321022…
修改hosts
vi /etc/hosts
172.16.112.28 mgr-mysql-1
172.16.112.29 mgr-mysql-2
172.16.112.30 mgr-mysql-3
添加额外的配置
######## Replication ########
server_id = 28
# 数据库服务器ID
gtid_mode=on
enforce-gtid-consistency=on
binlog_gtid_simple_recovery=1
log-slave-updates=1
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_format = row
# binlog格式,复制有3种模式STATEMENT,ROW,MIXED
log_slave_updates = ON
# 开启log_slave_updates,从库的更新操作记录进binlog日志
sync_binlog = 1
# 默认0,事务提交后MySQL不刷新binlog_cache到磁盘,而让Filesystem自行决定,或者cache满了才同步。
# sync_binlog=n,每进行n次事务提交之后,MySQL将binlog_cache中的数据强制写入磁盘
binlog_rows_query_log_events = ON
# 将row模式下的sql语句,记录到binlog日志,默认是0(off)
binlog_checksum = NONE
# Session-Thread把Event写到Binlog时,生成checksum。默认为(NONE),兼容旧版本mysql。
master_verify_checksum = ON
# Dump-Thread读Binlog中的Event时,验证checksum
slave_sql_verify_checksum = ON
# 从库的I/O-Thread把Event写入Relaylog时,生成checksum;从库的SQL-Thread从Relaylog读Event时,验证checksum
master_info_repository = TABLE
relay_log_info_repository = TABLE
# 将master.info和relay.info保存在表中,默认是Myisam引擎,官方建议改为Innodb引擎,防止表损坏后自行修复。
skip_slave_start = ON
# 重启数据库,复制进程默认不启动
sync_relay_log = 10000
sync_relay_log_info = 10000
# slave更新mysql.slave_relay_log_info表的时间间隔
gtid_mode = ON
enforce_gtid_consistency = ON
# GTID即全局事务ID(global transaction identifier),GTID由UUID+TID组成的。
# UUID是一个MySQL实例的唯一标识,TID代表了该实例上已经提交的事务数量,并且随着事务提交单调递增。
# GTID能够保证每个MySQL实例事务的执行(不会重复执行同一个事务,并且会补全没有执行的事务)。下面是一个GTID的具体形式:
# 4e659069-3cd8-11e5-9a49-001c4270714e:1-77
######### MGR ############
loose-group_replication_single_primary_mode = true
# true 为单主模式 flase为多主模式
loose-group_replication_enforce_update_everywhere_checks = off
#多主模式下,强制检查每一个实例是否允许该操作
transaction_write_set_extraction=XXHASH64
#server必须为每个事务收集写集合,并使用XXHASH64哈希算法将其编码为散列
loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
#告知插件加入或创建组命名,UUID,集群中UUID一致
loose-group_replication_start_on_boot=off
#server启动时不自启组复制,为了避免每次启动自动引导具有相同名称的第二个组,所以设置为OFF。
loose-group_replication_local_address= "172.16.112.28:33061"
#告诉插件使用IP地址,端口24901用于接收组中其他成员转入连接
loose-group_replication_group_seeds= "172.16.112.28:33061,172.16.112.29:33061,172.16.112.28:33061"
#启动组server,种子server,加入组应该连接这些的ip和端口;其他server要加入组得由组成员同意
loose-group_replication_bootstrap_group=off
loose-group_replication_member_weight=50
# 节点权重
# 禁止其他引擎创建库表
disabled_storage_engines = MyISAM,BLACKHOLE,FEDERATED,CSV,ARCHIVE
MGR 安装配置
安装MGR插件
登陆数据库后在数据库里面执行
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
创建账号
CREATE USER 'repl'@'172.16.112.%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'172.16.112.%';
RESET MASTER;
创建MGR依赖的复制通道
CHANGE MASTER TO MASTER_USER='repl',
MASTER_PASSWORD='123456'
FOR CHANNEL 'group_replication_recovery';
启动MGR
在主节点上启动MGR
SET GLOBAL group_replication_bootstrap_group=ON;
START group_replication;
SET GLOBAL group_replication_bootstrap_group=off;
在各子节点启动MGR
START group_replication;
维护
查看各节点状态
SELECT * FROM performance_schema.replication_group_members;
查看当前MGR模式
SELECT @@group_replication_single_primary_mode;
查看当前节点状态
SELECT member_state FROM performance_schema.replication_group_members WHERE member_id=@@server_uuid;
通过节点是否可写来判断群集是否为主节点
SELECT * FROM performance_schema.global_variables WHERE variable_name IN ('read_only', 'super_read_only');
在各个正常成员上查看各自的组内通信地址
SELECT @@group_replication_local_address;