单主模式:
准备环境三台机器配置好MySQL
|--------|---------------|----------------------------|
| 主机名 | IP | mysql版本 |
| master | 192.168.1.121 | 8.0.40 Source distribution |
| rep1 | 192.168.1.122 | 8.0.40 Source distribution |
| rep2 | 192.168.1.123 | 8.0.40 Source distribution |
-
配置好三台机器的域名解析
vim /etc/hosts

配置主机器master:
首先配置好主的配置文件
[mysqld]
log_timestamps=SYSTEM
server_id=121
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
gtid_mode=ON
enforce_gtid_consistency=ON
log_bin=binlog
log_slave_updates=ON
binlog_format=ROW
transaction_write_set_extraction=XXHASH64
plugin_load_add='group_replication.so'
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address= "192.168.1.121:33061"
group_replication_group_seeds= "master:33061,rep1:33061,rep2:33061"
group_replication_bootstrap_group=off
group_replication_ip_whitelist="192.168.1.0/24,127.0.0.1/8"
group_replication_recovery_use_ssl=on
- disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY" #组复制,数据必须存储在 InnoDB 事务存储引擎中
- transaction_write_set_extraction=XXHASH64 #默认开启,组复制使用此信息在所有组成员上进行冲突检测
- plugin_load_add='group_replication.so' #将组复制插件添加到服务器启动时加载的插件列表中
- group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" #告诉插件它正在加入或创建的组名为"aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa"
- group_replication_start_on_boot=off #插件在服务器启动时不自动启动操作,使用手动启动插件
- group_replication_local_address= "192.168.168.128:33061" #与其它主机通信时使用的网络地址和端口
- group_replication_group_seeds= "s1:33061,s2:33061,s3:33061" #设置组成员的主机名和端口
- group_replication_bootstrap_group=off #指示插件是否启动该组,在首次引导组时在一个服务器上启用
- group_replication_ip_whitelist="192.168.168.0/24,127.0.0.1/8" #仅允许白名单内的 IP 加入复制组
- group_replication_recovery_use_ssl=on #caching_sha2_password插件要求安全传输密码,开启主从之间的连接使用SSL/TLS
重启MySQL
sql
/etc/init.d/mysqld restart
登录数据库对主进行一下配置:
在主的数据库中使用sql语句添加复制账号并授予权限,从上面也需要设置一样的账号
创建用户并授予权限
sql
SET SQL_LOG_BIN=0;
CREATE USER rp@'%' IDENTIFIED BY '123';
GRANT REPLICATION SLAVE ON *.* TO rp@'%';
GRANT CONNECTION_ADMIN ON *.* TO rp@'%';
GRANT BACKUP_ADMIN ON *.* TO rp@'%';
GRANT GROUP_REPLICATION_STREAM ON *.* TO rp@'%';
FLUSH PRIVILEGES; 刷新权限
SET SQL_LOG_BIN=1;
CHANGE REPLICATION SOURCE TO SOURCE_USER='rp', SOURCE_PASSWORD='123' FOR CHANNEL 'group_replication_recovery';
启动MGR集群---------使用当前服务器(192.168.1.121)作为引导服务器启动一个新的群组复制过程或者恢复一个已经存在的群组
sql
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION USER='rp',PASSWORD='123';
SET GLOBAL group_replication_bootstrap_group=OFF;
在主上查看组信息
sql
SELECT * FROM performance_schema.replication_group_members;

从的机器配置:
配置MySQL的配置文件
sql
vim /etc/my.cnf
sql
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
log_timestamps=SYSTEM
server_id=122
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
gtid_mode=ON
enforce_gtid_consistency=ON
plugin_load_add='group_replication.so'
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address="192.168.1.122:33061"
group_replication_group_seeds="master:33061,rep1:33061,rep2:33061"
group_replication_ip_whitelist="192.168.1.0/24,127.0.0.1/8"
group_replication_bootstrap_group=off
group_replication_recovery_use_ssl=on
重启数据库:
sql
/etc/init.d/mysqld restart
登录数据库对从进行以下配置(192.168.1.122,192.168.1.123):
创建用户并授予权限:
sql
SET SQL_LOG_BIN=0;
CREATE USER rp@'%' IDENTIFIED BY '123';
GRANT REPLICATION SLAVE ON *.* TO rp@'%';
GRANT CONNECTION_ADMIN ON *.* TO rp@'%';
GRANT BACKUP_ADMIN ON *.* TO rp@'%';
GRANT GROUP_REPLICATION_STREAM ON *.* TO rp@'%';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
CHANGE REPLICATION SOURCE TO SOURCE_USER='rp', SOURCE_PASSWORD='123' FOR CHANNEL 'group_replication_recovery';
开启组复制
sql
START GROUP_REPLICATION USER='rp', PASSWORD='123';
查看组的信息
sql
SELECT * FROM performance_schema.replication_group_members;

测试:
当master宕机后会在从中寻找新的主
测试三台机器对数据库增删改查的情况
在master中创新一个新的数据库

从库中也相应的同步了新的数据库

在从中测试尝试创建库表----从库只能读取不能创建库表,也不能插入数据

测试当主机宕机后的情况
sql
#停掉主机的组复制
stop group_replication;

从的组信息--rep1成为新的主机----这时rep1可以对数据库进行数据的插入:

当讲原来的master开启组复制后的情况----master不能恢复主的身份:


多主模式:
配置三台机器的/etc/my.cnf文件增加两条配置:
sql
#关闭单master模式
loose-group_replication_single_primary_mode=off
#多主一致性检查
loose-group_replication_enforce_update_everywhere_checks=ON

在其中一台主机里面执行以下mysql命令
sql
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;

查看组的成员

在剩下两台机器中配置:
sql
start group_replication;

测试:
增删改查情况
master创建库

rep1创建库表

rep2增加表的id字段的主键并增加数据

