MySQL Cluster在Windows上需分角色独立部署:管理节点(ndb_mgmd.exe)用config.ini配置,数据节点(ndbd.exe)和SQL节点(mysqld.exe)共用my.ini但须分[mysql_cluster]与[mysqld]两节,启动必须严格按管理→数据→SQL顺序且以管理员权限执行。

MySQL Cluster 在 Windows 上不是「装个 MySQL Server 就完事」的事,它由三个独立角色组成:管理节点(ndb_mgmd.exe)、数据节点(ndbd.exe 或 ndbmtd.exe)、SQL 节点(mysqld.exe)。三者必须分别配置、启动,且不能混用同一份 my.ini 文件逻辑——这是绝大多数人卡住的第一步。
管理节点必须单独配 config.ini,且路径不能含中文或空格
ndb_mgmd.exe 启动时只认一个配置文件:config.ini,不读 my.ini。它必须放在管理节点机器上,且:
-
config.ini必须用 ANSI 或 UTF-8 without BOM 编码保存(记事本另存为时选“ANSI”最稳) - 所有路径字段(如
DataDir)必须用正斜杠/或双反斜杠\,单反斜杠\会被忽略或报错 -
HostName值必须是该管理节点的实际 IP 地址,不能写127.0.0.1或localhost -
[ndbd default]下的NoOfReplicas值必须 ≤ 数据节点总数,否则集群无法启动
示例关键段(存为 C:/mysql/bin/config.ini):
[ndb_mgmd] HostName=192.168.10.10 DataDir=C:/mysql/bin/cluster-logs <p>[ndbd default] NoOfReplicas=2 DataDir=C:/mysql/bin/cluster-data DataMemory=128M IndexMemory=32M</p><p>[ndbd] HostName=192.168.10.11</p><p>[ndbd] HostName=192.168.10.12</p><p>[mysqld] HostName=192.168.10.11</p><p>[mysqld] HostName=192.168.10.12
SQL 节点和数据节点共存时,my.ini 必须分节声明
一台机器若同时跑 SQL 节点和数据节点(常见于测试环境),my.ini 里要明确区分两套配置:
-
[mysql_cluster]段专供ndbd.exe读取,指定管理节点地址 -
[mysqld]段供mysqld.exe读取,启用 NDB 引擎并指向同一管理节点
遗漏任一段,就会出现:
-
ndbd.exe启动失败,报错Could not connect to management server -
mysqld.exe启动成功但SHOW ENGINES里看不到NDBCLUSTER
正确写法(C:/mysql/my.ini):
[mysql_cluster] ndb-connectstring=192.168.10.10 <p>[mysqld] port=3307 basedir=C:/mysql datadir=C:/mysql/data ndbcluster ndb-connectstring=192.168.10.10 default-storage-engine=ndbcluster character-set-server=utf8mb4
注意:ndb-connectstring 在两个段里都得写,且值必须一致。
启动顺序和权限是硬性要求,不能跳步
Windows 下没有 systemd 或 init.d,所有节点必须手动按顺序、以管理员权限 CMD 启动:
- 第一步:先启管理节点(
ndb_mgmd.exe -f C:/mysql/bin/config.ini --initial),加--initial仅首次运行;后续重启去掉该参数,否则清空元数据 - 第二步:再启所有数据节点(
ndbd.exe -c 192.168.10.10),等每个都打印出Started才继续 - 第三步:最后启 SQL 节点(
mysqld.exe --defaults-file=C:/mysql/my.ini)
常见错误:
- 用普通用户 CMD 运行
ndb_mgmd.exe→ 报错Failed to create directory(没权限建日志) - 数据节点未就绪就启 SQL 节点 →
mysqld日志里反复刷Unable to connect to management server,但进程不退出 - 多次执行
--initial→config.ini被覆盖,节点 ID 错乱,集群拒绝加入
验证是否真跑起来,别只看进程存在
ndb_mgm.exe 是唯一可信的校验工具。进入管理节点的 bin 目录后执行:
ndb_mgm -c 192.168.10.10 > show
正常输出应类似:
Connected to Management Server at: 192.168.10.10:1186 Cluster Configuration --------------------- [ndbd(NDB)] 2 node(s) id=2 @192.168.10.11 (mysql-8.0.39 ndb-8.0.39, Nodegroup: 0, *) id=3 @192.168.10.12 (mysql-8.0.39 ndb-8.0.39, Nodegroup: 0) <p>[ndb_mgmd(MGM)] 1 node(s) id=1 @192.168.10.10 (mysql-8.0.39 ndb-8.0.39)</p><p>[mysqld(API)] 2 node(s) id=4 @192.168.10.11 (mysql-8.0.39 ndb-8.0.39) id=5 @192.168.10.12 (mysql-8.0.39 ndb-8.0.39)
如果某行末尾没带 *(星号),说明该节点未真正上线;如果 [mysqld(API)] 显示 not connected,大概率是 my.ini 里漏了 ndbcluster 或端口被占用。
真正的难点不在安装,而在各节点间配置项的耦合关系——改一个 IP,三个地方要同步;删一行配置,可能整个集群变砖。动手前,先把 config.ini 和两份 my.ini 的内容抄下来备份,比什么都管用。


















