MySQL NDB配置文件修改后哪些节点需要重启
来源:17golang原创
时间:2026-10-13 18:45:45 362浏览 收藏
MySQL NDB Cluster 修改配置后,是否需要重启整簇,关键不在“改了配置文件”这句话,而在于改的是哪一个文件。config.ini 是管理节点读取并分发的全局配置,通常要先处理 ndb_mgmd,再让数据节点和 SQL/API 节点逐个载入新配置;某台主机上的 my.cnf 则只影响实际读取它的本地进程。
官方地址:https://dev.mysql.com/doc/refman/8.4/en/mysql-cluster.html
下面按 MySQL NDB Cluster 8.4 文档中的节点职责说明重启边界。生产环境仍应先确认具体参数的“restart type”,不要把示例命令当成未经评估的变更操作。
先分清两类配置文件:config.ini 和 my.cnf
这是最容易混淆的架构边界。config.ini 通常只由 NDB 管理服务器读取,里面描述数据节点、节点连接以及集群级参数。管理服务器还会缓存这份配置,因此仅仅改完文件并不会让已经运行的进程自动获得新值。
my.cnf 是每个节点主机上的本地配置入口。数据节点和 SQL 节点需要在其中配置连接管理节点的信息;SQL 节点还可能通过它启用 NDBCLUSTER。因此,修改某一台主机的 my.cnf,首先要判断该文件被 ndbd、ndbmtd 还是 mysqld 使用,而不是笼统地重启所有节点。
# config.ini:由管理节点读取的集群级配置示意
[ndbd default]
# 该段描述数据节点共用的副本数
NoOfReplicas=2
# my.cnf:某台数据节点或 SQL 节点主机上的本地入口
[mysqld]
# 让 mysqld 使用 NDB 存储引擎
ndbcluster
[mysql_cluster]
# 告诉本地进程管理节点的位置
ndb-connectstring=198.51.100.10

config.ini 改动:先处理管理节点,再处理受影响节点
修改 config.ini 时,管理节点是第一责任点。MySQL 文档给出的通用滚动重启模型是:停止管理节点,重新配置并启动;然后逐个停止、重新配置并启动数据节点;最后逐个处理 SQL 节点。多管理节点场景还要特别注意它们可能互相复用配置数据。
多管理节点时,稳妥的配置关系是:先停止全部 ndb_mgmd,把每台机器上的 config.ini 同步为同一版本,再启动一个管理节点使用 --reload 或 --initial 读取新文件,随后启动其余管理节点。若首个管理节点使用了 --initial,其余管理节点也要按文档要求使用对应方式。
# 以下是维护窗口中的命令示意,不代表本文已在真实集群执行
# 先停止全部管理节点,避免某个存活节点继续提供旧配置
ndb_mgm -e "SHUTDOWN"
# 首个管理节点重新读取 config.ini;--reload 保留旧缓存但不再使用
ndb_mgmd --reload
# 若需要清理并重新建立配置缓存,才考虑 --initial
ndb_mgmd --initial
--reload 与 --initial 的取舍不能只看“哪个更强”。前者比较缓存和文件差异,后者删除既有缓存并重新建立;如果只是普通配置更新,先按参数文档选择重载方式,避免把清理缓存当成万能修复手段。
数据节点并不是都用同一种重启方式
管理节点载入新配置后,数据节点仍需要逐个让配置生效。部分数据节点参数可以在管理客户端中对每个节点发出 RESTART;另一些参数要求先用管理客户端的 STOP 完整停止,再从系统 shell 启动 ndbd 或 ndbmtd。最终方式由对应参数的官方说明决定。
这也是“改了配置却看不到效果”的常见原因:管理节点已经生成了新配置缓存,但某个数据节点仍在使用旧进程状态。不要只重启一个任意数据节点来碰运气,应按节点清单逐个覆盖,并保留当前节点的恢复与冗余策略。
# 进入 NDB 管理客户端,按节点 ID 选择维护对象
ndb_mgm
# 对可在线重新载入的参数,使用节点级 RESTART
ndb_mgm> 3 RESTART
# 对要求完整停止的参数,先 STOP;再由系统启动 ndbmtd
ndb_mgm> 3 STOP
# 这里的启动参数必须以该节点实际部署文件为准
ndbmtd --ndb-nodeid=3

