代码改变世界

mysql 配置 组复制

2021-01-08 18:04  清晨、午后  阅读(349)  评论(0编辑  收藏  举报

环境准备:

三台安装部署 mysql 的服务器(mysql 版本:5.7.22/8.0.20均测试OK),可互通(需要通过主机名称相互访问,在 etc/hosts  配置即可)

8.xx (该版本的该操作可有在集群正常后修改,将会修改全部的节点密码,修改后从节点需要重新启动组复制)
UPDATE mysql.user set host = '%' where user = 'root' and host='localhost';
ALTER USER 'root'@'%' IDENTIFIED BY 'mysql';
ALTER USER 'root'@'%' identified with mysql_native_password by 'mysql';

5.xx
ALTER USER 'root'@'localhost' IDENTIFIED BY 'mysql';
Grant all privileges on *.* to 'root'@'%' identified by 'mysql' with grant option;

1.更改配置文件 

修改配置文件 /etc/mysql/my.cnf,增加的如注释所示

[mysqld]
bind-address = 0.0.0.0  #确保 mysql 的端口(默认为3306)监听所有地址,否则只有本机可访问该端口
log-error = /var/log/mysqld.log symbolic-links
= 0 #关闭数据分区存储,默认为开启 #GTID: server_id = 1 #节点ID gtid_mode = ON #开启 GTID(全局事务局ID)模式 enforce_gtid_consistency = ON #保证GTID的安全 master_info_repository=TABLE #主服务器信息记录为表 relay_log_info_repository=TABLE #中继日志信息记录为表 binlog_checksum=NONE #二进制日志不进行校验 #binlog log_bin = mysql-bin #开启二进制日志 log_slave_updates = 1 #接收的更新是否记录到自己的二进制日志中 binlog_format = ROW #设置二进制日志格式为 ROW sync_master_info = 1 #每个EVENT都要执行刷盘操作 sync_binlog = 1 #表示每次事务提交,MySQL调用文件系统的刷新操作将缓存刷下去 #relay log skip_slave_start = 1 #复制进程就不会随着数据库的启动而启动 transaction_write_set_extraction=XXHASH64 #记录事务的算法,此处使用64位的XXHASH64 loose-group_replication_group_name="cd98d99c-4e3d-11eb-aa87-8b06d53e7332" #组名称,所有节点保持一致,需要使用 UUID 格式 loose-group_replication_start_on_boot=OFF #为了避免每次启动自动引导具有相同名称的第二个组,所以设置为OFF。 loose-group_replication_bootstrap_group=OFF #是否为组中的引导节点 loose-group_replication_single_primary_mode=OFF #关闭单主模式 loose-group_replication_enforce_update_everywhere_checks=ON #开启多主模式 loose-group_replication_local_address= "10.0.2.15:33061" #本机ip和端口,注意非mysql服务的端口号,该端口是节点直接通讯的端口 loose-group_replication_group_seeds= "10.0.2.4:33061,10.0.2.15:33061" #组中各成员的ip和端口,每个节点都一样 loose-group_replication_ip_whitelist="10.0.2.0/24,127.0.0.1/8" #允许加入组复制的客户机来源的ip白名单,???

 

注意:除了 server-id 和 loose-group_replication_local_address 以外,每个节点的配置都一样,配置完成后重启各个节点上的 mysql ,使配置生效 

2.创建用户,并赋权 SLAVE

SET SQL_LOG_BIN=0;  // 需要暂停二进制日志,避免将创建用户的操作记录到二进制日志中

--------------------
5.xx
GRANT REPLICATION SLAVE ON *.* TO rpl_slave@'%' IDENTIFIED BY 'slave@123';   // 会创建一个用户 rpl_slave

8.xx
CREATE USER 'rpl_slave'@'%' IDENTIFIED BY 'slave@123';
ALTER USER 'rpl_slave'@'%' identified with mysql_native_password by 'slave@123';
GRANT REPLICATION SLAVE ON *.* TO 'rpl_slave'@'%' ;
--------------------

FLUSH PRIVILEGES;
reset master;  // 重置节点相关参数
SET SQL_LOG_BIN=1;

3.指定通道为 group_replication_recovery

CHANGE MASTER TO MASTER_USER='rpl_slave', MASTER_PASSWORD='slave@123' FOR CHANNEL 'group_replication_recovery';

4.安装组复制插件(搭建组复制需要依赖此插件)

INSTALL PLUGIN group_replication SONAME 'group_replication.so';

5.登录第一个实例,引导节点创建组

SET GLOBAL group_replication_bootstrap_group=ON;  #将节点设置为引导节点,注意,只有在主节点启动的时候打开,其他节点可有直接启动(先启动主节点)
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;

6.查看当前组内成员

SELECT * FROM performance_schema.replication_group_members;

7.依次登录其他节点,执行如下即可启动

START GROUP_REPLICATION;