可以从 NDB 备份恢复到具有与从中获取备份的原始数据节点数量不同的数据节点的集群。以下两节分别讨论目标集群的数据节点数少于或多于备份源的情况。
如果较大的节点数是较小的节点数的偶数倍,则可以恢复到数据节点数少于原始数据节点的集群。在以下示例中,我们使用在具有四个数据节点的集群上对具有两个数据节点的集群进行的备份。
原始集群的管理服务器位于 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
或等效的启动的。以正常方式执行备份。有关如何执行此操作的信息, 请参阅 第 21.6.8.2 节,“使用 NDB Cluster Management Client 创建备份” 。
这里列出了备份在每个数据节点上创建的文件,其中
N
是节点ID,B
是备份ID。BACKUP-
B
-0.N
.DataBACKUP-
B
.N
.ctlBACKUP-
B
.N
.log
这些文件 位于每个数据节点的 , 下。对于此示例的其余部分,我们假设备份 ID 为 1。
BackupDataDir
/BACKUP/BACKUP-
B
让所有这些文件可供以后复制到新的数据节点(在数据节点的本地文件系统上可以通过 ndb_restore访问它们)。将它们全部复制到一个位置是最简单的;我们假设这就是您所做的。
目标集群的管理服务器在主机上
host20
,目标有两个数据节点,显示了节点 ID 和主机名,来自管理服务器config.ini
文件host20
:[ndbd] NodeId=3 hostname=host3 [ndbd] NodeId=5 hostname=host5
每个数据节点进程
host3
都host5
应该以ndbmtd-c host20
--initial
或等效的方式启动,以便新的(目标)集群以干净的数据节点文件系统启动。将两组不同的两个备份文件复制到每个目标数据节点。对于此示例,将原始集群中节点 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 中每个节点上的目录中。在两个目标数据节点中的每一个上,您都必须从两组备份中恢复。首先,通过调用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
为给定的ndb_restore命令 指定的节点 ID 是原始备份中的节点的 ID,而不是要将其还原到的数据节点的 ID。当使用本节中描述的方法执行备份时,ndb_restore 连接到管理服务器并获取备份正在恢复到的集群中的数据节点列表。恢复后的数据进行相应的分布,使得在执行备份时不需要知道或计算目标集群中的节点数。
当更改每个节点组的 LCP 线程或 LQH 线程总数时,您应该从使用mysqldump创建的备份重新创建模式。
创建数据的备份。您可以通过从系统 shell 调用ndb_mgm 客户端
START BACKUP
命令来执行此操作,如下所示:$> ndb_mgm -e "START BACKUP 1"
这假定所需的备份 ID 为 1。
创建模式的备份。在 NDB 7.5.2 及更高版本中,仅当更改每个节点组的 LCP 线程或 LQH 线程总数时才需要执行此步骤。
$> mysqldump --no-data --routines --events --triggers --databases > myschema.sql
重要的NDB
使用ndb_mgm 创建本机备份后,如果您这样做,则在创建模式备份之前不得进行任何模式更改。将备份目录复制到新集群。例如,如果要还原的备份的 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创建了一个单独的模式备份文件,请使用mysql客户端导入此文件,类似于此处显示的内容:
$> mysql < myschema.sql
导入模式文件时,除了显示的内容之外,您可能还需要指定
--user
和--password
选项(可能还有其他选项),以便mysql客户端能够连接到 MySQL 服务器。如果您不需要创建架构文件,则可以使用ndb_restore
--restore-meta
(缩写形式)重新创建架构-m
,类似于此处显示的内容:$> ndb_restore --nodeid=1 --backupid=1 --restore-meta --backup-path=/backups/node_1/BACKUP/BACKUP-1
ndb_restore必须能够联系管理服务器;如果需要并根据需要添加
--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
刚才显示的命令中使用的选项禁用。重新创建索引可以避免由于恢复在所有点上都不一致而导致的错误。在某些情况下,重建索引还可以提高性能。要重建索引,请在单个节点上执行一次以下命令:$> ndb_restore --nodeid=1 --backupid=1 --backup-path=/backups/node_1/BACKUP/BACKUP-1 --rebuild-indexes
如前所述,您可能需要添加该
--ndb-connectstring
选项,以便ndb_restore可以联系管理服务器。