本节讨论如何使用NDB集群复制进行备份和恢复。我们假设复制服务器已经按照前面介绍的那样进行了配置(请参见18.6.5节,“为复制准备NDB集群”,以及紧随其后的章节)。完成此操作后,进行备份并从中恢复的过程如下:
有两种不同的方法可以启动备份。
一个方法。此方法要求在启动复制进程之前,源服务器上已经启用了集群备份进程。可以通过在语句中包含以下行来实现这一点
(mysql_cluster)
章节。my.cnf文件
,在那里management_host
的IP地址或主机名NDB
源集群的管理服务器港口
是管理服务器的端口号:ndb-connectstring =management_host[:港口]
请注意仅当默认端口号(1186)未被使用时,才需要指定端口号。看到18.2.3“NDB集群初始配置”,以了解更多关于NDB集群中的端口和端口分配的信息。
壳牌年代> ndb_mgm -e "START BACKUP"
方法B。如果
my.cnf
文件没有指定在哪里查找管理主机,您可以通过将此信息传递给NDB
管理客户端的一部分开始备份
命令。这可以像这里所示的那样完成management_host
而且港口
为管理服务器的主机名和端口号:壳牌年代> ndb_mgmmanagement_host:港口-e "START BACKUP"
在我们前面概述的场景中(参见18.6.5节,“为复制准备NDB集群”),执行如下:
壳牌年代> ndb_mgm rep-source:1186 -e "START BACKUP"
将集群备份文件复制到正在联机的副本。每个系统运行一个ndbd源集群的进程上有集群备份文件所有这些文件中的一部分必须复制到副本以确保成功恢复。备份文件可以复制到副本管理主机所在计算机上的任何目录,只要MySQL和NDB二进制文件在该目录中具有读权限。在本例中,我们假设这些文件已经复制到目录中
/var/BACKUPS/BACKUP-1
。而复制集群的个数不一定相同ndbd进程(数据节点)作为源,强烈建议这个数量相同。它是属性启动副本是必要的
——skip-slave-start
选项,以防止过早启动复制进程。在复制集群上创建源集群上存在且要复制的任何数据库。
方法中的此语句重置副本集群mysql客户:
mysqlR>复位slave;
属性在副本上启动集群恢复过程ndb_restore命令依次为每个备份文件执行。对于第一种情况,有必要包含
- m
选项恢复集群元数据,如下所示:壳牌R> ndb_restore -creplica_host:港口- n节点编号\ - bbackup-id- m - rdir
dir
副本上放置备份文件的目录的路径。为ndb_restore剩余备份文件对应的命令- m
选择应不被使用。对于从具有四个数据节点的源集群(如图中所示)进行恢复18.6节,“NDB集群复制”),其中备份文件已复制至该目录
/var/BACKUPS/BACKUP-1
,在副本上执行的正确命令序列可能如下所示:壳牌R> ndb_restore -c replica-host:1186 -n 2 -b 1 -m \ -r ./var/BACKUPS/BACKUP-1 shellR> ndb_restore -c replica-host:1186 -n 3 -b 1 \ -r ./var/BACKUPS/BACKUP-1 shellR> ndb_restore -c replica-host:1186 -n 4 -b 1 \ -r ./var/BACKUPS/BACKUP-1 shellR> ndb_restore -c replica-host:1186 -n 5 -b 1 -e \ -r ./var/BACKUPS/BACKUP-1 .使用实例
重要的的
- e
(或——restore-epoch
选项的最终调用ndb_restore在本例中,需要确保epoch被写入副本的epochmysql.ndb_apply_status
表格如果没有这些信息,副本就不能正常地与源同步。(见第18.4.22节,“ndb_restore -恢复NDB集群备份”.)对象中获取最近的epoch
ndb_apply_status
表(如中所讨论的18.6.8节,“使用NDB集群复制实现故障转移”):mysqlRSELECT @latest:=MAX(epoch) FROM mysql.ndb_apply_status;
使用
@latest
根据上一步得到的epoch值,可以得到正确的起始位置@pos
在正确的二进制日志文件中@file
从mysql.ndb_binlog_index
使用如下所示的查询在源上的表:mysql年代> SELECT -> @file:=SUBSTRING_INDEX(File, '/', -1), -> @pos:=Position -> FROM mysql。ndb_binlog_index -> WHERE >= @latest -> ORDER BY epoch ASC LIMIT 1;
如果当前没有复制流量,您可以通过运行命令获取此信息
显示主机状态
属性中显示的值位置
中显示的所有文件中后缀值最大的文件的文件
列。在这种情况下,您必须确定这是哪个文件,并在下一步中手动或通过脚本解析输出来提供名称。使用在上一步中获得的值,现在可以发出适当的
将master更改为
语句mysql客户:mysqlR> CHANGE MASTER TO -> MASTER_LOG_FILE='@file', -> MASTER_LOG_POS=@pos;
现在副本知道从哪个二进制日志文件开始从源文件中读取数据,您可以使用以下语句使副本开始复制:
mysqlR>启动从站;
要在第二个复制区域通道上执行备份和恢复,只需重复这些步骤,在适当的情况下用次要源服务器和副本服务器的主机名和id替换主源服务器和副本服务器的主机名和id,并在它们上运行上述语句。
有关执行群集备份和从备份恢复群集的其他信息,请参见18.5.8节“NDB集群在线备份”。