实验环境
主机名/IP | 角色 |
server01/192.168.1.201 | 主 |
server02/192.168.1.202 | 次 |
server03/192.168.1.203 | 次 |
ALL NODE
安装数据库
添加映射
vim /etc/hosts
192.168.1.201 server01
192.168.1.202 server02
192.168.1.203 server03
更改数据库配置
vim /etc/mysql/mysql.conf.d/mysqld.conf
[mysqld]
server-id=1 # 每个节点需更改成自己的唯一id
bind-address=0.0.0.0
gtid_mode=ON
enforce_gtid_consistency=ON
log_bin=mysql-bin
log_replica_updates=ON
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY" #关闭除InnoDB之外的其他引擎
plugin_load_add='group_replication.so' #加载组复制插件
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" # 必须是uuid,可以使用 SELECT UUID() 生成一个
group_replication_start_on_boot=off #指示插件服务器启动时不会自动启动操作,引导成功后可以设置为on
group_replication_local_address= "server01:33061" # 当前节点内部通信地址
group_replication_group_seeds= "server01:33061,server02:33061,server03:33061"
group_replication_bootstrap_group=off # 控制当前节点是否以引导模式启动组复制集群
group_replication_recovery_get_public_key=ON # 当使用分布式节点恢复功能的时候,由于用户使用caching_sha2验证插件,需要启用参数复制账户公钥
重启服务
systemctl restart mysql
为分布式恢复创建复制用户
mysql -u root -p
SET SQL_LOG_BIN=0;
CREATE USER rpl_user@'%' IDENTIFIED BY 'wakamizu';
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 REPLICATION SOURCE TO SOURCE_USER='rpl_user', SOURCE_PASSWORD='wakamizu' FOR CHANNEL 'group_replication_recovery' ;
server01
引导组
mysql -u root -p
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION USER='rpl_user', PASSWORD='wakamizu';
SET GLOBAL group_replication_bootstrap_group=OFF;
server02 && server03
加入组
mysql -u root -p
START GROUP_REPLICATION USER='rpl_user', PASSWORD='wakamizu';
ALL NODE
查看群组信息
mysql -u root -p
SELECT * FROM performance_schema.replication_group_members;
在主节点创建表进行测试,查看是否复制完成
小贴士:
切换主节点
mysql -u root -p
SELECT group_replication_set_as_primary(‘组成员uuid');
检查切换进度
SELECT event_name, work_completed, work_estimated FROM performance_schema.events_stages_current WHERE event_name LIKE "%stage/group_rpl%"\G
切换成单主模式
SELECT group_replication_switch_to_single_primary_mode('uuid');
如果没有输入uuid,则由群组自己选举
切换成多主模式
SELECT group_replication_switch_to_multi_primary_mode();
当将组从单主模式更改为多主模式时,如果成员运行的 MySQL 服务器版本高于组中最低版本,则成员将自动处于只读模式
检查操作进度
SELECT event_name, work_completed, work_estimated FROM performance_schema.events_stages_current WHERE event_name LIKE "%stage/group_rpl%";
设置节点事务写并发数
SELECT group_replication_get_write_concurrency();
SELECT group_replication_set_write_concurrency(可并发写事务数量);
设置 MySQL 版本通信协议版本
返回该组使用的最低 MySQL 版本通信协议版本
SELECT group_replication_get_communication_protocol();
一个 MySQL Server 8.0.16 实例可以成功加入使用通信协议版本 5.7.24 的组
一个 MySQL Server 5.7.24 实例无法成功加入使用通信协议版本 8.0.16 的组
两个 MySQL Server 8.0.16 实例不能同时加入使用通信协议版本 5.7.24 的组
两个 MySQL Server 8.0.16 实例可以同时加入使用通信协议版本 8.0.16 的组
设置通信协议版本
SELECT group_replication_set_communication_protocol("MySQL 服务器版本号");