MySQL InnoDB Cluster在Windows Server 2022上需严格匹配MySQL Server/Shell/Router 8.0.37+版本,启用Group Replication必备参数,IPv4主机名解析,防火墙放行端口,精确配置ipAllowlist与Router路由规则,并强制系统时间同步至偏差≤5秒。

MySQL InnoDB Cluster 不是“装完就能用”的开箱即用集群,它依赖 Windows Server 2022 上的完整 MySQL 生态链:必须同时部署 MySQL Server 8.0.37+、MySQL Shell 8.0.37+ 和 MySQL Router 8.0.37+。三者版本不匹配(哪怕小版本差 1)会导致 cluster.addInstance() 失败或状态显示为 OFFLINE,这是 Windows 环境下最常卡住的第一步。
确认 MySQL Server 已启用 Group Replication 必备参数
Windows Server 2022 默认禁用大页内存和某些网络协议,容易让group_replication 插件加载失败。检查 my.ini(不是 my.cnf)是否包含以下**全部**且无注释:
-
server_id=1(每个节点必须唯一,不能为 0) -
gtid_mode=ON且enforce_gtid_consistency=ON -
binlog_format=ROW(STATEMENT 或 MIXED 会直接拒绝加入集群) -
log_bin=ON(路径需存在且 MySQL 服务账户有写权限,例如C:/mysql/data/binlog) -
relay_log=ON(同上,指定绝对路径如C:/mysql/data/relaylog) transaction_write_set_extraction=XXHASH64-
loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"(必须是合法 UUIDv4 格式,不能用 0 或全 f) -
loose-group_replication_start_on_boot=OFF(首次启动必须手动加载插件,否则 Windows 服务会卡在 “Starting”)
MySQL Shell 中创建集群时,主机名解析必须走 IPv4 且可直连
通过 SSH 隧道从 Android 设备在互联网上对 Windows PC 实现完整远程控制的设置与使用指南,适用于远程桌面访问、安全 RDP 等。
MySQL Router 和 Group Replication 在部分补丁版本中对 IPv6 地址处理不稳定。确保:
- 所有节点的
hosts文件(C:\Windows\System32\drivers\etc\hosts)中,用 IPv4 显式映射主机名,例如:192.168.10.11 mysql1,**不要**依赖 DNS 或 IPv6 地址 - 关闭 Windows 防火墙的“专用网络”和“域网络”配置文件,或至少放行:TCP 3306(MySQL)、33061(GR 通信端口)、6446(Router 管理端口)
- 在
MySQL Shell中执行dba.createCluster("mycluster", {ipAllowlist: "192.168.10.0/24"}),ipAllowlist必须显式声明子网,空值或"127.0.0.1"会导致其他节点无法加入
MySQL Router 启动失败常见原因与绕过方式
mysqlrouter --bootstrap 命令在 Windows 下易因权限或路径空格报错,典型错误是:Failed to connect to MySQL server: Access denied for user 'mysqlrouter'@'localhost'。这不是密码错,而是:
- Bootstrap 过程中,Shell 创建的
mysqlrouter用户默认只允许从localhost连接,但 Router 实际连接时使用的是本机真实 IP(如192.168.10.11),导致拒绝 - 解决方法:先在 Shell 中运行
cluster.setupRouterAccount("routeruser", {host: "%"}),再用该用户 bootstrap - Router 配置文件
mysqlrouter.conf的[routing:default]段必须含destinations=metadata-cache://mycluster/?role=PRIMARY_AND_SECONDARY,漏掉?role=...会导致读请求永远只发给 PRIMARY,SECONDARY 节点完全闲置 - Router 必须以 Windows 服务方式运行(
mysqlrouter --install),直接命令行启动无法后台驻留,且重启后失效
MySQL InnoDB Cluster 最容易被忽略的点,是它对系统时间同步的刚性要求:任意两个节点间时钟偏差超过 5 秒,group_replication 就会拒绝通信并持续报 Member state: UNREACHABLE。别信 NTP 客户端默认配置——必须用 w32tm /config /syncfromflags:manual /manualpeerlist:"time.windows.com pool.ntp.org" 强制多源校准,并 w32tm /resync 立即生效。

















