当前位置: 首页 > MySQL数据库

如何搭建MySQL Group Replication测试环境

时间:2026-01-28 14:11:13

   最近看了下MySQL 5.7中的闪亮特性Group Replication,也花了不少做了些测试,发现有些方面的表现确实不赖。当然要模拟这么一套环境还是需要花不少的功夫的,一般来说都是3个节点的环境,实际中要找这样的环境也不是很容易。我们怎么快速模拟呢。一种方式就是在一台服务器上搭建多实例。

   这样一来,服务器的问题就解决了,下面要解决的问题就要艰巨的多了,那就是部署环境。

  可以看到各路博客中都有了详细的解释,而官方文档中对于搭建过程也花了不少的额篇幅来解释,每一个步骤,每个操作,每个参数的含义。但是尽管如此,一次性成功搭建出这个环境的成功概率还是很低。初始化的部分不说,总是在添加节点的时候会有一些问题,这些问题折磨了我好些天,很多时候排查问题要做减法,也算是熟能生巧吧。搭建了十多遍,我也把自己的经验简单总结出来。这样的一个精华就是脚本了。

   当然这是一个很初始的脚本,没有动态变量,没有复杂的条件判断,我就是顺序累了这么些代码,反复尝试,算是可以在一分钟内搭建出一个符合基本要求的环境。

    我就直接上一个比较简单的脚本,其实严格来说不算是脚本。初始化环境的部分

mysqld --initialize-insecure --basedir=/usr/local/mysql --datadir=/home/mysql/data/s1 --explicit_defaults_for_timestamp
mysqld --initialize-insecure --basedir=/usr/local/mysql --datadir=/home/mysql/data/s2 --explicit_defaults_for_timestamp
mysqld --initialize-insecure --basedir=/usr/local/mysql --datadir=/home/mysql/data/s3 --explicit_defaults_for_timestamp
配置参数文件
chown -R mysql:mysql s1 s2 s3
cp s1.cnf s1
cp s2.cnf s2
cp s3.cnf s3

chown -R mysql:mysql s1 s2 s3
启动MySQL服务
/usr/local/mysql/bin/mysqld_safe --defaults-file=/home/mysql/data/s1/s1.cnf &
/usr/local/mysql/bin/mysqld_safe --defaults-file=/home/mysql/data/s2/s2.cnf &
/usr/local/mysql/bin/mysqld_safe --defaults-file=/home/mysql/data/s3/s3.cnf &
中间停顿几秒,保证服务能够正常启动
sleep 10
连接到各个实例查看是数据库是否可用
/usr/local/mysql/bin/mysql -P24081  -S /home/mysql/s1.sock  -e "show databases"
/usr/local/mysql/bin/mysql -P24082  -S /home/mysql/s2.sock  -e "show databases"
/usr/local/mysql/bin/mysql -P24083  -S /home/mysql/s3.sock  -e "show databases"


连接到第一个节点,运行下面的脚本,初始化安装GR插件,做一个基本的配置mysql -P24081  -S /home/mysql/s1.sock -e "
SET SQL_LOG_BIN=0;
CREATE USER rpl_user@'%';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%' IDENTIFIED BY 'rpl_pass';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='rpl_pass'
                      FOR CHANNEL 'group_replication_recovery';
INSTALL PLUGIN group_replication SONAME 'group_replication.so';               
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;
select *from performance_schema.replication_group_members;
"

连接到第二个节点,初始化GR插件和基础配置,和第一个节点略有不同。mysql -P24082  -S /home/mysql/s2.sock -e   "
SET SQL_LOG_BIN=0;
CREATE USER rpl_user@'%';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%' IDENTIFIED BY 'rpl_pass';
SET SQL_LOG_BIN=1;
CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='rpl_pass'
        FOR CHANNEL 'group_replication_recovery';
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
set global group_replication_allow_local_disjoint_gtids_join=on;
start group_replication;
select *from performance_schema.replication_group_members;
"

连接到第二个节点,初始化GR插件和基础配置,和第一个节点略有不同。mysql -P24083  -S /home/mysql/s3.sock -e   "
SET SQL_LOG_BIN=0;
CREATE USER rpl_user@'%';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%' IDENTIFIED BY 'rpl_pass';
SET SQL_LOG_BIN=1;
CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='rpl_pass'
        FOR CHANNEL 'group_replication_recovery';
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
set global group_replication_allow_local_disjoint_gtids_join=on;
start group_replication ;
select *from performance_schema.replication_group_members;
"参数文件的模板如下,除了红色的部分,其它都保持不变即可。这里我使用的端口是24801,不是默认的3306,当然这个没有限制。

[mysqld]

# server configuration
datadir=/home/mysql/data/s1
basedir=/usr/local/mysql

port=24801
socket=/home/mysql/s1.sock


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="1bb1b861-f776-11e6-be42-782bcb377193"
loose-group_replication_start_on_boot=off
loose-group_replication_local_address= "127.0.0.1:24901"
loose-group_replication_group_seeds= "127.0.0.1:24901,127.0.0.1:24902,127.0.0.1:24903"
loose-group_replication_bootstrap_group= off

运行脚本的输出如下,最后会显示节点都添加成功。

+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | b3684636-f83d-11e6-bd53-782bcb377193 | grtest      |       24801 | ONLINE       |
| group_replication_applier | b4a7d208-f83d-11e6-be4e-782bcb377193 | grtest      |       24802 | ONLINE       |
| group_replication_applier | b5eecf1d-f83d-11e6-80d7-782bcb377193 | grtest      |       24803 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+


上一篇:怎么浅谈MySQL优化
下一篇:mysql中怎样比较两个日期间隔
mysql
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素