跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
SQL

MySQL MGR 集群部署实战:基于 InnoDB Cluster 与 MySQL Router

MySQL Group Replication (MGR) 集群部署指南,涵盖环境初始化、MySQL 配置、InnoDB Cluster 创建及 MySQL Router 接入。通过三节点架构实现高可用,利用 MySQL Shell 管理集群状态,Router 提供读写分离入口。重点包括 hosts 配置、my.cnf 参数调整、专用用户权限授予、节点加入流程及连通性验证,适用于运维人员搭建生产级数据库高可用方案。

路由之心发布于 2026/2/9更新于 2026/6/125 浏览
MySQL MGR 集群部署实战:基于 InnoDB Cluster 与 MySQL Router

引言

在企业级应用中,MySQL 数据库的高可用是保障业务稳定运行的核心需求。MySQL Group Replication(简称 MGR)作为官方推荐的高可用解决方案,支持多主模式和单主模式,能实现数据实时同步与故障自动切换。

本文将详细介绍如何基于 3 台服务器搭建 MGR 集群,结合 MySQL Shell 快速部署集群,并通过 MySQL Router 实现集群访问入口的统一管理,全程附带实操命令与配置说明,适用于运维人员和数据库工程师参考。

部署架构介绍

本次 MGR 集群部署采用 3 台物理机(或虚拟机),整体架构如下:

  1. 核心组件:3 台服务器(IP 分别为 192.168.184.151、184.152、184.153)各部署 1 个 MySQL 实例,组成 InnoDB Cluster 集群;
  2. 部署工具:通过 MySQL Shell 实现集群的创建、节点管理与状态监控;
  3. 访问入口:在 192.168.184.151 上部署 MySQL Router,作为集群的'中间件',提供读写分离端口(6446)和只读端口(6447),屏蔽后端节点细节;
  4. 生产环境建议:
    • 每台 MySQL 服务器均部署 MySQL Shell,便于节点故障时的本地运维;
    • MySQL Router 需单独搭建高可用环境(如双机热备),避免成为单点故障;
    • 不同 MGR 集群可通过不同端口区分,或直接部署在应用服务器本地。

环境准备:初始化与 MySQL 配置

修改 Hosts 文件(三台机器均执行)

为实现服务器间通过主机名通信,需在每台机器的 /etc/hosts 中添加 IP 与主机名的映射:

# 编辑 hosts 文件
vim /etc/hosts
# 添加以下内容(IP 与主机名对应)
192.168.184.151 maria-01
192.168.184.152 maria-02
192.168.184.153 maria-03

安装 MySQL 并修改核心配置

若服务器已存在旧版 MySQL,需先清理环境,再重新部署;若为新环境,可直接执行安装步骤。

清理旧 MySQL 环境(三台机器均执行)
# 停止 MySQL 服务
/etc/init.d/mysql.server stop
# 删除 MySQL 数据文件与安装目录(谨慎操作,确保数据已备份)
rm /data/mysql -rf
rm /usr/local/mysql/ -rf
执行 MySQL 安装脚本
# 进入安装脚本目录(需提前准备好 install_mysql.sh 脚本)
cd /data/script/install_mysql8
# 执行安装脚本
sh install_mysql.sh
验证 MySQL 安装

安装完成后,通过 root 用户登录测试:

# 登录 MySQL
mysql -uroot -p
# 输入密码:maria(脚本预设密码,实际环境需修改为强密码)
修改 MySQL 配置文件(my.cnf)

进入配置文件目录,调整参数以满足 MGR 集群需求(每台机器需修改 server-id,与 IP 后两位对应):

# 进入配置文件目录
cd /data/mysql/conf/
# 编辑 my.cnf
vim my.cnf

配置文件核心内容如下(注意标注'需修改'的部分):

# 基础配置:每台机器 server-id 不同(184151/184152/184153)
server-id = 184151
# 184.151 机器配置,152/153 机器对应修改

# GTID 配置(MGR 依赖 GTID 实现数据一致性)
gtid_mode=on
enforce_gtid_consistency=on

