可以从NDB备份恢复到一个集群,该集群的数据节点数量与备份的原始节点数量不同。以下两个部分分别讨论目标集群的数据节点数量小于或大于备份源的数据节点数量的情况。
您可以恢复到数据节点比原始节点少的集群,前提是较大的节点数是较小节点数的偶数倍。在下面的示例中,我们将从一个具有四个数据节点的集群上备份到一个具有两个数据节点的集群。
原集群的管理服务器在主机上
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
或者是等价的。按照正常方式进行备份。看到“使用NDB集群管理客户端创建备份”章节18.6.8.2,以获取如何做到这一点的信息。
下面列出了备份在每个数据节点上创建的文件
N
节点ID和B
为备份ID。备份,
B
0。N
. data备份,
B
.N
.ctl备份,
B
.N
. log
这些文件在
BackupDataDir
/ /备份——备份
,在每个数据节点上。对于本例的其余部分,我们假设备份ID为1。B
是否所有这些文件都可用,以便以后复制到新的数据节点(通过这些节点可以在数据节点的本地文件系统上访问它们)ndb_restore).将它们全部复制到一个位置是最简单的;我们认为这就是你所做的。
目标集群的管理服务器在主机上
host20
,目标具有来自管理服务器的两个数据节点,其中显示了节点id和主机名config.ini
上的文件host20
:[ndbd] NodeId=3 hostname=host3 [ndbd] NodeId=5 hostname=host5
每个数据节点处理
host3
而且host5
应该从ndbmtd- c host20
——初始
或者等效的,以便新的(目标)集群从干净的数据节点文件系统开始。将两组不同的备份文件复制到每个目标数据节点。在本例中,将原集群节点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号节点上。在这两个目标数据节点上,您必须从这两组备份中进行恢复。首先,通过调用将备份从节点2和4恢复到节点3ndb_restore在
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
然后通过调用将备份从节点6和8恢复到节点5ndb_restore在
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
指定的节点IDndb_restore命令是原始备份中的节点的命令,而不是要将其恢复到的数据节点的命令。当使用本节介绍的方法进行备份时,ndb_restore连接到管理服务器,获取备份恢复到的集群中的数据节点列表。恢复后的数据按顺序分布,在执行备份时不需要知道或计算目标集群中的节点数。
在更改每个节点组LCP线程或LQH线程的总数时,应该从使用创建的备份重新创建模式, mysqldump.
创建数据的备份.可以通过调用ndb_mgm客户端
开始备份
命令,如下所示:$> ndb_mgm -e "START BACKUP 1"
这假设所需的备份ID为1。
创建模式的备份(参见下面):
$> mysqldump——no-data——例程——事件——触发器——数据库> myschema.sql
重要的在第一步和第二步之间,您不能进行任何模式更改。
将上面的备份目录复制到新的集群。例如,如果您要恢复的备份具有ID 1和
BackupDataDir
=/备份/ node_
,则该节点的备份路径为nodeid
/备份/ node_1 /备份/ BACKUP-1
.在这个目录中有三个文件,如下所示:BACKUP-1-0.1.Data
BACKUP-1.1.ctl
BACKUP-1.1.log
您应该将整个目录复制到新节点。
不需要从某个或多个特定节点恢复备份。
要从刚创建的备份进行恢复,请执行以下步骤:
恢复模式.方法导入模式文件mysql客户端,如下图:
$> mysql < myschema.sql
恢复的数据.以下命令可以并行执行:
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_restore——disable-indexes
添加
——ndb-connectstring
根据需要选择。如果你在3。例如,从”老”节点id为1和2到a的节点”新”节点ID为1的节点,您应该执行两次调用ndb_restore与
——nodeid = 1
而且——nodeid = 2
在以1为节点ID的新节点上。重建索引.这些都被
——disable-indexes
选项在刚才显示的命令中使用。重新创建索引可以避免由于恢复在所有点上都不一致而导致的错误。在某些情况下,重新构建索引还可以提高性能。要重建索引,只需在单个节点上执行以下命令一次:$> ndb_restore——nodeid=1——backupid=1——BACKUP- path=/backups/node_1/BACKUP/BACKUP-1——重建索引
您应该知道,每个表中支持的分区数量取决于集群中的数据节点、节点组和LDM线程的数量。的值等其他条件MaxNoOfExecutionThreads
,ThreadConfig
,NoOfReplicas
例如,具有两个数据节点的集群所支持的分区比具有八个数据节点的集群所支持的分区要少。这意味着使用ndb_restore——restore-meta
恢复模式并不总是有效,因为这将恢复一个具有与原始表相同分区数量的给定表;从写入的备份中恢复模式更安全, mysqldump—如前面所示,当恢复到数据节点、LDM线程或两者都少于原始集群的集群时。
恢复到更小的集群时支持更少的分区也意味着每个表的最大行数更低。