如何在MySQL 8.0中配置基于组复制的MGR集群?

小丽君_5547

小丽君_5547

2026-11-12

692人浏览

原创

必须先满足五项硬性配置:①gtid_mode=ON且enforce_gtid_consistency=ON;②binlog_format=ROW;③transaction_write_set_extraction=XXHASH64;④disabled_storage_engines禁用非InnoDB引擎;⑤log_slave_updates=ON;缺一则插件加载失败或卡在RECOVERING。

如何在mysql 8.0中配置基于组复制的mgr集群?

必须先满足五项硬性配置,否则 group_replication 插件根本加载失败或启动后卡在 RECOVERING 状态。

MySQL 8.0 启动前必须确认的 5 项基础参数

MGR 不是“配完 my.cnf 就能跑”的复制方案,这五项缺一不可,且必须在所有节点上完全一致:

  • gtid_mode=ON 且 enforce_gtid_consistency=ON——MGR 依赖 GTID 追踪事务和检测冲突,关闭任一值,插件初始化直接报错
  • binlog_format=ROW——STATEMENT 或 MIXED 模式下插件拒绝加载,错误日志明确提示 Plugin 'group_replication' init function returned error
  • transaction_write_set_extraction=XXHASH64——设成 XXHASH32 或留空,节点加入后无法解析写集,状态长期卡在 RECOVERING
  • disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"——漏掉任意一个非 InnoDB 引擎,插件初始化时报错退出
  • log_slave_updates=ON——即使是单主模式,所有节点也必须开启;否则从节点无法将组内事务写入自身 binlog,后续节点无法追平

group_replication_group_name 必须是合法 UUID

这个值不是随便起的字符串,而是强校验字段。填错不会立即报错,但节点拒绝加入组,错误藏在错误日志里:Group replication: Invalid group name format。

  • 必须用真实 UUID,格式为 8-4-4-4-12 小写十六进制(如 a1b2c3d4-5678-90ab-cdef-1234567890ab),不能带空格、中文、下划线,也不能少位数
  • 推荐方式:在任一节点执行 SELECT UUID();,取结果统一填到所有节点的 loose-group_replication_group_name 配置项中
  • 不要复制示例里的占位符(如 aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa),它不合法

专用恢复账号必须显式创建并绑定到 group_replication_recovery 通道

MGR 不复用任何已有复制账号,也不自动推导凭据。漏掉任意一步,节点永远卡在 RECOVERING,日志反复出现 Failed to connect to recovery source。

win可用的mysql指令skill
win可用的mysql指令skill

安装、修复、更新或打包一个基于 Python 和 PyMySQL 实现的 Windows `mysql` 命令。适用于用户希望在 PowerShell/CMD 中输入 `mysql` 时重定向到 Python 实现、需要交互式输入 MySQL 连接信息、需要同步到当前用户本地 bin 目录,或需要将该能力封装成可公开复用的 Codex skill。

下载
  • 所有节点执行:SET SQL_LOG_BIN=0; → CREATE USER 'repl'@'%' IDENTIFIED BY 'your_password';(密码不能含 @、/、:)
  • 依次授予权限:GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; → GRANT GROUP_REPLICATION_ADMIN ON *.* TO 'repl'@'%';(顺序不能反,且 GROUP_REPLICATION_ADMIN 是全局权限,不能限制库表级)
  • 必须显式执行:CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='your_password' FOR CHANNEL 'group_replication_recovery';(MASTER_PORT 填目标节点 MySQL 服务端口,如 3306,不是 MGR 通信端口)

group_replication_local_address 和 group_replication_group_seeds 的网络配置陷阱

这两个地址不是客户端连接地址,而是 MGR 内部组通信端口(默认 33061),常被防火墙、Docker 网络或云主机安全组拦截。

  • group_replication_local_address 必须填**其他节点能直连的 IP+端口**,比如 Docker 容器要用宿主机可路由的 IP(如 192.168.157.10:33061),不能填 127.0.0.1 或容器内部网段 IP(如 172.19.0.10:33061)
  • group_replication_group_seeds 是引导列表,每个地址格式同 local_address,且必须包含所有节点的 local_address;少一个,新节点可能无法发现集群
  • 务必检查防火墙:firewall-cmd --permanent --add-port=33061/tcp(CentOS)或对应云平台安全组规则

最易被忽略的是:所有节点的 server_id 必须唯一,且不能与 group_replication_group_name 冲突;另外,super_read_only=ON 在单主模式下由 MGR 自动控制,切勿手动设为 OFF 干扰选主逻辑。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

mysql mysql 8.0

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.20

2573

6

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.21

1559

5

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.18

915

5

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.19

3692

5

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.25

6408

4

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2023.08.08

1339

3

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.11

6671

4

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

2023.08.14

5702

7

mysql事务隔离级别
mysql事务隔离级别

mysql规范中定义了四种事务隔离级别,不同的隔离级别对事务的处理有所不同。本专题为大家提供mysql事务隔离级别相关的文章内容,大家可以免费体验。

2023.08.16

7754

11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 196人学习