# Binlog 配置(开启二进制日志,用于数据同步)
log-bin = /data/mysql/binlog/mysql-bin
log_slave_updates=ON
binlog_format=ROW
master_info_repository=TABLE
relay_log_info_repository=TABLE

# MGR 核心参数
slave_parallel_type=LOGICAL_CLOCK
transaction_write_set_extraction=XXHASH64
binlog_transaction_dependency_tracking=WRITESET
slave_preserve_commit_order=1

disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
super-read-only=OFF

# 组复制参数
group_replication_start_on_boot=off
group_replication_local_address= "maria-01:33061"
group_replication_group_seeds= "maria-01:33061,maria-02:33061,maria-03:33061"
group_replication_bootstrap_group=off

# 插件配置(加载克隆插件与组复制插件)
plugin-load-add="mysql_clone.so;group_replication.so"
clone=FORCE_PLUS_PERMANENT
重启 MySQL 服务

配置修改后,重启服务使参数生效:

# 正确重启命令
/etc/init.d/mysql.server restart
安装 MySQL Shell(仅 184.151 机器,生产环境建议每台部署)

MySQL Shell 是管理 MGR 集群的核心工具,通过官方源安装:

# 进入脚本目录
cd /usr/src
# 下载 MySQL Shell RPM 包(8.0.25 版本,可根据需求替换)
wget https://downloads.mysql.com/archives/get/p/43/file/mysql-shell-8.0.25-1.el7.x86_64.rpm
# 安装
yum install mysql-shell-8.0.25-1.el7.x86_64.rpm -y
# 验证安装(查看版本)
mysqlsh --version

安装阶段:创建 MGR 集群与添加节点

创建集群专用用户(三台机器均执行)

为 MGR 集群创建专用用户 mgr_user,并授予所需权限(避免使用 root 用户直接管理集群):

-- 登录 MySQL
mysql -uroot -p

-- 创建用户(密码:BgIka^123,实际环境需修改为强密码)
CREATE USER 'mgr_user'@'%' IDENTIFIED BY 'BgIka^123';

-- 授予集群管理与数据操作权限
GRANT CLONE_ADMIN, CONNECTION_ADMIN, CREATE USER, EXECUTE, FILE, GROUP_REPLICATION_ADMIN, PERSIST_RO_VARIABLES_ADMIN, PROCESS, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, REPLICATION_APPLIER, REPLICATION_SLAVE_ADMIN, ROLE_ADMIN, SELECT, SHUTDOWN, SYSTEM_VARIABLES_ADMIN,CREATE,DROP,INSERT,UPDATE,DELETE,ALTER,INDEX,REFERENCES ON *.* TO 'mgr_user'@'%' WITH GRANT OPTION;
GRANT DELETE, INSERT, UPDATE ON mysql.* TO 'mgr_user'@'%' WITH GRANT OPTION;
GRANT ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP, EVENT, EXECUTE, INDEX, INSERT, LOCK TABLES, REFERENCES, SHOW VIEW, TRIGGER, UPDATE ON mysql_innodb_cluster_metadata.* TO 'mgr_user'@'%' WITH GRANT OPTION;
GRANT ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP, EVENT, EXECUTE, INDEX, INSERT, LOCK TABLES, REFERENCES, SHOW VIEW, TRIGGER, UPDATE ON mysql_innodb_cluster_metadata_bkp.* TO 'mgr_user'@'%' WITH GRANT OPTION;
GRANT ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP, EVENT, EXECUTE, INDEX, INSERT, LOCK TABLES, REFERENCES, SHOW VIEW, TRIGGER, UPDATE ON mysql_innodb_cluster_metadata_previous.* TO 'mgr_user'@'%' WITH GRANT OPTION;

用 MySQL Shell 创建 MGR 集群(仅 184.151 机器执行)

连接 MySQL 实例
# 通过 mgr_user 连接 184.151 的 MySQL 实例
mysqlsh -umgr_user -p'BgIka^123' -h192.168.184.151
创建集群

进入 MySQL Shell 交互模式后,执行以下命令创建名为 Cluster01 的 MGR 集群:

// 创建集群
var cluster = dba.createCluster('Cluster01');
// 若后续退出 Shell,重新连接后需执行此命令加载集群(无需重复创建)
var cluster = dba.getCluster('Cluster01');

