21.4.24.1 恢复到其他数量的数据节点

可以从 NDB 备份还原到数据节点数量与从其进行备份的原始节点不同的群集。以下两节分别讨论目标群集具有比备份源更少或更多数据节点的情况。

21.4.24.1.1 恢复到比原始节点少的节点

如果节点数量更多,则可以还原到数据节点数量少于原始节点的群集。在以下示例中,我们使用在具有四个数据节点的群集上备份到具有两个数据节点的群集上。

  • 原始群集的 Management 服务器位于主机host10上。原始群集具有四个数据节点,其节点 ID 和主机名显示在以下摘自 Management 服务器的config.ini文件的文件中:
[ndbd]
NodeId=2
HostName=host2

[ndbd]
NodeId=4
HostName=host4

[ndbd]
NodeId=6
HostName=host6

[ndbd]
NodeId=8
HostName=host8

我们假定每个数据节点最初都以ndbmtd --ndb-connectstring=host10或等效名称开头。

这些文件位于每个数据节点上的BackupDataDir /BACKUP/BACKUP-B下。对于本示例的其余部分,我们假定备份 ID 为 1.

使所有这些文件都可用于以后复制到新的数据节点(可以通过ndb_restore在数据节点的本地文件系统上访问它们)。将它们全部复制到一个位置是最简单的。我们假设这就是您所做的。

  • 目标集群的 Management 服务器位于主机host20上,并且目标具有两个数据节点,并显示了host20上 Management 服务器config.ini文件中的节点 ID 和主机名:
[ndbd]
NodeId=3
hostname=host3

[ndbd]
NodeId=5
hostname=host5

host3host5上的每个数据节点进程应以ndbmtd -c host20 --initial或等效名称启动,以便新的(目标)群集以干净的数据节点文件系统开头。

  • 将两组不同的两个备份文件复制到每个目标数据节点。对于此示例,将备份文件从节点 2 和 4 从原始群集复制到目标群集中的节点 3.这些文件在这里列出:

  • BACKUP-1-0.2.Data

  • BACKUP-1.2.ctl

  • BACKUP-1.2.log

  • BACKUP-1-0.6.Data

  • BACKUP-1.6.ctl

  • BACKUP-1.6.log

然后将备份文件从节点 6 和 8 复制到节点 5.这些文件显示在以下列 table 中:

  • BACKUP-1-0.4.Data

  • BACKUP-1.4.ctl

  • BACKUP-1.4.log

  • BACKUP-1-0.8.Data

  • BACKUP-1.8.ctl

  • BACKUP-1.8.log

在此示例的其余部分中,我们假设相应的备份文件已保存到节点 3 和 5 的每个节点上的目录/BACKUP-1中。

  • 在两个目标数据节点的每个节点上,必须从两组备份中还原。首先,通过在host3上调用ndb_restore来将备份从节点 2 和 4 还原到节点 3,如下所示:
shell> ndb_restore -c host20 --nodeid=2 --backupid=1 --restore-data --backup-path=/BACKUP-1

shell> ndb_restore -c host20 --nodeid=4 --backupid=1 --restore-data --backup-path=/BACKUP-1

然后通过在host5上调用ndb_restore将备份从节点 6 和 8 还原到节点 5,如下所示:

shell> ndb_restore -c host20 --nodeid=6 --backupid=1 --restore-data --backup-path=/BACKUP-1

shell> ndb_restore -c host20 --nodeid=8 --backupid=1 --restore-data --backup-path=/BACKUP-1
21.4.24.1.2 恢复到比原始节点更多的节点

为给定的ndb_restore命令指定的节点 ID 是原始备份中的节点的 ID,而不是将其还原到的数据节点的 ID。使用本节中描述的方法执行备份时,ndb_restore连接到 Management 服务器,并获取要备份到的群集中的数据节点列 table。还原后的数据将进行相应的分配,因此在执行备份时无需知道或计算目标群集中的节点数。

Note

更改每个节点组的 LCP 线程或 LQH 线程总数时,应从使用mysqldump创建的备份中重新创建架构。

  • 创建数据备份。您可以通过从系统 Shell 调用ndb_mgm client START BACKUP命令来做到这一点,如下所示:
shell> ndb_mgm -e "START BACKUP 1"

假设所需的备份 ID 为 1.

  • 创建架构的备份。在 NDB 7.5.2 和更高版本中,仅当每个节点组的 LCP 线程或 LQH 线程的总数发生更改时,才需要执行此步骤。
shell> mysqldump --no-data --routines --events --triggers --databases > myschema.sql

Important

使用ndb_mgm创建NDB本机备份后,如果创建,则在进行架构备份之前一定不能进行任何架构更改。

  • 将备份目录复制到新群集。例如,如果要还原的备份具有 ID 1 并且BackupDataDir = /backups/node_nodeid,则该节点上备份的路径为/backups/node_1/BACKUP/BACKUP-1。在此目录中,有三个文件,在这里列出:

  • BACKUP-1-0.1.Data

  • BACKUP-1.1.ctl

  • BACKUP-1.1.log

您应该将整个目录复制到新节点。

如果需要创建架构文件,请将其复制到 SQL 节点上的某个位置,该位置可由mysqld读取。

无需从一个或多个特定节点还原备份。

要从刚刚创建的备份中还原,请执行以下步骤:

  • 还原架构

  • 如果使用mysqldump创建了单独的架构备份文件,则使用mysqlClient 端导入此文件,类似于此处所示:

shell> mysql < myschema.sql

导入架构文件时,除了显示的内容外,您可能还需要指定--user--password选项(可能还有其他选项),以便mysqlClient 端能够连接到 MySQL 服务器。

  • 如果不需要创建模式文件,则可以使用ndb_restore --restore-meta(缩写为-m)重新创建模式,类似于此处所示:
shell> ndb_restore --nodeid=1 --backupid=1 --restore-meta --backup-path=/backups/node_1/BACKUP/BACKUP-1

ndb_restore必须能够联系 Management 服务器;如果需要,请添加--ndb-connectstring选项,以实现此目的。

  • 恢复数据。这需要对原始群集中的每个数据节点执行一次,每次都使用该数据节点的节点 ID。假设最初有 4 个数据节点,则所需的命令集如下所示:
ndb_restore --nodeid=1 --backupid=1 --restore-data --backup-path=/backups/node_1/BACKUP/BACKUP-1 --disable-indexes
ndb_restore --nodeid=2 --backupid=1 --restore-data --backup-path=/backups/node_2/BACKUP/BACKUP-1 --disable-indexes
ndb_restore --nodeid=3 --backupid=1 --restore-data --backup-path=/backups/node_3/BACKUP/BACKUP-1 --disable-indexes
ndb_restore --nodeid=4 --backupid=1 --restore-data --backup-path=/backups/node_4/BACKUP/BACKUP-1 --disable-indexes

这些可以并行运行。

确保根据需要添加--ndb-connectstring选项。

  • 重建索引。这些已被刚刚显示的命令中使用的--disable-indexes选项禁用。重新创建索引可以避免由于恢复在所有点上都不统一而导致的错误。在某些情况下,重建索引也可以提高性能。要重建索引,请在单个节点上执行一次以下命令:
shell> ndb_restore --nodeid=1 --backupid=1 --backup-path=/backups/node_1/BACKUP/BACKUP-1 --rebuild-indexes

如前所述,您可能需要添加--ndb-connectstring选项,以便ndb_restore可以联系 Management 服务器。