1. 首页 > 软件下载 > 正文

MySQL 8/9集群InnoDB Cluster自动化安装过程-Fgedu

# MySQL 8/9集群InnoDB Cluster自动化安装过程-Fgedu
>FGDBA-MySQL 8/9 InnoDB Cluster 自动化安装工具是一款由风哥自主研发的、面向企业级生产环境的一键式 MySQL 8/9 InnoDB Cluster 自动化部署工具。
## 目录
– 一、程序介绍
  – 1.1 工具概述
  – 1.2 作者信息
  – 1.3 设计理念与背景
  – 1.4 适用对象
– 二、功能特性
  – 2.1 核心功能
  – 2.2 增强特性
  – 2.3 功能模块清单
  – 2.4 技术实现亮点
– 三、支持环境
  – 3.1 操作系统
  – 3.2 硬件要求
  – 3.3 软件依赖
  – 3.4 网络与端口
  – 3.5 集群规模
– 四、程序使用
  – 4.1 目录结构
  – 4.2 安装前准备
  – 4.3 配置文件说明
  – 4.4 命令行参数
  – 4.5 基本使用流程
  – 4.6 安装阶段说明
– 五、程序各种案例场景与操作过程
  – 5.1 场景一:标准三节点 + 双 Router 全量安装
  – 5.2 场景二:仅验证环境不安装
  – 5.3 场景三:断点续装(跳过已完成阶段)
  – 5.4 场景四:指定自定义集群名称
  – 5.5 场景五:强制重新创建集群
  – 5.6 场景六:指定非默认 SSH 端口
  – 5.7 场景七:使用自定义配置文件
  – 5.8 场景八:安装后的读写分离验证
  – 5.9 场景九:集群日常维护操作
  – 5.10 场景十:故障恢复操作
– 六、常用问题与排查
  – 6.1 Python 环境问题
  – 6.2 SSH 连接问题
  – 6.3 MySQL 安装问题
  – 6.4 MGR 集群问题
  – 6.5 MySQL Shell 问题
  – 6.6 InnoDB Cluster 问题
  – 6.7 MySQL Router 问题
  – 6.8 读写分离验证问题
  – 6.9 日志文件位置
  – 6.10 性能指标参考
