本文详细介绍如何在 CentOS Stream 9 上部署 MySQL 8.0 的 Group Replication (MGR) 一主两从高可用集群。通过本教程,即使是新手也能一步步搭建一个健壮的数据库集群,实现数据强一致性和自动故障转移。
准备三台 CentOS Stream 9 服务器,配置如下:
确保三台机器之间网络互通,并关闭防火墙和 SELinux:
# 关闭防火墙sudo systemctl stop firewalldsudo systemctl disable firewalld# 临时禁用 SELinuxsudo setenforce 0# 永久禁用(需重启)sudo sed -i "s/^SELINUX=enforcing$/SELINUX=permissive/" /etc/selinux/config 所有节点执行以下步骤安装 MySQL 8.0:
# 添加 MySQL 官方 YUM 仓库sudo dnf install -y https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm# 安装 MySQL 服务器sudo dnf install -y mysql-server# 启动 MySQL 并设置开机自启sudo systemctl start mysqldsudo systemctl enable mysqld# 获取临时 root 密码sudo grep "temporary password" /var/log/mysqld.log# 使用临时密码登录并修改 root 密码(示例密码:MyNewPass4!)mysql -uroot -p 登录 MySQL 后执行密码修改:
ALTER USER "root"@"localhost" IDENTIFIED BY "MyNewPass4!"; 编辑 /etc/my.cnf 文件,添加以下配置(根据节点修改 server-id):
[mysqld]server-id=1 # 节点1为1,节点2为2,节点3为3gtid_mode=ONenforce_gtid_consistency=ONlog_bin=mysql-binbinlog_format=ROWrelay_log=relay-logrelay_log_recovery=ONtransaction_write_set_extraction=XXHASH64loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" # 生成一个 UUIDgroup_replication_start_on_boot=OFFgroup_replication_local_address="192.168.1.101:33061" # 节点1的本地组通信地址group_replication_group_seeds="192.168.1.101:33061,192.168.1.102:33061,192.168.1.103:33061"group_replication_bootstrap_group=OFFgroup_replication_ip_whitelist="192.168.1.0/24" 注意:group_replication_group_name 应使用 SELECT UUID() 生成一个统一的值。配置完成后重启 MySQL:
sudo systemctl restart mysqld 在 所有节点 上执行:
mysql -uroot -p# 安装组复制插件INSTALL PLUGIN group_replication SONAME "group_replication.so";# 创建用于组复制的用户(所有节点执行)SET SQL_LOG_BIN=0;CREATE USER "repl"@"%" IDENTIFIED BY "ReplPassword!";GRANT REPLICATION SLAVE ON . TO "repl"@"%";GRANT CONNECTION_ADMIN ON . TO "repl"@"%";GRANT BACKUP_ADMIN ON . TO "repl"@"%";GRANT GROUP_REPLICATION_ADMIN ON . TO "repl"@"%";FLUSH PRIVILEGES;SET SQL_LOG_BIN=1;# 配置恢复通道(所有节点)CHANGE MASTER TO MASTER_USER="repl", MASTER_PASSWORD="ReplPassword!" FOR CHANNEL "group_replication_recovery";
首先在 主节点 (mgr-node1) 上引导组:
mysql -uroot -pSET GLOBAL group_replication_bootstrap_group=ON;START GROUP_REPLICATION;SET GLOBAL group_replication_bootstrap_group=OFF;# 验证组是否已启动SELECT * FROM performance_schema.replication_group_members; 然后在 从节点 (mgr-node2 和 mgr-node3) 上启动组复制:
mysql -uroot -pSTART GROUP_REPLICATION;# 验证成员状态SELECT * FROM performance_schema.replication_group_members; 此时应看到三个节点状态均为 ONLINE,主节点角色为 PRIMARY,从节点为 SECONDARY。
在主节点创建数据库和表,并插入数据,观察从节点是否同步:
-- 主节点执行CREATE DATABASE test;USE test;CREATE TABLE t1 (id INT PRIMARY KEY, name VARCHAR(20));INSERT INTO t1 VALUES (1, "MGR Test");-- 从节点查询SELECT * FROM test.t1; 测试故障转移:手动停止主节点的 MySQL 服务,观察剩余节点是否选举出新的主节点。
# 在节点1上停止 MySQLsudo systemctl stop mysqld# 在节点2或3上查看成员状态SELECT * FROM performance_schema.replication_group_members; 集群应自动选举新主节点,数据继续可用。
至此,我们已在 CentOS Stream 9 上成功部署了 MySQL 8.0 MGR 一主两从集群。该方案提供了高可用性和数据一致性,适用于生产环境。注意在实际部署中设置合适的防火墙规则、使用更安全的密码,并定期备份。通过本文的实践,您已掌握了 MySQL Group Replication 的核心配置。
本文由主机测评网于2026-02-23发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/20260226705.html