在mysql5.7以上,mysql支持使用组复制插件和克隆插件去完成集群搭建和数据同步。本次搭建两台服务器,两台服务器都作为主机进行数据同步,我的两台服务器的ip分别是10.5.2.103和10.5.2.104;我的mysql使用的是docker部署的(mysql采用host模式,使用docker自定义网卡没有搭建成功),请注意搭建集群需要两台服务器的mysql是互通的,Mysql Group Replication默认使用的端口是33061;
1.主从配置
主机1配置
主机1的docker-compose.yml文件配置如下:
主机2的my.cnf配置如下:
主机2配置
主机2的docker-compose.yml文件配置如下:
主机2的my.cnf文件配置:
2.搭建步骤
使用docker部署,需要使用docker exec -it <容器id> /bin/bash 命令进入容器后使用 mysql -uroot -p 命令连接数据库后执行如下操作,因为我在搭建的时候,主库已经有了一部分数据,所以执行了克隆操作,如果两个数据不存在数据差异可以忽略克隆操作。
1.在两台服务器安装复制和克隆插件命令:
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
INSTALL PLUGIN clone SONAME 'mysql_clone.so';
2.主服务器添加复制用户并分配权限命令:
CREATE USER 'repluser'@'%' IDENTIFIED BY 'replpassword';
GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'%';
FLUSH PRIVILEGES;
3.主服务器添加克隆用户命令并分配权限:
CREATE USER 'clone_user'@'%' IDENTIFIED BY 'your_password';
GRANT BACKUP_ADMIN, CLONE_ADMIN ON *.* TO 'clone_user'@'%';
FLUSH PRIVILEGES;
4.主服务器启动复制组命令:
SET GLOBAL group_replication_bootstrap_group = ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group = OFF;
5.查看复制组状态命令:
SELECT * FROM performance_schema.replication_group_members;
6.从服务器添加复制用户命令:
CHANGE MASTER TO MASTER_USER='repluser', MASTER_PASSWORD='replpassword' FOR CHANNEL 'group_replication_recovery';
7.从机克隆主库命令:
SET GLOBAL clone_valid_donor_list = '192.168.1.110:3306';
CLONE INSTANCE FROM 'clone_user'@'10.5.2.103':3306 IDENTIFIED BY 'your_password';
上述中192.168.1.110:3306是的主库地址和端口,执行CLONE INSTANCE命令后数据库会进行克隆,需要等待一会,数据库克隆完成之后会断开连接。
8.从库启动复制组命令:
START GROUP_REPLICATION;
9.查看从库复制组状态命令
SELECT * FROM performance_schema.replication_group_members;