## 一、程序介绍
### 1.1 工具概述
FGDBA-MySQL 8/9 InnoDB Cluster 自动化安装工具是一款由风哥自主研发的、面向企业级生产环境的一键式 MySQL 8/9 InnoDB Cluster 自动化部署工具。该工具基于 Python 3 编写,采用配置驱动(YAML 配置文件)的设计理念,通过 SSH 远程连接协议对多台目标主机进行并行操作,能够在一条命令内完成从底层系统参数调优、MySQL Server 二进制安装、MGR 组复制集群搭建、MySQL Shell 集群管理工具部署、InnoDB Cluster 元数据配置,到 MySQL Router 读写分离代理部署的完整高可用架构搭建工作。
工具采用经典的”三阶段架构”设计:
– 阶段一(MGR):在 3 台及以上 MySQL Server 节点上部署二进制 MySQL 8/9,并配置 MGR(MySQL Group Replication)组复制,形成单主模式(Single-Primary)的高可用数据同步层。
– 阶段二(Shell + Cluster):在集群节点上安装 MySQL Shell 管理工具,并通过 adoptFromGR 模式将已有的 MGR 集群整合升级为完整的 InnoDB Cluster,完成元数据初始化与集群管理用户创建。
– 阶段三(Router):在 2 台及以上节点上安装 MySQL Router 代理层,实现读写分离与负载均衡,对外提供统一的访问端口。
整个安装过程采用多线程并行执行机制,相比传统的串行安装方式,整体部署时间可缩短 55% 以上。工具内置完善的错误处理、分阶段回滚、断点续装、符号链接检测、日志增强等机制,确保即使在复杂网络环境下也能安全、稳定、可重复地完成部署。
### 1.2 作者信息
作者:风哥
官方网站   http://www.fgedu.net.cn, http://www.itpux.com
数据库教程 https://edu.51cto.com/lecturer/8020378.html
mysql MGR组复制集群一键安装教程 https://edu.51cto.com/course/40556.html
### 1.3 设计理念与背景
在企业级数据库运维场景中,MySQL InnoDB Cluster 架构的搭建涉及多个组件(MySQL Server、MySQL Shell、MySQL Router)、多台服务器(至少 3 台数据节点 + 2 台代理节点)、大量配置参数(系统内核参数、MySQL 参数、MGR 参数、Router 参数)以及繁琐的手工操作步骤。传统手工部署方式存在以下痛点:
1. 步骤繁琐:完整搭建一套 InnoDB Cluster 需要上百个操作步骤,极易遗漏或出错。
2. 容易出错:配置参数多且存在节点间依赖关系,任何一个参数配置错误都可能导致集群创建失败。
3. 耗时漫长:串行安装 3 台 MySQL + 配置 MGR + 安装 Shell + 配置 Cluster + 安装 Router,熟练的 DBA 也需要 45 分钟以上。
4. 难以重复:环境差异导致部署脚本难以在不同机器上重复使用。
5. 回滚困难:安装中途失败后,手工清理残留环境非常麻烦。
基于上述背景,本工具的设计理念如下:
– 配置驱动:所有关键参数集中在  配置文件中,一次配置、多节点复用,支持变量自动替换(如 `{host_ip}`)。
– 一键部署:单条命令即可完成全套架构部署,无需人工干预。
– 并行高效:多线程并行安装,大幅缩短部署时间。
– 安全可逆:失败时自动回滚,分阶段清理已安装组件,保证环境整洁。
– 断点续装:已成功安装的阶段可自动跳过,直接从失败处继续,避免重复劳动。
– 日志详尽:每个操作步骤均有详细日志记录,便于事后排查与审计。
### 1.4 适用对象
本工具适用于以下对象和场景:
– 企业 DBA 或运维工程师,需要快速搭建 MySQL InnoDB Cluster 高可用测试或生产环境。
– 数据库架构师,需要验证 InnoDB Cluster 的读写分离、自动故障转移等特性。
– 培训机构或教学环境,需要频繁创建/销毁 MySQL 高可用集群用于教学演示。
– 对 MySQL 高可用架构有一定了解,希望通过自动化手段提升部署效率与一致性的技术团队。
使用本工具前,建议操作者具备以下基础知识:
– Linux 操作系统基础命令(文件操作、网络配置、服务管理)。
– MySQL 数据库基础概念(实例、参数、复制)。
– SSH 远程连接与基础网络知识。
– YAML 配置文件的基本语法。
## 二、功能特性
### 2.1 核心功能
本工具围绕 InnoDB Cluster 全栈架构的自动化部署,提供以下核心功能:
1. 一键安装:单条命令即可完成 InnoDB Cluster 完整部署(MySQL Server + MGR + MySQL Shell + InnoDB Cluster + MySQL Router),无需分步手工执行。
2. 三阶段架构:MGR 集群(数据同步层)→ MySQL Shell(集群管理层)→ MySQL Router(读写分离代理层),阶段清晰、职责分明。
3. 智能部署:内置环境自动检测(网络连通性、端口可用性、磁盘空间、内存、软件包完整性)、配置自动生成、参数自动优化能力。
4. 高可用支持:支持单主(Single-Primary)拓扑模式下的自动故障转移与读写分离,保障业务连续性。
5. 配置驱动:所有关键参数通过  集中管理,支持命令行参数覆盖配置文件,灵活适应不同环境。
6. 完整回滚:任意阶段安装失败时,自动触发分阶段回滚机制,按组件级别清理已安装内容(集群销毁、元数据清理、Router 卸载、MySQL 卸载、系统配置还原),保证目标环境整洁可重复部署。
7. 断点续装:工具会自动检测各阶段是否已成功安装,已成功的阶段自动跳过,直接从失败阶段继续执行,大幅减少重试成本。
8. 日志增强:详细记录每个操作步骤的执行结果,生成独立的安装日志文件(按时间戳命名),并生成安装报告,便于事后排查与审计。
9. 符号链接检测:在检测 MySQL Shell、MySQL Router 等组件是否已安装时,同时检查实际安装目录与符号链接,避免因符号链接失效导致的误判。
10. 日志目录统一:MySQL Shell 与 MySQL Router 的日志统一写入 `/mysql/log/` 目录下,便于集中查看与运维管理。
### 2.2 增强特性
除核心功能外,工具还提供以下增强特性:
1. 前置检查完善:在正式安装前,对网络连通性(MySQL 端口、MGR 端口、X Protocol 端口)、MySQL Shell 可用性、Router 端口可用性(6446、6447、6450)、集群仲裁配置、Router 部署依赖等进行全面检测,提前发现问题。
2. 并行安装:使用多线程对 3 台 MySQL Server 节点并行执行二进制安装,安装结果集中追踪,失败节点自动回滚。
3. Router 智能部署策略:采用非主节点优先策略,优化 Router 在各节点的分布,评估负载均衡,避免 Router 集中在主节点导致单点压力。
4. 集群引导策略:自动选择最佳引导节点(Bootstrap Node),用于 InnoDB Cluster 的创建与 Router 的 Bootstrap 操作。
5. Router 端口冲突自动调整:当目标端口被占用时,自动递增寻找可用端口,避免端口冲突导致安装失败。
6. 配置文件变量自动替换:支持 `{host_ip}` 等变量,在生成各节点配置文件时自动替换为对应主机的实际 IP 地址。
7. 自动备份现有配置:检测到已存在的 MySQL 安装时,提供清理、跳过、取消三种交互选项,保留 LVM 挂载目录、安装程序包与错误日志,仅删除数据目录和配置文件。
8. LVM 逻辑卷自动创建:支持在安装前自动创建 LVM 卷组、逻辑卷并挂载到指定目录(如 /mysql、/backup),并格式化为 xfs 文件系统。
9. 系统内核参数自动调优:自动配置 `fs.file-max`、`net.core.somaxconn`、`vm.swappiness`、`vm.overcommit_memory`、大页内存等内核参数。
10. 安全基线自动配置:自动关闭防火墙(firewalld)与 SELinux,配置 NUMA、透明大页、IO 调度器等系统层设置。
11. 测试库自动创建:安装完成后自动创建测试数据库(fgedudb)、测试表(fgtest_table)并插入测试数据,用于验证 MGR 数据同步与 Router 读写分离功能。
12. 安装报告生成:安装结束后生成完整的安装报告,包含各阶段耗时、成功/失败节点、集群状态、连接信息等。
13. 半同步复制插件支持:支持安装并配置半同步复制(Semi-Sync)插件。
14. 集群扩容支持:提供 MGR 集群动态扩容(scale-up)能力,可向现有集群中添加新的数据节点。
### 2.3 功能模块清单
工具代码以 `MySQLMGRInstall` 类为核心,内部集成了以下功能模块:
#### 模块一:参数解析与配置管理模块
负责命令行参数解析(argparse)与 YAML 配置文件的加载、校验、动态更新。命令行参数可覆盖配置文件中的对应项(如 SSH 凭据、集群成员 IP、集群名称等),实现”配置文件打底 + 命令行覆盖”的灵活配置方式。
#### 模块二:环境检测模块
在安装前对目标主机进行全面体检,包括:网络连通性检测(MySQL 端口 3306、MGR 端口 33006、X Protocol 端口 33060)、MySQL Shell 可用性检测(同时检查实际安装目录与符号链接)、Router 端口可用性检测(6446、6447、6450)、集群仲裁配置检查、Router 部署验证与依赖检查、元数据版本检查。
#### 模块三:并行安装模块
使用多线程(threading)对多台 MySQL Server 节点并行执行二进制解压、目录创建、初始化、配置文件生成、systemd 服务注册、启动、root 密码设置等操作。安装结果通过线程锁保护的结果字典集中追踪,失败节点自动回滚。MySQL Shell 与 MySQL Router 安装同样支持多节点并行。
#### 模块四:MGR 组复制配置模块
在 MySQL Server 安装完成后,配置 MGR 组复制集群:创建复制用户、配置 group_replication 参数(group_name、local_address、group_seeds、autorejoin_tries、member_expel_timeout 等)、启动组复制、设置单主模式、验证成员状态。
#### 模块五:InnoDB Cluster 配置模块
通过 MySQL Shell 的 adoptFromGR 模式,将已有的 MGR 集群整合升级为 InnoDB Cluster。包括:创建集群管理用户(clusteradmin)、执行 adoptFromGR 创建集群、元数据初始化、集群状态验证。
#### 模块六:MySQL Router 智能部署模块
负责 MySQL Router 的二进制安装、Bootstrap 操作、配置生成。采用非主节点优先策略,优化 Router 分布;支持读写路由策略(first-available)与只读路由策略(round-robin 轮询负载均衡);支持 REST API 监控端口(8081)。
#### 模块七:错误处理与回滚机制
追踪失败的步骤编号(failed_step)与失败的组件(failed_components),提供分阶段回滚能力:InnoDB Cluster 销毁、集群元数据清理、MySQL Router 卸载、MySQL 安装回滚、系统配置还原。保证失败后环境可整洁重试。
#### 模块八:测试与验证模块
安装完成后自动创建测试库与测试数据,提供 MGR 集群状态验证、健康检查(health_check)、读写分离验证等能力。
### 2.4 技术实现亮点
1. Python 3 + paramiko:基于 paramiko 实现 SSH 远程连接与文件传输(SFTP),无需在目标主机预装 Agent。
2. YAML 配置驱动:使用 PyYAML 解析配置文件,结构清晰、可读性强、便于版本管理。
3. 多线程并行:threading + Lock 实现多节点并行安装与结果同步。
4. 进度回调:自定义 ProgressCallback 类,在文件传输时按 10% 步长显示进度。
5. 日志分级:logging 模块同时输出到文件(按时间戳命名)与控制台,并关闭 paramiko 调试日志减少噪音。
6. 断点续装:通过远程命令检测各阶段安装标志(如 mysqld 是否存在且服务活跃、mysqlsh 是否可执行、集群是否已创建),智能跳过已完成阶段。
7. 符号链接双重检测:检测组件安装状态时同时检查实际目录与 /usr/bin 符号链接,避免误判。
## 三、支持环境
### 3.1 操作系统
本工具基于二进制方式安装 MySQL 8/9,对操作系统的要求如下:
| 操作系统 | 版本 | 支持状态 | 说明 |
|———-|——|———-|——|
| RHEL(Red Hat Enterprise Linux) | 9.x | 推荐(主要测试环境) | 官方推荐运行环境 |
| Oracle Linux(OEL) | 9.x | 支持 | 与 RHEL 兼容 |
| Kylin Linux(麒麟) | 9.x | 支持 | 国产化适配 |
| CentOS Stream | 9.x | 兼容 | 社区版本 |
| 其他 RHEL 系衍生发行版 | 9.x | 可能兼容 | 需自行验证 |
说明:
– 推荐使用 RHEL 9.x 系列,工具在该环境下经过充分测试。
– 操作系统需为 x86_64 架构。
– 建议使用最小化安装(Minimal Install)作为基础,由工具自动安装所需系统依赖包。
– 如需在国产化环境(如麒麟、统信 UOS)使用,请确认系统基于 RHEL 9 内核衍生。
### 3.2 硬件要求
每个节点的硬件资源配置建议如下:
| 资源 | 最低要求 | 推荐配置(生产) | 说明 |
|——|———|——————|——|
| CPU | 2 核 | 4 核及以上 | MGR 对 CPU 有一定要求 |
| 内存 | 4 GB | 8 GB 及以上 | innodb_buffer_pool_size 建议设为物理内存的 50%-70% |
| 磁盘 | 50 GB | 100 GB 及以上(SSD) | 数据目录建议使用 SSD,提升 IO 性能 |
| 网络 | 千兆网卡 | 万兆网卡 | MGR 节点间通信对网络延迟敏感 |
| 磁盘类型 | HDD | SSD | 数据目录、binlog、redo log 建议 SSD |
### 3.3 软件依赖
#### 3.3.1 控制机(执行安装脚本的机器)Python 环境
| 包名 | 版本要求 | 用途 |
|——|———|——|
| Python | 3.6+(推荐 3.9+) | 运行环境 |
| paramiko | 4.0.0 | SSH 远程连接与文件传输 |
| pyyaml | 6.0 | YAML 配置文件解析 |
| cryptography | 47.0.0 | 加密支持(paramiko 依赖) |
| invoke | 3.0.3 | 命令执行辅助 |
| bcrypt | 5.0.0 | SSH 密钥处理依赖 |
| pynacl | 1.6.2 | 加密依赖 |
| cffi | 2.0.0 | CFFI 绑定 |
| pycparser | 2.23 | C 解析器 |
| typing_extensions | 4.15.0 | 类型扩展 |
控制机需安装 Python 3 及上述扩展包。工具在 `python-pkgs` 目录中附带了离线安装包(.whl 与 .tar.gz),支持在无网络环境下离线安装。在线安装可使用 `pip3 install -r requirements.txt`。
#### 3.3.2 目标主机系统依赖包
工具会在安装过程中自动通过 yum 安装以下系统包:
| 系统包 | 用途 |
|——–|——|
| libaio | Linux 异步 IO 库(MySQL 依赖) |
| numactl | NUMA 内存管理工具 |
| perl | Perl 运行时(MySQL 部分脚本依赖) |
| net-tools | 网络工具(含 netstat 等) |
| wget | 文件下载工具 |
| tar | 解压工具 |
| openssh-clients | SSH 客户端工具 |
| socat | 网络数据转发工具 |
| openssl | 加密库 |
#### 3.3.3 MySQL 软件包
需提前将以下 MySQL 二进制安装包放置在每台目标主机的 `/tmp` 目录:
| 组件 | 软件包名称示例 | 放置位置 | 说明 |
|——|—————-|———-|——|
| MySQL Server | mysql-community-server-9.7.0-el9-x86_64.tar.gz | /tmp | 数据库服务端 |
| MySQL Shell | mysql-shell-9.7.0-linux-glibc2.28-x86_64.tar.gz | /tmp | 集群管理工具 |
| MySQL Router | mysql-router-9.7.0-linux-glibc2.28-x86_64.tar.gz | /tmp | 读写分离代理 |
说明:工具支持在 `/tmp` 目录下自动扫描并选择匹配的安装包版本,无需严格固定文件名。
### 3.4 网络与端口
#### 3.4.1 端口使用说明
| 端口 | 组件 | 用途 | 状态 |
|——|——|——|——|
| 22 | SSH | 远程管理与文件传输 | 必须开放 |
| 3306 | MySQL Server | 数据库连接端口 | 必须开放 |
| 33060 | MySQL Server | X Protocol 端口(MySQL Shell 连接) | 必须开放 |
| 33006 | MGR | 组复制成员间通信 | 必须开放 |
| 6446 | MySQL Router | 读写端口(连接主节点) | 必须开放 |
| 6447 | MySQL Router | 只读端口(连接从节点,轮询) | 必须开放 |
| 6450 | MySQL Router | X Protocol 读写分离端口 | 可选开放 |
| 8081 | MySQL Router | REST API 监控端口 | 可选开放 |
| 33066 | MySQL Server | Admin 端口 | 内部使用 |
注意:配置文件中 MGR 通信端口为 33006(与部分文档示例中的 33061 不同,以实际  中 `group_replication_local_address` 配置为准)。
#### 3.4.2 网络配置建议
– 防火墙:安装环境建议关闭 firewalld(由工具自动配置),生产环境如需保留防火墙,请开放上表所有”必须开放”端口。
– SELinux:安装前需关闭(由工具自动配置为 disabled)。
– 主机名:建议为每台节点设置独立主机名(如 mysql-01、mysql-02、mysql-03),并配置 /etc/hosts 互相解析。
– 网络延迟:MGR 节点间网络延迟建议低于 5ms,以保证集群稳定性。
### 3.5 集群规模
| 组件 | 最小数量 | 推荐数量 | 说明 |
|——|———|———|——|
| MySQL Server(MGR 数据节点) | 3 台 | 3-9 台 | 奇数台保证仲裁 |
| MySQL Router(代理节点) | 2 台 | 2-4 台 | 可与 MySQL Server 共享主机 |
| MySQL Shell(管理工具) | 3 台 | 与 Cluster 节点相同 | 建议安装在每个数据节点 |
## 四、程序使用
### 4.1 目录结构
工具的目录结构如下:
“`
FGMySQLAutoInstall_IC1.2/
├── FGMySQLAutoInstall_IC.py    # 主程序脚本(自动化安装核心逻辑)
├── mysql_config.yaml            # 配置文件(所有参数集中管理)
├── requirements.txt             # Python 依赖包清单
├── docs/                        # 文档目录
│   ├── README.md                # 功能说明文档
│   ├── README2.md               # 详细说明手册(本文档)
│   └── INSTALL.md               # 安装指南(Step by Step)
├── logs/                        # 日志目录(安装日志按时间戳命名)
│   └── mysql_mgr_install_<时间戳>.log
├── python-pkgs/                 # Python 离线安装包目录
│   ├── paramiko-4.0.0-*.whl
│   ├── pyyaml-6.0-*.whl
│   └── …(其他依赖)
└── __pycache__/                 # Python 编译缓存(自动生成)
“`
安装后的 MySQL 相关目录结构(目标主机上):
“`
/mysql/
├── app/
│   ├── mysql/                   # MySQL Server 安装目录
│   ├── mysql-shell/             # MySQL Shell 安装目录
│   └── mysql-route/            # MySQL Router 安装目录
├── data/
│   ├── 3306/
│   │   ├── data/                # MySQL 数据目录
│   │   └── my.cnf               # MySQL 配置文件
│   └── mysqlrouter/             # Router 数据目录
└── log/
    ├── 3306/                    # MySQL 日志目录
    │   ├── fgedudb-error.err    # MySQL 错误日志
    │   ├── fgedudb-query.log    # 慢查询日志
    │   └── binlog/              # binlog 目录
    ├── mysqlsh/                 # MySQL Shell 日志
    └── mysqlrouter/             # MySQL Router 日志
/backup/                         # 备份目录(LVM 自动创建)
“`
### 4.2 安装前准备
#### 步骤一:准备控制机 Python 环境
“`bash
# 安装 Python 3 与 pip(如未安装)
sudo yum install -y python3 python3-pip
# 在线安装依赖包
pip3 install -r requirements.txt
# 或离线安装(使用 python-pkgs 目录)
cd python-pkgs
pip3 install –no-index –find-links=. -r ../requirements.txt
“`
#### 步骤二:准备 MySQL 软件包
将 MySQL Server、MySQL Shell、MySQL Router 三类二进制包上传到每台目标主机的 `/tmp` 目录:
“`bash
# 上传 MySQL Server 到所有数据节点
for ip in 192.168.1.51 192.168.1.52 192.168.1.53; do
    scp mysql-community-server-9.7.0-el9-x86_64.tar.gz root@$ip:/tmp/
done
# 上传 MySQL Shell 到所有数据节点
for ip in 192.168.1.51 192.168.1.52 192.168.1.53; do
    scp mysql-shell-9.7.0-linux-glibc2.28-x86_64.tar.gz root@$ip:/tmp/
done
# 上传 MySQL Router 到 Router 节点
for ip in 192.168.1.51 192.168.1.52; do
    scp mysql-router-9.7.0-linux-glibc2.28-x86_64.tar.gz root@$ip:/tmp/
done
“`
#### 步骤三:修改配置文件
编辑 ,根据实际环境修改以下关键配置项:
– `innodb_cluster.cluster_members`:InnoDB Cluster 成员 IP 列表
– `innodb_cluster.mysql_routers`:Router 节点 IP 列表
– `mgr.group_replication_group_seeds`:MGR 种子节点列表
– `mysql.root_password`:MySQL root 密码
– `ssh.username` / `ssh.password` / `ssh.port`:SSH 连接凭据
说明:命令行参数会覆盖配置文件中的 IP 和 SSH 设置,因此也可以在执行命令时通过命令行参数指定,无需修改配置文件。
#### 步骤四:验证前置条件
“`bash
# 验证 Python 环境
python3 –version
pip3 list | grep paramiko
# 验证 SSH 连通性
for ip in 192.168.1.51 192.168.1.52 192.168.1.53; do
    ssh -o ConnectTimeout=5 root@$ip “hostname”
done
# 验证软件包
for ip in 192.168.1.51 192.168.1.52 192.168.1.53; do
    ssh root@$ip “ls -lh /tmp/mysql*.tar.*”
done
“`
### 4.3 配置文件说明
配置文件  采用 YAML 格式,包含以下主要配置段:
#### 4.3.1 innodb_cluster(InnoDB Cluster 配置)
“`yaml
innodb_cluster:
  cluster_members:               # Cluster 成员 IP 列表(必须 3 台)
    – 192.168.1.51
    – 192.168.1.52
    – 192.168.1.53
  cluster_name: fgedu-innodb-cluster   # 集群名称
  mysql_routers:                 # Router 节点 IP 列表(至少 2 台)
    – 192.168.1.51
    – 192.168.1.52
  router_ports:
    classic: 6446                # 读写端口
    xprotocol: 6450              # X Protocol 读写分离端口
    admin: 6447                  # 只读端口
  cluster_admin_user: clusteradmin           # 集群管理用户
  cluster_admin_password: clusteradmin_123    # 集群管理用户密码
  topology_mode: Single-Primary   # 拓扑模式(Single-Primary 或 Multi-Primary)
  expel_timeout: 5                # 成员驱逐超时(秒)
  member_weight: 50               # 成员权重(故障转移选举权重)
“`
#### 4.3.2 mgr(MGR 组复制配置)
“`yaml
mgr:
  group_name: aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1   # MGR 组名(UUID 格式,所有节点一致)
  group_replication_mode: single-primary             # 复制模式
  group_replication_local_address: ‘{host_ip}:33006’ # 本地通信地址({host_ip} 自动替换)
  group_replication_group_seeds: 192.168.1.51:33006,192.168.1.52:33006,192.168.1.53:33006
  autorejoin_tries: 288             # 自动重连尝试次数(约 2 小时)
  member_expel_timeout: 5           # 成员驱逐超时
  member_weight: 50
  replication_user: mgr_repl        # MGR 复制用户
  replication_password: mgr_repl_123
“`
#### 4.3.3 mysql_shell(MySQL Shell 配置)
“`yaml
mysql_shell:
  install_dir: /mysql/app/mysql-shell   # 安装目录
  mysqlsh_path: /usr/bin/mysqlsh        # mysqlsh 可执行文件路径(符号链接)
  version: 9.7.0                        # 版本
  mysqlsh_options: –sql –log-level=INFO
“`
#### 4.3.4 mysql_router(MySQL Router 配置)
“`yaml
mysql_router:
  install_dir: /mysql/app/mysql-route    # 安装目录
  config_dir: /etc/mysqlrouter           # 配置目录
  log_dir: /mysql/log/mysqlrouter       # 日志目录
  data_dir: /mysql/data/mysqlrouter     # 数据目录
  bootstrap_user: clusteradmin          # Bootstrap 用户
  bootstrap_password: clusteradmin_123
  bootstrap_address: 192.168.1.51:3306  # Bootstrap 地址(主节点)
  routing_strategies:
    read_write: first-available        # 读写策略(优先第一个可用节点)
    read_only: round-robin             # 只读策略(轮询负载均衡)
  max_connections: 1024
  enable_rest_api: true                # 启用 REST API
  rest_port: 8081                      # 监控端口
“`
#### 4.3.5 mysql(MySQL Server 配置)
“`yaml
mysql:
  install_dir: /mysql/app/mysql         # 安装目录
  data_dir: /mysql/data/3306/data       # 数据目录
  log_dir: /mysql/log/3306             # 日志目录
  port: 3306                           # 端口
  root_password: fgedu123              # root 密码
  version: 9.7.0
  binary_package: /tmp/mysql-community-server-9.7.0-el9-x86_64.tar.gz
  my_cnf:                              # my.cnf 配置参数
    innodb_buffer_pool_size: 2G
    max_connections: 300
    # … 更多参数
“`
#### 4.3.6 system(系统配置)
“`yaml
system:
  packages:                 # 系统依赖包
    – libaio
    – numactl
    – perl
    # …
  lvm:                      # LVM 逻辑卷配置
    – vg_name: mysqlvg
      lv_name: mysqllv
      pv_devices: /dev/sdc
      mount_point: /mysql
      filesystem: xfs
      size: 50G
  kernel:                   # 内核参数
    fs.file-max: 655350
    net.core.somaxconn: 65535
    vm.swappiness: 1
    # …
  security:                 # 安全配置
    firewall: disabled
    selinux: disabled
    numa: disabled
“`
#### 4.3.7 ssh(SSH 配置)
“`yaml
ssh:
  username: root
  password: rootroot
  port: 22
  timeout: 30
  retry_count: 3
“`
#### 4.3.8 test(测试库配置)
“`yaml
test:
  database: fgedudb
  user: fgedu
  password: fgedu123
  table: fgtest_table
  table_structure: ‘id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50), value INT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP’
  test_data:
    – name: fgtest01
      value: 100
    – name: fgtest02
      value: 200
“`
### 4.4 命令行参数
#### 必选参数
| 参数 | 全称 | 说明 | 示例 |
|——|——|——|——|
| -ic | –ic-hosts | InnoDB Cluster 成员 IP(至少 3 台,逗号分隔) | -ic 192.168.1.51,192.168.1.52,192.168.1.53 |
| -shell | –shell-hosts | MySQL Shell 安装 IP(通常与 -ic 相同) | -shell 192.168.1.51,192.168.1.52,192.168.1.53 |
| -route | –route-hosts | MySQL Router 安装 IP(至少 2 台) | -route 192.168.1.51,192.168.1.52 |
| -u | –username | SSH 用户名 | -u root |
| -p | –password | SSH 密码 | -p rootroot |
#### 可选参数
| 参数 | 全称 | 说明 | 默认值 |
|——|——|——|——–|
| -P | –port | SSH 端口 | 22 |
| -c | –config | 配置文件路径 | mysql_config.yaml |
| –cluster-name | – | 指定 InnoDB Cluster 名称(覆盖配置文件) | fgedu-innodb-cluster |
| –recreate-cluster | – | 强制重新创建集群(删除现有集群) | False |
| –verify-only | – | 仅验证环境不执行安装 | False |
### 4.5 基本使用流程
基本使用流程如下:
1. 准备控制机 Python 环境与依赖包。
2. 将 MySQL 软件包上传到各目标主机 /tmp 目录。
3. 修改  配置文件(或通过命令行参数指定)。
4. 执行安装命令。
5. 查看安装日志与安装报告。
6. 验证集群状态与读写分离功能。
7. 清理测试库与临时文件(生产环境)。
基本安装命令:
“`bash
python FGMySQLAutoInstall_IC.py \
  -ic 192.168.1.51,192.168.1.52,192.168.1.53 \
  -shell 192.168.1.51,192.168.1.52,192.168.1.53 \
  -route 192.168.1.51,192.168.1.52 \
  -u root \
  -p rootroot
“`
### 4.6 安装阶段说明
工具将 InnoDB Cluster 的部署分为三个阶段,每个阶段完成后自动进入下一阶段:
| 阶段 | 名称 | 内容 | 预计耗时 |
|——|——|——|———-|
| 阶段一 | MGR | 并行安装 3 台 MySQL Server,配置 MGR 单主组复制集群 | 10-15 分钟 |
| 阶段二 | Shell + Cluster | 安装 MySQL Shell,通过 adoptFromGR 创建 InnoDB Cluster | 5-8 分钟 |
| 阶段三 | Router | 安装 2 台 MySQL Router,Bootstrap 读写分离配置 | 5-8 分钟 |
| 合计 | – | 完整 InnoDB Cluster 部署 | 20-30 分钟 |
## 五、程序各种案例场景与操作过程
以下通过十个典型场景,详细说明工具的操作过程。
### 5.1 场景一:mysql标准三节点 + 双 Router 全量安装
场景描述:在 3 台服务器(192.168.1.51、192.168.1.52、192.168.1.53)上部署 MySQL 8/9 InnoDB Cluster,在 2 台服务器(192.168.1.51、192.168.1.52)上部署 MySQL Router,SSH 用户为 root,密码为 rootroot。
操作步骤:
1. 确认软件包已上传:
“`bash
for ip in 192.168.1.51 192.168.1.52 192.168.1.53; do
    ssh root@$ip “ls -lh /tmp/mysql*.tar.*”
done
“`
2. 执行安装命令:
“`bash
python FGMySQLAutoInstall_IC.py \
  -ic 192.168.1.51,192.168.1.52,192.168.1.53 \
  -shell 192.168.1.51,192.168.1.52,192.168.1.53 \
  -route 192.168.1.51,192.168.1.52 \
  -u root \
  -p rootroot
“`
3. 工具自动执行以下流程:
   – 加载配置文件并更新集群成员、Router 成员、MGR seeds 等参数。
   – 前置条件检查(网络、端口、软件包、Shell 可用性、Router 端口、仲裁、依赖)。
   – 断点续装检测(检查各阶段是否已完成)。
   – 阶段一:并行安装 3 台 MySQL Server 并配置 MGR。
   – 阶段二:安装 MySQL Shell 并通过 adoptFromGR 创建 InnoDB Cluster。
   – 阶段三:安装 2 台 MySQL Router 并 Bootstrap。
   – 创建测试库与测试数据。
   – 验证集群状态并生成安装报告。
