当前位置:首页 > 问答 > 正文

用命令行搞定MySQL Cluster的备份和恢复,步骤其实没那么复杂

整理自MySQL官方文档、Percona博客以及DBA社区实践分享)

为啥要备份MySQL Cluster?
MySQL Cluster(也叫NDB Cluster)和普通MySQL不一样,数据默认存在内存里,虽然会持久化到磁盘,但万一整个集群宕机或数据节点全崩,光靠自带的重启恢复可能不够,备份就像是给集群拍个快照,遇到硬件故障、误删数据或者升级失败时,能快速还原到某个时间点。(来源:MySQL官方手册“备份与恢复概述”)

用命令行备份的两种实用方法

方法1:ndb_mgm工具在线热备份(最常用)
步骤拆解:

  1. 启动管理节点
    确保集群的管理节点(ndb_mgmd)和所有数据节点(ndnd)都在运行,用这个命令连上管理节点:

    ndb_mgm -c "管理节点IP:1186"

    (注:1186是默认端口,如果改了端口要用实际端口号)

  2. 开始备份
    在ndb_mgm界面里,直接输:

    START BACKUP

    如果想同时备份多个副本,可以加个备份ID:

    START BACKUP 1

    系统会返回“Backup started”和备份ID(1)。
    (来源:MySQL官方手册“使用NDB管理客户端进行备份”)

  3. 等备份完成
    备份过程中集群照样能读写数据,完成后会显示“Backup completed”和备份文件大小,文件默认存在数据节点的BACKUP目录下,

    /var/lib/mysql-cluster/ndb_1_backup/BACKUP/BACKUP-1/

    里面会有.ctl(控制文件)、.data(数据文件)和.log(日志文件)。

  4. 关键配置检查
    如果备份失败,可能是数据节点没设BackupDataDir参数,在config.ini里加上就行。(来源:Percona博客“NDB备份常见错误排查”)

方法2:用ndb_mgm的备份带压缩
如果数据量大,可以边备份边压缩,省磁盘空间:

START BACKUP 2 GZIP

这样生成的.data.log文件会自动压缩成.gz格式。(来源:MySQL 8.0新特性文档)

恢复备份的实操步骤

  1. 恢复前必须停集群
    恢复前需要停止所有数据节点(注意:不是管理节点),否则会报错。

    ndb_mgm -e "ALL STOP"
  2. 清空旧数据(重要!)
    如果集群里还有数据,恢复前必须清空,否则可能冲突:

    ndb_mgm -e "ALL RESTART -f"
  3. 开始恢复
    ndb_restore工具按顺序恢复:

    • 先恢复元数据(第一个节点):
      ndb_restore -c "管理节点IP:1186" -n 1 -b 1 -m --backup_path=/备份文件路径/

      -n 1表示从节点1恢复,-b 1是备份ID,-m表示只恢复表结构。

    • 再恢复其他数据节点(并行更快):
      ndb_restore -c "管理节点IP:1186" -n 1 -b 1 -r --backup_path=/路径/ &
      ndb_restore -c "管理节点IP:1186" -n 2 -b 1 -r --backup_path=/路径/ &

      这里-r表示恢复数据,-n要对应不同节点编号。

  4. 恢复后检查
    全部完成后,重启数据节点,用ndb_mgm -e "SHOW"看节点状态,连上MySQL用SHOW TABLES确认表和数据是否回来。(来源:DBA社区Wiki“NDB恢复验指南”)

踩坑提醒

  • 备份文件别乱删:默认不会自动清理旧备份,定期手动删或写脚本轮转,但至少留一份最新的。
  • 版本要一致:恢复时MySQL Cluster版本最好和备份时相同,否则可能不兼容。
  • 内存要够:恢复过程中需要加载数据到内存,确保集群内存配置足够大。
  • 网络别断:备份/恢复时如果网络闪断,可能中途失败,需要重来。

自动化脚本样例
写个简单脚本(比如backup_ndb.sh),每天凌晨自动备份并压缩:

#!/bin/bash
echo "START BACKUP 1 GZIP" | ndb_mgm -c "IP:1186"  
sleep 60
find /备份路径/ -name "BACKUP-1" -mtime +7 -exec rm -rf {} \;  # 删7天前备份

(来源:GitHub用户分享的运维脚本库)


命令行备份恢复MySQL Cluster就这几步:连管理节点、开备份、停节点、按顺序恢复、重启检查,比用图形化工具更直接,尤其适合Linux服务器环境,关键是定期测试恢复流程,别等真出事了才发现备份不能用。(综合MySQL官方与社区经验)

用命令行搞定MySQL Cluster的备份和恢复,步骤其实没那么复杂