向集群添加节点(184.152 与 184.153)

在 MySQL Shell 中,依次将 184.152 和 184.153 的 MySQL 实例加入集群:

添加 184.152 节点
// 添加 184.152 节点(端口默认 3306)
cluster.addInstance('[email protected]:3306');
// 若提示'重启超时',执行此命令更新集群状态后重试
cluster.rescan();
查看集群状态

添加节点后,验证集群状态(确保节点均为 ONLINE):

cluster.status();
添加 184.153 节点
// 添加 184.153 节点
cluster.addInstance('[email protected]:3306');
// 再次查看状态,确认 3 个节点均在线
cluster.status();

测试阶段:部署 MySQL Router 并验证集群可用性

安装 MySQL Router(仅 184.151 机器,生产环境需高可用部署)

MySQL Router 用于将客户端请求路由到 MGR 集群节点,实现读写分离与故障自动切换:

# 下载 MySQL Router RPM 包(8.0.25 版本,与 Shell 版本一致)
wget https://downloads.mysql.com/archives/get/p/41/file/mysql-router-community-8.0.25-1.el7.x86_64.rpm
# 安装
yum install mysql-router-community-8.0.25-1.el7.x86_64.rpm -y

生成 Router 配置文件

# 创建 Router 工作目录
mkdir /data/mysqlroute
# 生成配置文件(关联 MGR 集群,--force 覆盖已有文件)
mysqlrouter -B [email protected]:3306 --directory=/data/mysqlroute -u root --force
# 查看配置文件(可根据需求调整端口,默认读写 6446、只读 6447)
cd /data/mysqlroute
vim mysqlrouter.conf

启动 MySQL Router 并测试

启动 Router
# 执行启动脚本
/data/mysqlroute/start.sh
测试读写端口(6446)

通过 Router 的读写端口连接集群,创建测试数据库,验证写操作路由:

# 连接 Router 读写端口
mysql -umgr_user -p'BgIka^123' -P6446 -h192.168.184.151 -e "select @@hostname; create database maria_mgr_test;"
测试只读端口(6447)

通过只读端口连接,验证数据库是否同步(能看到 maria_mgr_test):

# 连接 Router 只读端口,查看数据库列表
mysql -umgr_user -p'BgIka^123' -P6447 -h192.168.184.151 -e "show databases;"
直接验证集群节点同步

登录 184.152 或 184.153 的 MySQL 实例,确认测试数据库已同步:

# 登录 184.152 的 MySQL
mysql -uroot -p
# 查看数据库(应包含 maria_mgr_test)
show databases;

总结与注意事项

  1. 核心要点:本次部署通过 MySQL Shell 简化了 MGR 集群创建流程,MySQL Router 实现了请求统一入口,3 台节点组成的集群可满足中小规模业务的高可用需求;
  2. 生产环境优化:
    • 每台服务器均部署 MySQL Shell,便于节点故障时的本地运维;
    • MySQL Router 需通过 Keepalived 或容器化实现高可用,避免单点故障;
    • 定期备份 MySQL 数据,建议结合 binlog 实现时间点恢复;
  3. 常见问题排查:
    • 节点加入失败:检查 my.cnf 配置(尤其是 server-id 和 MGR 参数)、防火墙端口(3306、33061)是否开放;
    • Router 路由失败:确认集群状态正常(cluster.status())、Router 配置文件中的集群地址正确;
    • 数据同步延迟:可调整 slave_parallel_workers 参数增加并行复制线程数。

