有时,您希望将数据从您的集群传输到另一个数据节点较少的集群——例如,当您想要缩减集群或为复制设置准备一个较小的副本集群时。虽然第 3.6.2 节“使用 MySQL Cluster Manager 进行基本 MySQL NDB Cluster 备份和恢复”中描述的方法
在这种情况下不起作用,但从 MySQL Cluster Manager 1.4.1 开始,您可以仅使用
backup cluster
命令和ndb_restore程序。
该过程首先使用backup
cluster
命令为原始集群创建备份。接下来,使用命令创建一个具有较少数据节点的新集群create
cluster
。在传输 NDB 表数据之前,必须首先将 NDB 表的元数据恢复到新集群。从 MySQL Cluster Manager 1.4.1 开始,该
backup cluster
命令还为 NDB 表的元数据创建逻辑备份(有关详细信息,请参阅NDB 表元数据的逻辑备份)。将
--all
选项与list backups
命令一起使用以列出所有备份,包括 NDB 表元数据的逻辑备份,这些备份由注释标记
“模式”:
mcm> list backups --all mycluster;
+----------+--------+---------+----------------------+---------+
| BackupId | NodeId | Host | Timestamp | Comment |
+----------+--------+---------+----------------------+---------+
| 1 | 1 | tonfisk | 2016-09-21 21:13:09Z | |
| 1 | 2 | tonfisk | 2016-09-21 21:13:09Z | |
| 1 | 3 | tonfisk | 2016-09-21 21:13:09Z | |
| 1 | 4 | tonfisk | 2016-09-21 21:13:09Z | |
| 1 | 50 | tonfisk | 2016-09-21 21:13:12Z | Schema |
| 2 | 1 | tonfisk | 2016-09-21 21:17:50Z | |
| 2 | 2 | tonfisk | 2016-09-21 21:17:50Z | |
| 2 | 3 | tonfisk | 2016-09-21 21:17:50Z | |
| 2 | 4 | tonfisk | 2016-09-21 21:17:50Z | |
| 2 | 50 | tonfisk | 2016-09-21 21:17:52Z | Schema |
+----------+--------+---------+----------------------+---------+
10 rows in set (0.01 sec)
接下来,我们要找出逻辑备份文件的位置,以及原集群每个数据节点的备份文件的位置。
备份文件的位置。
每个节点的备份文件将在
BackupDataDir
数据节点的集群参数和
mysqldbackupdatadir
节点的参数指定
的文件夹下找到。因为该
命令不区分大小写,所以您可以使用这条命令来检查两个参数的值:
get
mcm> get BackupDataDir mycluster;
+---------------+----------------+----------+---------+----------+---------+---------+----------+
| Name | Value | Process1 | NodeId1 | Process2 | NodeId2 | Level | Comment |
+---------------+----------------+----------+---------+----------+---------+---------+----------+
| BackupDataDir | /opt/mcmbackup | ndbmtd | 1 | | | Process | |
| BackupDataDir | /opt/mcmbackup | ndbmtd | 2 | | | Process | |
| BackupDataDir | /opt/mcmbackup | ndbmtd | 3 | | | Process | |
| BackupDataDir | /opt/mcmbackup | ndbmtd | 4 | | | Process | |
| backupdatadir | /opt/mcmbackup | mysqld | 50 | | | Process | MCM only |
+---------------+----------------+----------+---------+----------+---------+---------+----------+
5 rows in set (0.18 sec)
特定 BackupID 的每个备份的备份文件在
每个数据节点下
和每个mysqld节点下找到。
参数返回行中
的“ ”表示
仅供 MySQL Cluster Manager 使用,它指定的目录仅包含 NDB 表元数据的备份。请注意,如果
未指定,则该命令不会为其返回任何值,并且会占用 的值
,因此图像将存储在目录中
。如果BackupDataDir
/BACKUP/BACKUP-ID
/backupdatadir
/BACKUP/BACKUP-ID
/
comment
MCM only
backupdatadir
backupdatadir
BackupDataDir
get
DataDir
Datadir
/BACKUP/BACKUP-backup_id
backupdatadir
未指定,该get
命令将再次不返回任何值,
mysqld节点的逻辑备份文件将在默认位置找到
。
/
path-to-mcm-data-repository
/clusters/clustername
/nodeid
/BACKUP/BACKUP-Id
将备份数据从原始集群恢复到新集群的过程包括以下步骤:
停止原来的集群:
mcm> stop cluster mycluster; +------------------------------+ | Command result | +------------------------------+ | Cluster stopped successfully | +------------------------------+ 1 row in set (19.54 sec) mcm> show status mycluster; +-----------+---------+---------+ | Cluster | Status | Comment | +-----------+---------+---------+ | mycluster | stopped | | +-----------+---------+---------+ 1 row in set (0.05 sec)
启动新集群。确保新集群可以运行,并且它至少有一个空闲
ndbapi
插槽供 ndb_restore实用程序连接到集群:mcm> start cluster newcluster2nodes; +------------------------------+ | Command result | +------------------------------+ | Cluster started successfully | +------------------------------+ 1 row in set (33.68 sec) mcm> show status -r newcluster2nodes; +--------+----------+---------+---------+-----------+-----------+ | NodeId | Process | Host | Status | Nodegroup | Package | +--------+----------+---------+---------+-----------+-----------+ | 49 | ndb_mgmd | tonfisk | running | | mypackage | | 1 | ndbmtd | tonfisk | running | 0 | mypackage | | 2 | ndbmtd | tonfisk | running | 0 | mypackage | | 50 | mysqld | tonfisk | running | | mypackage | | 51 | ndbapi | * | added | | | +--------+----------+---------+---------+-----------+-----------+ 5 rows in set (0.09 sec)
将 NDB 表的元数据的逻辑备份还原到新集群上。有关还原逻辑备份的不同方法,请参阅 重新加载 SQL 格式的备份。一种方法是打开一个mysql客户端,将其连接到集群的一个 mysqld节点,然后使用 mysql客户端获取逻辑备份文件:
mysql> source path-to-logical-backup-file/BACKUP-BackupID.mysqld_nodeid.schema.sql
有关如何查找逻辑备份文件的路径, 请参阅上面的备份文件位置。对于我们的示例集群,这就是使用 BackupID 2 从备份中恢复 NDB 表元数据的命令:
mysql> source /opt/mcmbackup/BACKUP/BACKUP-2/BACKUP-2.50.schema.sql
使用ndb_restore程序 将原集群每个数据节点的备份一一还原到新集群 :
$> ndb_restore -b BackupID -n nodeID -r --backup_path=backup-folder-for-data_node
有关如何查找数据节点备份文件的路径, 请参阅上面的备份文件的位置。对于我们的示例集群,要从 BackupID 为 2 的数据节点 1 到 4 的备份中恢复数据
mycluster
,请执行以下命令:$> ndb_restore --backupid=2 --nodeid=1 --restore_data --backup_path=/opt/mcmbackup/BACKUP/BACKUP-2/ --disable-indexes
$> ndb_restore --backupid=2 --nodeid=2 --restore_data --backup_path=/opt/mcmbackup/BACKUP/BACKUP-2/ --disable-indexes
$> ndb_restore --backupid=2 --nodeid=3 --restore_data --backup_path=/opt/mcmbackup/BACKUP/BACKUP-2/ --disable-indexes
$> ndb_restore --backupid=2 --nodeid=4 --restore_data --backup_path=/opt/mcmbackup/BACKUP/BACKUP-2/ --disable-indexes
使用该选项
--disable-indexes
以便在恢复期间忽略索引。这是因为如果我们还尝试逐个节点地恢复索引,它们可能无法以正确的顺序恢复,以使外键和唯一键约束正常工作。因此,--disable-indexes
在上述命令中使用了该选项,执行后我们使用以下 ndb_restore命令和--rebuild-indexes
选项重建索引(您只需要在其中一个数据节点上运行它):$> ndb_restore --backupid=2 --nodeid=1 --rebuild-indexes --backup_path=/opt/mcmbackup/BACKUP/BACKUP-2/
数据和索引现已完全恢复到新集群。