dba.createCluster() 成功不代表集群真正可用,必须先用 dba.checkInstanceConfiguration() 检查实例是否满足前置条件:如必需权限(BACKUP_ADMIN、CLONE_ADMIN等)、GTID开启(gtid_mode=ON、enforce_gtid_consistency=ON)、binlog启用(log_bin、binlog_format=ROW)、server_id唯一且非零、mysql系统库可写,并显式配置ipWhitelist和memberWeight。

dba.createCluster() 能跑起来,不代表集群真正可用——很多部署失败都卡在配置验证或权限缺失上,不是命令没输对,而是底层实例没达标。
检查 MySQL 实例是否满足 InnoDB Cluster 前置条件
直接执行 dba.checkInstanceConfiguration() 会暴露真实问题:比如缺少 BACKUP_ADMIN、CLONE_ADMIN 或 PERSIST_RO_VARIABLES_ADMIN 权限,或者 gtid_mode=OFF、enforce_gtid_consistency=OFF 这类硬性要求未开启。
常见错误现象:ERROR: The account 'myadmin_common'@'10.%' is missing privileges required to manage an InnoDB cluster
- 必须用具备
GRANT OPTION的账户运行检查,不能只给SELECT权限 -
log_bin和binlog_format=ROW必须启用,否则 MGR 插件加载失败 -
server_id每个节点必须唯一,且不能为 0 或重复值 - 所有节点的
mysql系统库需可写(尤其mysql_innodb_cluster_metadata表),否则后续createCluster()会静默失败
创建集群时必须显式指定白名单和权重
默认不设 ipWhitelist 会导致组通信被拒绝,尤其在跨子网或使用 VIP 场景下;不设 memberWeight 则故障转移时选举逻辑不可控。
正确示例:dba.createCluster('prod-cluster', {ipWhitelist: '10.0.0.0/24', memberWeight: 80})
-
ipWhitelist必须包含所有数据节点 IP,不能只写一个或留空 -
memberWeight影响主节点选举优先级,数值越高越可能被选为主(范围 1–100) - 若用域名而非 IP 加入节点,需确保所有节点
/etc/hosts或 DNS 解析一致,否则addInstance()会超时
MySQL Router 自动配置失败的典型原因
mysqlrouter --bootstrap 失败,90% 是因为目标集群节点不可达,或账号无权读取元数据表。
常见错误信息:Failed to connect to cluster metadata server 或 Access denied for user 'admin'@'%' to database 'mysql_innodb_cluster_metadata'
- Router 连接的是集群中任意一个节点,但该节点必须能访问
mysql_innodb_cluster_metadata库(不是只读) - Bootstrap 账号需有
SELECT权限 onmysql_innodb_cluster_metadata.*,且不能是匿名用户 - 若 Router 和 MySQL 节点不在同一网络段,需确认 33060(X 协议)端口已开放,仅开 3306 不够
集群状态看似正常,但实际无法故障转移
cluster.status() 显示 "status": "ONLINE",不代表数据同步就可靠。MGR 组内延迟、网络分区、仲裁丢失都可能让状态“假在线”。
关键检查点:
- 运行
SELECT * FROM performance_schema.replication_group_members;,确认MEMBER_STATE = ONLINE且MEMBER_ROLE与预期一致 - 查
performance_schema.replication_group_member_stats中的COUNT_TRANSACTIONS_IN_QUEUE,非零值说明有事务堆积 - 手动 kill 主节点后,观察
cluster.status()是否在 10–30 秒内完成切换——别只看日志,要验证新主能否接受写入
真正容易被忽略的是:MGR 默认用 loose-group_replication_ip_allowlist 控制通信白名单,这个参数若没在 my.cnf 里显式配置,Router 或其他节点加入时可能被静默拒绝,而错误日志里只打印“connection refused”,不提白名单的事。


