4. 安装完成后,输出集群状态、节点角色、Router 端口、连接信息与管理命令。
### 5.2 场景二:仅验证环境不安装
场景描述:在正式安装前,先对目标环境进行体检,验证网络连通性、端口可用性、软件包完整性等,不执行任何安装操作。
操作命令:
“`bash
python FGMySQLAutoInstall_IC.py \
  -ic 192.168.1.51,192.168.1.52,192.168.1.53 \
  -shell 192.168.1.51,192.168.1.52,192.168.1.53 \
  -route 192.168.1.51,192.168.1.52 \
  -u root \
  -p rootroot \
  –verify-only
“`
说明:`–verify-only` 参数使工具仅更新配置文件并退出,不执行安装。可结合手动检查命令进一步验证:
“`bash
# 检查端口占用
for ip in 192.168.1.51 192.168.1.52 192.168.1.53; do
    ssh root@$ip “ss -tlnp | grep -E ‘3306|33060|33006|6446|6447|6450′”
done
“`
### 5.3 场景三:断点续装(跳过已完成阶段)
场景描述:上次安装过程中,阶段一(MGR)和阶段二(Shell + Cluster)已成功完成,但阶段三(Router)安装失败。重新执行时希望跳过已完成的阶段,直接从 Router 安装继续。
操作命令:
“`bash
python FGMySQLAutoInstall_IC.py \
  -ic 192.168.1.51,192.168.1.52,192.168.1.53 \
  -shell 192.168.1.51,192.168.1.52,192.168.1.53 \
  -route 192.168.1.51,192.168.1.52 \
  -u root \
  -p rootroot
“`
说明:工具内置断点续装机制,会自动检测:
– 阶段一是否完成:检查 mysqld 是否存在且 mysql.service 服务是否活跃。
– 阶段二-Shell 是否完成:检查安装目录下 mysqlsh 是否存在且可执行。
– 阶段二-Cluster 是否完成:检查 InnoDB Cluster 是否已创建。
– 阶段三是否完成:检查 Router 服务是否活跃。
已完成的阶段会显示”已安装完成,将跳过”,直接进入下一阶段。无需额外参数。
### 5.4 场景四:指定自定义集群名称
场景描述:希望将 InnoDB Cluster 命名为 mycluster,而非配置文件中的默认名称 fgedu-innodb-cluster。
操作命令:
“`bash
python FGMySQLAutoInstall_IC.py \
  -ic 192.168.1.51,192.168.1.52,192.168.1.53 \
  -shell 192.168.1.51,192.168.1.52,192.168.1.53 \
  -route 192.168.1.51,192.168.1.52 \
  -u root \
  -p rootroot \
  –cluster-name mycluster
“`
说明:`–cluster-name` 参数会覆盖配置文件中的 `innodb_cluster.cluster_name`,创建的 InnoDB Cluster 将使用指定的名称。
### 5.5 场景五:强制重新创建集群
场景描述:集群已存在但状态异常,需要删除现有集群并重新创建。
操作命令:
“`bash
python FGMySQLAutoInstall_IC.py \
  -ic 192.168.1.51,192.168.1.52,192.168.1.53 \
  -shell 192.168.1.51,192.168.1.52,192.168.1.53 \
  -route 192.168.1.51,192.168.1.52 \
  -u root \
  -p rootroot \
  –recreate-cluster
“`
说明:`–recreate-cluster` 参数会先销毁现有的 InnoDB Cluster 并清理元数据,然后重新创建集群。适用于集群状态损坏、元数据不一致等场景。
### 5.6 场景六:指定非默认 SSH 端口
场景描述:目标主机的 SSH 服务运行在 2222 端口,而非默认的 22 端口。
操作命令:
“`bash
python FGMySQLAutoInstall_IC.py \
  -ic 192.168.1.51,192.168.1.52,192.168.1.53 \
  -shell 192.168.1.51,192.168.1.52,192.168.1.53 \
  -route 192.168.1.51,192.168.1.52 \
  -u root \
  -p rootroot \
  -P 2222
“`
说明:`-P`(或 –port)参数指定 SSH 端口,默认为 22。该参数会写入配置文件的 ssh.port 字段。
### 5.7 场景七:使用自定义配置文件
场景描述:已准备了一份自定义配置文件 `/opt/myconfig.yaml`,希望使用该文件而非默认的 mysql_config.yaml。
操作命令:
“`bash
python FGMySQLAutoInstall_IC.py \
  -ic 192.168.1.51,192.168.1.52,192.168.1.53 \
  -shell 192.168.1.51,192.168.1.52,192.168.1.53 \
  -route 192.168.1.51,192.168.1.52 \
  -u root \
  -p rootroot \
  -c /opt/myconfig.yaml
“`
说明:`-c`(或 –config)参数指定配置文件路径。工具会读取该文件,并将命令行参数(SSH 凭据、集群成员、Router 成员等)写入该文件后再执行。
### 5.8 场景八:mysql安装后的读写分离验证
场景描述:安装完成后,验证 MySQL Router 的读写分离功能是否正常。
操作步骤:
1. 通过 Router 读写端口(6446)查询,应连接到主节点(read_only=0):
“`bash
mysql -h 192.168.1.51 -P 6446 -u root -pfgedu123 -e “SELECT @@hostname, @@read_only;”
# 预期输出:主节点主机名,read_only=0
“`
2. 通过 Router 只读端口(6447)查询,应连接到从节点(read_only=1),且轮询负载均衡:
“`bash
mysql -h 192.168.1.51 -P 6447 -u root -pfgedu123 -e “SELECT @@hostname, @@read_only;”
# 预期输出:从节点主机名,read_only=1
# 多次执行可观察到主机名在多个从节点间轮询
“`
3. 通过 X Protocol 端口(6450)测试读写分离:
“`bash
# 写入数据(走主节点)
mysql -h 192.168.1.52 -P 6450 -u root -pfgedu123 -e “INSERT INTO fgedudb.fgtest_table VALUES (3,’fgedu03′,300);”
# 查询数据(走从节点)
mysql -h 192.168.1.51 -P 6450 -u root -pfgedu123 -e “SELECT * FROM fgedudb.fgtest_table;”
“`
4. 查看集群状态:
“`bash
mysqlsh clusteradmin@192.168.1.51:6446 -e “cluster = dba.getCluster(); cluster.status();”
“`
### 5.9 场景九:mysql集群日常维护操作
场景描述:安装完成后的日常运维操作。
1. 查看集群状态:
“`bash
mysqlsh clusteradmin@192.168.1.51:6446
# 在 MySQL Shell 中执行
cluster = dba.getCluster()
cluster.status()
“`
2. 查看 MGR 成员状态:
“`bash
mysql -h 192.168.1.51 -P 3306 -u root -pfgedu123 -e “SELECT * FROM performance_schema.replication_group_members;”
“`
3. Router 服务管理:
“`bash
systemctl status mysqlrouter    # 查看状态
systemctl restart mysqlrouter   # 重启
systemctl stop mysqlrouter      # 停止
systemctl start mysqlrouter     # 启动
“`
4. MySQL 服务管理:
“`bash
systemctl status mysqld         # 查看状态
systemctl restart mysqld        # 重启
systemctl stop mysqld           # 停止
systemctl start mysqld          # 启动
“`
### 5.10 场景十:mysql故障恢复操作
场景描述:集群出现节点故障或整体故障时的恢复操作。
1. 单节点故障 – 重启 MGR 服务:
“`bash
# 在故障节点上执行
mysql -u root -pfgedu123 -e “STOP GROUP_REPLICATION; START GROUP_REPLICATION;”
# 验证节点状态
mysql -u root -pfgedu123 -e “SELECT * FROM performance_schema.replication_group_members;”
“`
2. 集群整体故障 – 强制 bootstrap 重建(仅在拥有最新数据的节点执行):
“`bash
mysql -u root -pfgedu123 -e “SET GLOBAL group_replication_bootstrap_group=ON;”
mysql -u root -pfgedu123 -e “START GROUP_REPLICATION;”
mysql -u root -pfgedu123 -e “SET GLOBAL group_replication_bootstrap_group=OFF;”
“`
3. Router 故障恢复:
“`bash
# 重启 Router 服务
systemctl restart mysqlrouter
# 如需重新 Bootstrap
sudo mysqlrouter –bootstrap clusteradmin@192.168.1.51:3306 \
  –directory=/mysql/data/mysqlrouter –force
“`
4. 安装失败后的清理(重新安装前):
“`bash
# 清理测试库
mysql -h 192.168.1.51 -P 6446 -u clusteradmin -pclusteradmin_123 -e “DROP DATABASE IF EXISTS fgedudb;”
mysql -h 192.168.1.51 -P 6446 -u clusteradmin -pclusteradmin_123 -e “DROP USER IF EXISTS ‘fgedu’@’%’;”
# 清理临时文件
for ip in 192.168.1.51 192.168.1.52 192.168.1.53; do
    ssh root@$ip “rm -rf /tmp/mysql*.tar.*”
done
“`
## 六、常用问题与排查
### 6.1 Python 环境问题
#### 问题1:paramiko 安装失败
现象:`pip3 install paramiko` 报错。
排查与解决:
“`bash
# 安装系统依赖
sudo yum install -y libffi-devel openssl-devel gcc gcc-c++
# 重新安装
pip3 install paramiko==4.0.0
# 或使用离线包安装
cd python-pkgs
pip3 install –no-index –find-links=. paramiko==4.0.0
“`
#### 问题2:pyyaml 版本不兼容
现象:加载配置文件时报 YAML 解析错误。
排查与解决:
“`bash
pip3 uninstall pyyaml -y
pip3 install pyyaml==6.0
“`
#### 问题3:cryptography 安装失败
现象:cryptography 编译安装报错。
排查与解决:
“`bash
sudo yum install -y libffi-devel openssl-devel
pip3 install cryptography==47.0.0
# 如仍有问题,设置环境变量
export CRYPTOGRAPHY_OPENSSL_NO_LEGACY=1
“`
#### 问题4:依赖包冲突
现象:离线安装时出现依赖冲突。
排查与解决:
“`bash
pip3 install –ignore-installed –no-index –find-links=. paramiko==4.0.0
“`
### 6.2 SSH 连接问题
#### 问题1:SSH 连接超时
现象:工具提示网络连通性检查失败。
排查与解决:
“`bash
# 检查网络连通性
ping <目标主机IP>
nc -zv -w 5 <目标主机IP> 22
# 检查 SSH 服务状态
ssh root@<目标主机IP> “systemctl status sshd”
“`
#### 问题2:Host key verification failed
现象:SSH 连接提示主机密钥验证失败。
排查与解决:
“`bash
ssh-keygen -R <目标主机IP>
ssh-keyscan -H <目标主机IP> >> ~/.ssh/known_hosts
“`
#### 问题3:SSH 用户名或密码错误
现象:工具提示认证失败。
排查与解决:确认命令行 `-u` 和 `-p` 参数与目标主机的实际 SSH 凭据一致。
### 6.3 MySQL 安装问题
#### 问题1:软件包未找到
现象:工具提示”主机 X 未找到 MySQL 安装包”。
排查与解决:
“`bash
# 确认软件包已上传到 /tmp 目录
ssh root@<目标主机IP> “ls -lh /tmp/mysql*.tar.*”
# 如缺失,上传软件包
scp mysql-community-server-9.7.0-el9-x86_64.tar.gz root@<目标主机IP>:/tmp/
“`
#### 问题2:端口被占用
现象:MySQL 启动失败,提示端口 3306 已被占用。
排查与解决:
“`bash
# 查看占用进程
ss -tlnp | grep :3306
# 或
sudo lsof -i :3306
# 停止占用进程或使用工具清理
# 工具检测到已存在 MySQL 时会提示清理选项(y=清理并安装, s=跳过, n=取消)
“`
#### 问题3:已存在 MySQL 安装
现象:工具检测到已存在的 MySQL 并提示选择。
排查与解决:根据提示选择:
– 输入 y:清理现有 MySQL(停止服务、删除数据目录与配置文件,保留 LVM 挂载、安装包与错误日志)后继续安装。
– 输入 s:跳过已安装阶段,继续后续安装(适用于断点续装)。
– 输入 n:取消安装。
### 6.4 MGR 集群问题
#### 问题1:MGR 插件加载失败
现象:START GROUP_REPLICATION 报错,提示 group_replication.so 未找到。
排查与解决:
“`bash
mysql -u root -pfgedu123 -e “INSTALL PLUGIN group_replication SONAME ‘group_replication.so’;”
“`
#### 问题2:MGR 组名称不匹配
现象:节点无法加入 MGR 集群。
排查与解决:
“`bash
# 确保所有节点使用相同的 group_name
mysql -u root -pfgedu123 -e “SHOW GLOBAL VARIABLES LIKE ‘group_replication_group_name’;”
“`
#### 问题3:MGR 成员状态为 RECOVERING 或无法加入
现象:成员状态长时间停留在 RECOVERING。
排查与解决:
– 检查 MGR 通信端口(33006)是否开放。
– 检查复制用户(mgr_repl)密码是否一致。
– 检查网络延迟是否过高。
– 查看 MySQL 错误日志:`/mysql/log/3306/fgedudb-error.err`
### 6.5 MySQL Shell 问题
#### 问题1:MySQL Shell 检测误判
现象:工具误判 MySQL Shell 已安装或未安装。
排查与解决:工具会同时检查实际安装目录(`/mysql/app/mysql-shell/bin/mysqlsh`)与符号链接(`/usr/bin/mysqlsh`)。如符号链接失效会自动清理。手动检查:
“`bash
ls -la /mysql/app/mysql-shell/bin/mysqlsh
ls -la /usr/bin/mysqlsh
“`
#### 问题2:MySQL Shell 版本兼容性
现象:MySQL Shell 9.7 在 JavaScript 模式下出现 GraalVM 兼容性问题。
排查与解决:工具已将集群配置脚本从 JavaScript 模式迁移到 Python 模式,避免兼容性问题。确保使用与工具匹配的 MySQL Shell 版本(9.7.0)。
### 6.6 InnoDB Cluster 问题
#### 问题1:集群创建失败
现象:adoptFromGR 创建集群时报错。
排查与解决:
“`bash
# 检查 MySQL X Protocol 是否启用
mysql -u root -pfgedu123 -e “SHOW VARIABLES LIKE ‘mysqlx_port’;”
# 预期:33060
# 检查 clusteradmin 用户权限
mysql -u root -pfgedu123 -e “SHOW GRANTS FOR ‘clusteradmin’@’%’;”
# 查看 MySQL 错误日志
tail -100 /mysql/log/3306/fgedudb-error.err
“`
#### 问题2:元数据版本不一致
现象:工具提示元数据版本检查异常。
排查与解决:工具在安装前会检查 `metadata_version`。如版本不一致,可使用 `–recreate-cluster` 参数强制重新创建集群。
### 6.7 MySQL Router 问题
#### 问题1:Bootstrap 失败
现象:Router Bootstrap 命令执行失败。
排查与解决:
“`bash
# 检查 clusteradmin 用户权限与主节点连通性
mysql -h 192.168.1.51 -P 3306 -u clusteradmin -pclusteradmin_123 -e “SELECT 1;”
# 手动 Bootstrap 测试
sudo mysqlrouter –bootstrap clusteradmin@192.168.1.51:3306 \
  –directory=/mysql/data/mysqlrouter –force
# 查看端口是否开放
ssh root@192.168.1.51 “ss -tlnp | grep -E ‘6446|6447|6450′”
“`
#### 问题2:Router 端口冲突
现象:Router 启动失败,提示端口被占用。
排查与解决:
“`bash
# 查看占用进程
sudo lsof -i :6446
sudo lsof -i :6447
# 工具内置端口冲突自动调整功能,会自动递增寻找可用端口
# 如需手动处理,停止占用进程后重启 Router
systemctl restart mysqlrouter
“`
### 6.8 读写分离验证问题
#### 问题1:读写端口返回从节点
现象:通过 6446 端口查询返回的是从节点(read_only=1)。
排查与解决:
“`bash
# 检查集群状态,确认主节点是否在线
mysqlsh clusteradmin@192.168.1.51:6446 -e “cluster = dba.getCluster(); cluster.status();”
# 如主节点故障,Router 会自动切换到新的主节点
# 检查 Router 日志
tail -100 /mysql/log/mysqlrouter/mysqlrouter.log
“`
#### 问题2:只读端口返回主节点
现象:通过 6447 端口查询返回的是主节点。
排查与解决:
– 检查集群中是否有足够的从节点在线。
– 检查 Router 的只读路由策略配置(round-robin)。
– 如集群中只有一个节点在线(其他节点故障),Router 会将所有流量导向该节点。
### 6.9 日志文件位置
安装与运维过程中,相关日志文件位置如下:
| 日志类型 | 文件路径 | 说明 |
|———-|———-|——|
| 安装日志 | logs/mysql_mgr_install_时间戳.log | 工具执行的完整操作记录 |
| MySQL 错误日志 | /mysql/log/3306/fgedudb-error.err | MySQL Server 错误信息 |
| MySQL 慢查询日志 | /mysql/log/3306/fgedudb-query.log | 慢查询记录(阈值 5 秒) |
| MySQL 通用日志 | /mysql/log/3306/fgedudb-general.err | 通用查询日志(默认关闭) |
| binlog 日志 | /mysql/log/3306/binlog/fgedudb-binlog.* | 二进制日志 |
| MySQL Shell 日志 | /mysql/log/mysqlsh/mysqlsh.log | Shell 操作日志 |
| MySQL Router 日志 | /mysql/log/mysqlrouter/mysqlrouter.log | Router 运行日志 |
### 6.10 性能指标参考
#### 安装时间参考
| 阶段 | 时间范围 | 说明 |
|——|———|——|
| 阶段一(MGR) | 10-15 分钟 | 并行安装 3 台 MySQL Server 并配置 MGR |
| 阶段二(Shell + Cluster) | 5-8 分钟 | 安装 MySQL Shell 并配置 InnoDB Cluster |
| 阶段三(Router) | 5-8 分钟 | 安装 MySQL Router(2 台) |
| 总计 | 20-30 分钟 | 完整安装时间 |
#### 并行效率对比
| 安装方式 | 耗时 | 效率 |
|———-|——|——|
| 串行安装 | 约 45 分钟 | 基准 |
| 并行安装 | 约 20 分钟 | 提升 55%+ |
#### 建议配置值
| 参数 | 建议值 | 说明 |
|——|——–|——|
| innodb_buffer_pool_size | 物理内存的 50%-70% | 根据服务器内存调整 |
| max_connections | 300-2048 | 根据并发量调整 |
| innodb_io_capacity | 2000-4000 | 根据磁盘 IO 能力调整 |
| vm.swappiness | 1-5 | 减少 swap 使用 |
| fs.file-max | 655350 | 文件描述符上限 |
| net.core.somaxconn | 65535 | TCP 连接队列 |
| member_expel_timeout | 5-30 | 防止网络抖动误驱逐 |
| autorejoin_tries | 288 | 约 2 小时自动重连尝试 |
#### 系统资源要求汇总
| 资源 | 最低要求 | 推荐配置 |
|——|———|———|
| CPU | 2 核 | 4 核+ |
| 内存 | 4 GB | 8 GB+ |
| 磁盘 | 50 GB | 100 GB+ SSD |
| 网络 | 千兆网卡 | 万兆网卡 |
## 附录:
作者:风哥
官方网站   http://www.fgedu.net.cn, http://www.itpux.com
数据库教程 https://edu.51cto.com/lecturer/8020378.html
mysql MGR组复制集群一键安装教程 https://edu.51cto.com/course/40556.html

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息