使用NDB群集复制进行备份并从中还原
本节讨论使用NDB群集复制进行备份并从中还原。我们假定复制服务器已经按照前面所述进行了配置(请参见“准备要复制的NDB群集”以及紧随其后的部分)。完成此操作后,进行备份然后从中还原的过程如下:
可以通过两种不同的方法启动备份。
方法A。此方法要求在开始复制过程之前,先前已在主服务器上启用了集群备份过程。可以通过在的
[mysql_cluster]
部分中包含以下行来完成my.cnf file
,其中management_host
是NDB
主集群的管理服务器的IP地址或主机名,并且port
是管理服务器的端口号:ndb-connectstring=management_host[:port]
注意
仅当未使用默认端口(1186)时才需要指定端口号。有关NDB群集中的端口和端口分配的更多信息,请参见“ NDB群集的初始配置”。
在这种情况下,可以通过在复制主数据库上执行以下语句来启动备份:
shellM>
ndb_mgm -e "START BACKUP"方法B。如果
my.cnf
文件未指定在何处查找管理主机,则可以通过将此信息NDB
作为START BACKUP
命令的一部分传递给管理客户端来启动备份过程。可以按照此处所示进行操作,其中management_host
和port
是管理服务器的主机名和端口号:shellM>
ndb_mgm management_host:port -e "START BACKUP"在前面概述的场景中(请参见“准备要复制的NDB群集”),将按以下方式执行:
shellM>
ndb_mgm rep-master:1186 -e "START BACKUP"
将群集备份文件复制到联机的从属服务器。在主群集上运行ndbd进程的每个系统上都将具有群集备份文件,并且所有这些文件都必须复制到从属服务器上,以确保成功还原。可以将备份文件复制到从属管理主机所在计算机上的任何目录中,只要MySQL和NDB二进制文件对该目录具有读取权限即可。在这种情况下,我们将假定这些文件已被复制到directory中
/var/BACKUPS/BACKUP-1
。从集群不必具有与主集群相同数量的ndbd进程(数据节点);但是,强烈建议此数字相同。这是必要的,从与启动
--skip-slave-start
选项,以防止复制过程中过早启动。在从属群集上创建要复制到从属群集的主群集上存在的任何数据库。
重要
甲
CREATE DATABASE
(或CREATE SCHEMA
相应于要复制的每个数据库)语句必须从集群中的每个节点SQL上执行。在MySQL Monitor中使用以下语句重置从集群:
mysqlS>
RESET SLAVE ;现在,您可以依次使用ndb_restore命令对每个备份文件在复制从属服务器上启动群集还原过程。对于其中的第一个,有必要包括
-m
还原集群元数据的选项:shellS>
ndb_restore -c slave_host:port -n node-id \ -b backup-id -m -r dirdir
是复制从属服务器上备份文件所在目录的路径。对于ndb_restore对应于剩余的备份文件的命令时,-m
应选择不使用。要从具有四个数据节点(如“ NDB群集复制”中的图所示)的主群集中还原,备份文件已复制到该目录中
/var/BACKUPS/BACKUP-1
,在从属群集上执行的命令顺序应正确无误像这样:shellS>
ndb_restore -c rep-slave:1186 -n 2 -b 1 -m \ -r ./var/BACKUPS/BACKUP-1 shellS>ndb_restore -c rep-slave:1186 -n 3 -b 1 \ -r ./var/BACKUPS/BACKUP-1 shellS>ndb_restore -c rep-slave:1186 -n 4 -b 1 \ -r ./var/BACKUPS/BACKUP-1 shellS>ndb_restore -c rep-slave:1186 -n 5 -b 1 -e \ -r ./var/BACKUPS/BACKUP-1重要
在此示例中,需要在ndb_restore的最终调用中使用
-e
(或--restore-epoch
)选项,以便将纪元写入从属服务器。没有此信息,从站将无法与主站正确同步。(请参见“ndb_restore-还原NDB群集备份”。)mysql.ndb_apply_status
现在,您需要
ndb_apply_status
从属服务器上的表中获取最新的纪元(如“使用NDB群集复制实现故障转移”中所述):mysqlS>
SELECT @latest:=MAX(epoch)FROM mysql.ndb_apply_status;使用
@latest
上一步中获得的纪元值,您可以使用此处显示的查询从主表@pos
中获取正确的二进制日志文件中的正确起始位置:@file
mysql.ndb_binlog_index
mysqlM>
SELECT -> @file:=SUBSTRING_INDEX(File , '/', -1), -> @pos:=Position ->FROM mysql.ndb_binlog_index ->WHERE epoch >= @latest ->ORDER BY epochASC LIMIT 1;如果当前没有复制流量,则可以通过
SHOW MASTER STATUS
在主服务器上运行并使用Position
名称后缀为该File
列中所有文件的最大值的文件的列中的值来获取此信息。但是,在这种情况下,您必须确定它并在下一步中手动或通过使用脚本解析输出来提供它。使用上一步中获得的值,您现在可以
CHANGE MASTER TO
在从站的mysql客户端中发出适当的语句:mysqlS>
CHANGE MASTER TO ->MASTER_LOG_FILE ='@file', ->MASTER_LOG_POS =@pos;现在,从服务器从哪个点“知道”从哪个二进制日志文件开始从主服务器读取数据,您可以使从服务器开始使用以下标准MySQL语句进行复制:
mysqlS>
START SLAVE ;
要在第二个复制通道上执行备份和还原,只需要重复这些步骤,就可以用辅助主服务器和从属服务器的主机名和ID替换主主服务器和从属复制服务器的主机名和ID,并运行前面的命令。关于他们的声明。
有关执行群集备份和从备份还原群集的更多信息,请参见“ NDB群集的在线备份”。