当备份后将新数据节点添加到 MySQL NDB Cluster 时,也可以执行部分恢复。--skip-nodeid
在这种情况下,您可以在执行restore
cluster
命令时排除使用的新节点
。
考虑命名为以下命令
mycluster
输出中所示的 MySQL NDB Cluster
:show status
mcm> show status -r mycluster;
+--------+----------+----------+---------+-----------+-----------+
| NodeId | Process | Host | Status | Nodegroup | Package |
+--------+----------+----------+---------+-----------+-----------+
| 49 | ndb_mgmd | tonfisk | stopped | | mypackage |
| 1 | ndbd | tonfisk | stopped | 0 | mypackage |
| 2 | ndbd | tonfisk | stopped | 0 | mypackage |
| 50 | mysqld | tonfisk | stopped | | mypackage |
| 51 | mysqld | tonfisk | stopped | | mypackage |
| 52 | ndbapi | *tonfisk | added | | |
| 53 | ndbapi | *tonfisk | added | | |
+--------+----------+----------+---------+-----------+-----------+
7 rows in set (0.03 sec)
的输出list backups
向我们展示了该集群的可用备份映像:
mcm> list backups mycluster;
+----------+--------+---------+---------------------+-------+---------+
| BackupId | NodeId | Host | Timestamp | Parts | Comment |
+----------+--------+---------+---------------------+-------+---------+
| 1 | 1 | tonfisk | 2020-12-04 12:03:52 | 1 | |
| 1 | 2 | tonfisk | 2020-12-04 12:03:52 | 1 | |
| 2 | 1 | tonfisk | 2020-12-04 12:04:15 | 1 | |
| 2 | 2 | tonfisk | 2020-12-04 12:04:15 | 1 | |
| 3 | 1 | tonfisk | 2020-12-04 12:17:41 | 1 | |
| 3 | 2 | tonfisk | 2020-12-04 12:17:41 | 1 | |
| 4 | 1 | tonfisk | 2020-12-12 14:24:35 | 1 | |
| 4 | 2 | tonfisk | 2020-12-12 14:24:35 | 1 | |
+----------+--------+---------+---------------------+-------+---------+
8 rows in set (0.06 sec)
现在假设,在稍后的某个时间点,mycluster
使用
add process
命令添加了 2 个数据节点。现在的
show status
输出
mycluster
如下所示:
mcm> show status -r mycluster;
+--------+----------+----------+---------+-----------+-----------+
| NodeId | Process | Host | Status | Nodegroup | Package |
+--------+----------+----------+---------+-----------+-----------+
| 49 | ndb_mgmd | tonfisk | running | | mypackage |
| 1 | ndbd | tonfisk | running | 0 | mypackage |
| 2 | ndbd | tonfisk | running | 0 | mypackage |
| 50 | mysqld | tonfisk | running | | mypackage |
| 51 | mysqld | tonfisk | running | | mypackage |
| 52 | ndbapi | *tonfisk | added | | |
| 53 | ndbapi | *tonfisk | added | | |
| 3 | ndbd | tonfisk | running | 1 | mypackage |
| 4 | ndbd | tonfisk | running | 1 | mypackage |
+--------+----------+----------+---------+-----------+-----------+
9 rows in set (0.01 sec)
由于节点 3 和 4 未包含在备份中,因此我们需要在执行还原时将它们排除在外。您可以
通过使用该
选项restore cluster
指定以逗号分隔的节点 ID 列表来跳过多个数据节点
。--skip-nodeid
假设我们刚刚
使用mcm客户端命令
清除mycluster
了 MySQL NDB Cluster 数据
,
如本节前面所述;然后我们可以
从备份编号 4(当只有编号为 1 和 2 的 2 个数据节点
时创建)恢复(现在有编号为 1、2、3 和 4 的 4
个数据节点),如下所示:stop cluster
start cluster
--initial
mycluster
mycluster
mcm> restore cluster --backupid=4 --skip-nodeid=3,4 mycluster;
+--------------------------------+
| Command result |
+--------------------------------+
| Restore completed successfully |
+--------------------------------+
1 row in set (17.61 sec)
没有数据分发到跳过的(新)节点;您必须强制节点 3 和 4 包含在数据的重新分配中,
ALTER
ONLINE TABLE ... REORGANIZE PARTITION
如本节前面所述。
生成和运行这些
ALTER
ONLINE TABLE ... REORGANIZE PARTITION
步骤的另一种方法是使用 NDB 表元数据的逻辑备份,它是 MySQL Cluster Manager 创建的集群备份的一部分。为此,在运行上述restore
cluster
步骤之前:
找到元数据的逻辑备份;有关说明,请参阅 第 4.6.2.5 节“将备份恢复到具有较少数据节点的集群”中的备份文件的 位置 。
恢复逻辑备份;有关说明,请参阅 第 4.6.2.5 节“将备份恢复到具有较少数据节点的集群”中 的恢复NDB 表元数据的逻辑备份 。
然后您可以运行该restore
cluster
步骤,数据将在所有数据节点之间重新分配,无需进一步手动干预。