4.6.2.4 部分恢复——添加数据节点

当备份后将新数据节点添加到 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 clusterstart cluster --initialmyclustermycluster

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步骤之前:

  1. 找到元数据的逻辑备份;有关说明,请参阅 第 4.6.2.5 节“将备份恢复到具有较少数据节点的集群”中的备份文件的 位置 。

  2. 恢复逻辑备份;有关说明,请参阅 第 4.6.2.5 节“将备份恢复到具有较少数据节点的集群”中 的恢复NDB 表元数据的逻辑备份

然后您可以运行该restore cluster步骤,数据将在所有数据节点之间重新分配,无需进一步手动干预。