Mysql组复制
其详细介绍可参看:组复制官方文档翻译(组复制原理)
实验拓扑:
用三个数据库来进行组复制
mysql主从复制的其他模式可以参看我的博客 mysql主从复制(基于GTID的主从复制、并行复制、半同步复制)
NameHost | IP |
---|---|
server1 | 172.25.21.1 |
server2 | 172.25.21.2 |
server3 | 172.25.21.3 |
数据库进行初始化,并进行密码修改
初始化数据库后,进行密码的修改
对配置文件进行修改
以server1的配置文件为例
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW
transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
loose-group_replication_start_on_boot=off
loose-group_replication_local_address= "172.25.21.1:24901"
loose-group_replication_group_seeds= "172.25.21.1:24901,172.25.21.25:24901,172.25.21.3:24901"
loose-group_replication_bootstrap_group=off
loose-group_replication_ip_whitelist="172.25.21.1/24,172.25.21.2/24,172.25.21.3/24,127.0.0.1/8" # 用户白名单
loose-group_replication_single_primary_mode=off # 单成员模式关闭
loose-group_replication_update_everywhere_checks=on
第 1 行指示 server 必须为每个事务收集写集合,并使用 XXHASH64 哈希算法将其编码为
散列。
第 2 行告知插件,正在加入或创建的组要命名为aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa”。
第 3 行指示插件在 server 启动时不自动启动组复制。
第 4 行告诉插件使用 IP 地址 本地主机,端口 24901 用于接受来自组中其他成
员的传入连接。
第5行 group_replication_local_address 配置的本地地址必须可供所有组成员访问
Server1配置文件:
Server2:
Server3:
进行配置具体配置
使用复制-从权限创建MySQL用户。这个过程可以在二进制日志中捕获,然后您可以依赖分布式恢复来复制用于创建用户的语句。或者,您可以禁用二进制日志记录,然后在每个成员上手动创建用户,例如,如果您希望避免将更改传播到其他服务器实例的话。要禁用二进制日志记录
mysql> SET SQL_LOG_BIN=0;
创建授权用户
如果禁用了二进制日志记录,则在创建用户之后再次启用它
mysql> SET SQL_LOG_BIN=1;
一旦配置了用户,使用CHANGE MASTER TO语句将服务器配置为在下一次需要从其他成员恢复状态时使用group_replication_recovery复制通道的给定凭证。发出以下命令,用创建用户时使用的值替换rpl_user和密码。
mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='Redhat_123' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.78 sec)
mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
Query OK, 0 rows affected (0.15 sec)
查看模块是否添加
mysql> SHOW PLUGINS;
+----------------------------+----------+--------------------+----------- -----------+---------+
| Name | Status | Type | Library | License |
+----------------------------+----------+--------------------+----------------------+---------+
| binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
........省略........
| group_replication | ACTIVE | GROUP REPLICATION | group_replication.so | GPL |
+----------------------------+----------+--------------------+----------------------+---------+
启动组复制
START GROUP_REPLICATION 语句返回后,组就已启动了。 可以检查该组现在是否已创建并且其中已经有一个成员:
对数据库进行库的建立
在server2进行操作
进行与Server1同样的操作,不过不进行一下爱两步:
SET GLOBAL group_replication_bootstrap_group=ON;
SET GLOBAL group_replication_bootstrap_group=OFF;
启动组复制,并查看状态
查看数据库信息
server3
server3与server2的操作完全相同
初始化数据库
进行组复制配置
至此组复制环境搭建完成
进行测试,在server3中插入信息
在其他库进行查看
Server2中:
Server1中同样同步了
至此实验完成