目录

  1. 引言
  2. 部署架构介绍
  3. 环境准备:初始化与 MySQL 配置
  4. 修改 Hosts 文件(三台机器均执行)
  5. 编辑 hosts 文件
  6. 添加以下内容(IP 与主机名对应)
  7. 安装 MySQL 并修改核心配置
  8. 清理旧 MySQL 环境(三台机器均执行)
  9. 停止 MySQL 服务
  10. 删除 MySQL 数据文件与安装目录(谨慎操作,确保数据已备份)
  11. 执行 MySQL 安装脚本
  12. 进入安装脚本目录(需提前准备好 install_mysql.sh 脚本)
  13. 执行安装脚本
  14. 验证 MySQL 安装
  15. 登录 MySQL
  16. 输入密码:maria(脚本预设密码,实际环境需修改为强密码)
  17. 修改 MySQL 配置文件(my.cnf)
  18. 进入配置文件目录
  19. 编辑 my.cnf
  20. 基础配置:每台机器 server-id 不同(184151/184152/184153)
  21. 184.151 机器配置,152/153 机器对应修改
  22. GTID 配置(MGR 依赖 GTID 实现数据一致性)
  23. Binlog 配置(开启二进制日志,用于数据同步)
  24. MGR 核心参数
  25. 组复制参数
  26. 插件配置(加载克隆插件与组复制插件)
  27. 重启 MySQL 服务
  28. 正确重启命令
  29. 安装 MySQL Shell(仅 184.151 机器,生产环境建议每台部署)
  30. 进入脚本目录
  31. 下载 MySQL Shell RPM 包(8.0.25 版本,可根据需求替换)
  32. 安装
  33. 验证安装(查看版本)
  34. 安装阶段:创建 MGR 集群与添加节点
  35. 创建集群专用用户(三台机器均执行)
  36. 用 MySQL Shell 创建 MGR 集群(仅 184.151 机器执行)
  37. 连接 MySQL 实例
  38. 通过 mgr_user 连接 184.151 的 MySQL 实例
  39. 创建集群
  40. 向集群添加节点(184.152 与 184.153)
  41. 添加 184.152 节点
  42. 查看集群状态
  43. 添加 184.153 节点
  44. 测试阶段:部署 MySQL Router 并验证集群可用性
  45. 安装 MySQL Router(仅 184.151 机器,生产环境需高可用部署)
  46. 下载 MySQL Router RPM 包(8.0.25 版本,与 Shell 版本一致)
  47. 安装
  48. 生成 Router 配置文件
  49. 创建 Router 工作目录
  50. 生成配置文件(关联 MGR 集群,--force 覆盖已有文件)
  51. 查看配置文件(可根据需求调整端口,默认读写 6446、只读 6447)
  52. 启动 MySQL Router 并测试
  53. 启动 Router
  54. 执行启动脚本
  55. 测试读写端口(6446)
  56. 连接 Router 读写端口
  57. 测试只读端口(6447)
  58. 连接 Router 只读端口,查看数据库列表
  59. 直接验证集群节点同步
  60. 登录 184.152 的 MySQL
  61. 查看数据库(应包含 mariamgrtest)
  62. 总结与注意事项
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • JavaFX 图形用户界面开发指南
  • C++ 进阶核心知识点整理
  • 通义万相 2.1 文生视频模型部署及性能测试
  • C++ 类与对象实战:从零实现日期类
  • FPGA 实现 HDMI 输出完全攻略:从接口原理到 4K 显示全流程
  • OpenUI:基于 AI 的自然语言 UI 构建开源工具
  • AI 大模型在内容审核中的应用与实现
  • 通义千问 1.5-1.8B Chat GPTQ Int4 体验:vLLM 部署与 Chainlit 前端
  • C++ 模板编程入门:从零理解泛型核心
  • 几款支持免费额度的 AI UI 设计工具推荐
  • OpenClaw Gateway Windows 开机自启与 Dashboard 自动打开方案
  • Kafka vs RabbitMQ:消息中间件选型指南与 Java 实战
  • 2026 年 3 月 AI 领域动态:近 7 天全球热点事件梳理
  • Git Push 失败?配置 SSH Key 实现代码推送
  • 分布式光纤声波传感(DAS)在无人机入侵探测中的应用
  • PCL 点云处理算法与函数汇总
  • OpenClaw 本地部署完全指南(Windows/Mac/Linux 全兼容)
  • IDEA 三大 AI 编程插件实测:Copilot、TRAE 与灵码深度对比
  • 2026 年高校 AIGC 检测新规解读:AI 率合格标准分析
  • HDFS EC 基础:Vandermonde 范德蒙德矩阵原理

相关免费在线工具

  • SQL 美化和格式化

    在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online

  • SQL转CSV/JSON/XML

    解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online

  • CSV 工具包

    CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online