my.cnf 改动:只重启真正读取它的本地进程
如果修改的是某台数据节点主机的 my.cnf,通常只需要让该主机上的 ndbd 或 ndbmtd 重新启动;如果修改的是 SQL 节点的 [mysqld] 或 [mysql_cluster],则需要让该主机上的 mysqld 重新读取文件。若多台主机的文件都被改动,就要把它们分别列入变更清单。
不要把 config.ini 和 my.cnf 混为一个“集群配置”。前者的变化会牵涉管理节点分发和受影响的集群节点;后者的变化首先是本地进程启动参数变化,是否需要扩展到其他节点取决于你是否也同步改了其他主机。
# 仅修改 SQL 节点本地 my.cnf 后的重启示意
# 先保存旧文件,便于人工回退到上一个已知版本
cp /etc/my.cnf /etc/my.cnf.before-change
# 只让读取该文件的 mysqld 重新加载启动参数
systemctl restart mysqld
# 不要把该命令误写成对所有 ndbd 节点的批量重启
用一张重启清单判断是否真的完成
可以把变更按“文件—进程—节点”三列登记。改 config.ini 时至少检查全部管理节点、受影响的数据节点以及需要重新读取本地参数的 SQL/API 节点;改单台 my.cnf 时只把使用该文件的本地进程列入范围。
对于配置滚动重启,MySQL 文档还提供了 ndbinfo.nodes 表中的 config_generation 作为数据节点是否载入新配置的核对线索。它适合做运维收尾记录,但不能替代参数文档对 RESTART 或完整停止的要求。
-- 只读核对示意:查看数据节点的配置代际
-- 该查询用于运维记录,不改变集群状态
SELECT node_id, config_generation
FROM ndbinfo.nodes
ORDER BY node_id;
最后给出一个简短判断清单:
- 改
config.ini:先处理全部管理节点,再按参数要求滚动处理数据节点,最后处理 SQL/API 节点。 - 改数据节点主机的
my.cnf:重启实际读取它的ndbd或ndbmtd。 - 改 SQL 节点的
my.cnf:重启对应mysqld;多台主机改动就逐台处理。 - 拿不准时:回到对应参数的官方说明,确认是
RESTART、STOP后启动,还是 SQL 进程重启。
相关问题
只修改 config.ini 后,管理节点不重启可以吗?
通常不可以。NDB 管理节点会缓存全局配置,文件变化需要通过文档规定的重载或初始启动方式让管理节点重新读取。
所有数据节点都必须同时停机吗?
不一定。滚动重启的目的就是逐个处理节点以保持集群可用,但具体参数可能要求完整停止,必须结合副本、节点状态和参数文档安排顺序。
为什么重启了管理节点,SQL 节点仍像使用旧配置?
管理节点重新载入全局配置,不等于 SQL 节点已经重新读取自己的 my.cnf。若变化属于 SQL 节点本地选项,还要单独重启对应的 mysqld。
-
374 收藏
-
499 收藏
-
384 收藏
-
184 收藏
-
265 收藏
-
457 收藏
-
433 收藏
-
464 收藏
-
422 收藏
-
469 收藏
-
175 收藏
-
109 收藏
-
333 收藏
-
数据库 · MySQL | 1小时前 | MySQL · 备份 · 故障排查 · MySQL NDB NDB备份 BackupDataBufferSize BackupLogBufferSize BackupMemory269 收藏
-
435 收藏
-
230 收藏
-
155 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习