Documentation Home

18.5.22.2 恢复到不同数量的数据节点

可以从 NDB 备份恢复到具有与从中获取备份的原始数据节点数量不同的数据节点的集群。以下两节分别讨论目标集群的数据节点数少于或多于备份源的情况。

18.5.22.2.1 恢复到比原来更少的节点

如果较大的节点数是较小的节点数的偶数倍,则可以恢复到数据节点数少于原始数据节点的集群。在以下示例中,我们使用在具有四个数据节点的集群上对具有两个数据节点的集群进行的备份。

  1. 原始集群的管理服务器位于 host 上host10。原始集群有四个数据节点,节点 ID 和主机名显示在管理服务器文件的以下摘录中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 或等效的启动的。

  2. 以正常方式执行备份。有关如何执行此操作的信息, 请参阅 第 18.6.8.2 节,“使用 NDB Cluster Management Client 创建备份” 。

  3. 这里列出了备份在每个数据节点上创建的文件,其中N是节点ID,B是备份ID。

    • BACKUP-B-0.N.Data

    • BACKUP-B.N.ctl

    • BACKUP-B.N.log

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

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

  4. 目标集群的管理服务器在主机上 host20,目标有两个数据节点,显示了节点 ID 和主机名,来自管理服务器config.ini文件host20

    [ndbd]
    NodeId=3
    hostname=host3
    
    [ndbd]
    NodeId=5
    hostname=host5

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

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

    • BACKUP-1-0.2.Data

    • BACKUP-1.2.ctl

    • BACKUP-1.2.log

    • BACKUP-1-0.4.Data

    • BACKUP-1.4.ctl

    • BACKUP-1.4.log

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

    • BACKUP-1-0.6.Data

    • BACKUP-1.6.ctl

    • BACKUP-1.6.log

    • BACKUP-1-0.8.Data

    • BACKUP-1.8.ctl

    • BACKUP-1.8.log

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

  6. 在两个目标数据节点中的每一个上,您都必须从两组备份中恢复。首先,通过调用ndb_restore on 将节点 2 和 4 的备份恢复到节点 3, host3如下所示:

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

    然后通过调用ndb_restore on 将节点 6 和 8 的备份恢复到节点 5 host5,如下所示:

    $> ndb_restore -c host20 --nodeid=6 --backupid=1 --restore-data --backup-path=/BACKUP-1
    
    $> ndb_restore -c host20 --nodeid=8 --backupid=1 --restore-data --backup-path=/BACKUP-1
18.5.22.2.2 恢复到比原来更多的节点

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

笔记

当更改每个节点组的 LCP 线程或 LQH 线程总数时,您应该从使用mysqldump创建的备份重新创建模式。

  1. 创建数据的备份。您可以通过从系统 shell 调用ndb_mgm 客户端START BACKUP命令来执行此操作,如下所示:

    $> ndb_mgm -e "START BACKUP 1"

    这假定所需的备份 ID 为 1。

  2. 创建模式的备份(另见下文):

    $> mysqldump --no-data --routines --events --triggers --databases > myschema.sql
    重要的

    您不得在第一步和第二步之间进行任何架构更改。

  3. 将上面的备份目录复制到新集群。例如,如果要还原的备份的 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

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

不需要从一个或多个特定节点恢复备份。

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

  1. 还原架构使用mysql客户端导入架构文件,如下所示:

    $> mysql < myschema.sql
  2. 恢复数据。以下命令可以并行运行:

    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_restore --nodeid=5 --backupid=1 --restore-data --backup-path=/backups/node_5/BACKUP/BACKUP-1 --disable-indexes
    ndb_restore --nodeid=6 --backupid=1 --restore-data --backup-path=/backups/node_6/BACKUP/BACKUP-1 --disable-indexes
    ndb_restore --nodeid=7 --backupid=1 --restore-data --backup-path=/backups/node_7/BACKUP/BACKUP-1 --disable-indexes
    ndb_restore --nodeid=8 --backupid=1 --restore-data --backup-path=/backups/node_8/BACKUP/BACKUP-1 --disable-indexes

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

    例如,如果您在 3. 中将备份从 节点 ID 为 1 和 2 的”节点复制到节点 ID 为 1 的节点,则您应该在 具有 的 新节点上执行两次ndb_restore调用1 作为其节点 ID。 --nodeid=1--nodeid=2

  3. 重建索引。这些已被 --disable-indexes 刚才显示的命令中使用的选项禁用。重新创建索引可以避免由于恢复在所有点上都不一致而导致的错误。在某些情况下,重建索引还可以提高性能。要重建索引,请在单个节点上执行一次以下命令:

    $> ndb_restore --nodeid=1 --backupid=1 --backup-path=/backups/node_1/BACKUP/BACKUP-1 --rebuild-indexes
重要的

您应该知道,每个表中支持的分区数取决于集群中数据节点、节点组和 LDM 线程的数量。在其他条件(例如 、 MaxNoOfExecutionThreadsThreadConfig等 的值NoOfReplicas)相同的情况下,具有(例如)两个数据节点的集群比具有八个数据节点的集群支持更少的分区。这意味着使用 ndb_restore --restore-meta来恢复模式并不总是有效,因为这会恢复给定的表,其分区数与原始表中的分区数相同;从由mysqldump — 如前所示的示例 — 当恢复到具有比原始集群中使用的数据节点和/或 LDM 线程更少的集群时。

在恢复到较小的集群时支持较少的分区也意味着每个表的最大行数较低。