1、概述
Group replication是MySQL官方开发的一个开源插件,是实现MySQL高可用集群的一个工具。它的代码包含在MySQL的源码中,二进制插件库也在MySQL的安装包中。2016年12月12日Group replication的第一个版本正式发布。想要使用必须安装MySQL 5.7.17及以后的版本即可。
group replication大量异步复制了原有的框架和技术。事务仍然会产生BinlogEvent,Group Replication会将BinlogEvent发送到其他MySQL服务器上。这些binlogevent也是通过一个内部自建的slave通道(channel)执行,执行过程和异步复制过程大致相同。
创建组:当组的第一个成员启动时,需要对组进行初始化。
加入组:将MySQL服务器加入到一个存在的group replication组内。
离开组:从group replication组内移除一台MySQL服务器。
服务模式:
1、单主模式
2、多主模式
set global group_replication_single_primary_mode=off #设定单主还是多主模式
2、搭建复制环境
以单主为例。
数据库参数设置
开启binlog和relaylog
server_id=1
log_bin=binlog # 打开binlog
log_slave_updates=on # 决定slave从master接收到的更新且执行完之后,执行的Binlog是否记录到slave的 # binlog中,建议开启。
relay_log=relay-log # 中继日志
开启GTID功能
gtid_mode=on # 打开gtid,必须的。
enforce_gtid_consistency=on # 使用GTID模式复制时,需要开启此参数,用来保证GTID的一致性
binlog_format=row # binlog格式 其他可能会造成数据的不一致
禁用binlog_checksum
binlog_checksum=none # 暂时不支持这个。
系统表存储slave信息
master_info_repository=table
relay_log_info_repository=table
主键信息采集
transaction_write_set_extraction=xxhash64 # 默认为OFF
# 目前算法有两种 xxhash64 murmur32
# 注意一个组成员内算法必须一样
其他参数
datadir=/data/mysql/
basedir=/usr/local/mysql/
port=3306
socket=/tmp/mysql.sock
以上参数写在[mysqld]中
数据库初始化
bin/mysqld --defaults-file=/usr/local/mysql/my.cnf --datadir=/data/mysql --user=mysql --initialize-insecure
bin/mysqld_safe --user=mysql # 启动MySQL
创建用户(所有成员)
grant replication slave,replication client on *.* to mgruser@'%' identified by 'redhat';
grant replication slave,replication client on *.* to mgruser@'127.0.0.1' identified by 'redhat';
grant replication slave,replication client on *.* to mgruser@'localhost' identified by 'redhat';
加载模块mysql> install plugin group_replication soname 'group_replication.so';
创建组
set global group_replication_group_name='12345678-1234-1234-1234-1234567890ab';
set global group_replication_local_address="192.168.56.16:30001";
set global group_replication_bootstrap_group=on;
start group_replication;
set global group_replication_bootstrap_group=off;
change master to master_user='rpl_user',master_password='rpl_passwd' for channel 'group_replication_recovery';
添加新成员
install plugin group_replication soname 'group_replication.so';
set global group_replication_group_name='12345678-1234-1234-1234-1234567890ab';
set global group_replication_local_address="192.168.56.15:30001";
set global group_replication_group_seeds="192.168.56.16:30001,192.168.56.15:30001";
# 设置种子成员
change master to master_user='mgruser',master_password='redhat' for channel 'group_replication_recovery';
# 需要在每个成员上存在,包括主
start group_replication;
检测
select * from performance_schema.replication_group_members ;
# 所有在线代表成功了
注意
一定要配置hosts文件
表必须有主键
如果开启了主键信息采集功能
数据库备份和恢复innobackupex --defaults-file="/usr/local/mysql/my.cnf" -S /tmp/mysql.sock --user=root --password="redhat" /backup
# 主上执行
innobackupex --apply-log /backup/2018-06-02_15-49-40/
innobackupex --defaults-file="/usr/local/mysql/my.cnf" --copy-back /backup/2018-06-02_15-49-40/
# 从上执行
最后注意
以上使用set的变量都会数据库重启失效,想要永久生效写在配置文件中,在变量前面加上"loose-"即可
例如:loose-group_replication_local_address='127.0.0.1:12345'
为什么要这样添加?
因为这些参数不是数据库的,是插件的,插件的参数必须在插件加载之后设置,所以
至此完成!