文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  使用 NDB 集群复制进行 NDB 集群备份

25.7.9 使用 NDB 集群复制进行 NDB 集群备份

本节讨论使用 NDB 集群复制进行备份和从备份还原。我们假设复制服务器已经按照前面所述配置好(参见 第 25.7.5 节,“准备 NDB 集群进行复制”,以及紧随其后的几节)。完成此操作后,进行备份和从备份还原的步骤如下

  1. 可以通过两种不同的方法启动备份。

    • **方法 A。** 此方法要求在启动复制过程之前,在源服务器上预先启用集群备份过程。这可以通过在 my.cnf 文件的 [mysql_cluster] 部分中包含以下行来完成,其中 management_host 是源集群的 NDB 管理服务器的 IP 地址或主机名,port 是管理服务器的端口号

      ndb-connectstring=management_host[:port]
      注意

      仅当不使用默认端口 (1186) 时,才需要指定端口号。有关 NDB 集群中端口和端口分配的更多信息,请参见 第 25.3.3 节,“NDB 集群的初始配置”

      在这种情况下,可以通过在复制源上执行以下语句来启动备份

      shellS> ndb_mgm -e "START BACKUP"
    • **方法 B。** 如果 my.cnf 文件没有指定在哪里找到管理主机,则可以通过将此信息作为 START BACKUP 命令的一部分传递给 NDB 管理客户端来启动备份过程。这可以通过如下所示的方式完成,其中 management_hostport 是管理服务器的主机名和端口号

      shellS> ndb_mgm management_host:port -e "START BACKUP"

      在我们前面概述的场景中(参见 第 25.7.5 节,“准备 NDB 集群进行复制”),这将按如下方式执行

      shellS> ndb_mgm rep-source:1186 -e "START BACKUP"
  2. 将集群备份文件复制到要上线的副本。每个运行源集群的 ndbd 进程的系统上都有集群备份文件,并且必须将 所有 这些文件复制到副本以确保成功还原。备份文件可以复制到副本管理主机所在计算机上的任何目录,只要 MySQL 和 NDB 二进制文件在该目录中具有读取权限即可。在这种情况下,我们假设这些文件已复制到 /var/BACKUPS/BACKUP-1 目录中。

    虽然副本集群不必与源集群具有相同数量的数据节点,但强烈建议此数字相同。 必须 防止在副本服务器启动时启动复制过程。您可以通过使用 --skip-replica-start 启动副本服务器来做到这一点。

  3. 在副本集群上创建源集群上存在且要复制的任何数据库。

    重要

    必须在副本集群中的每个 SQL 节点上执行与要复制的每个数据库相对应的 CREATE DATABASE(或 CREATE SCHEMA)语句。

  4. mysql 客户端中使用以下语句重置副本集群

    mysqlR> RESET REPLICA;
  5. 现在,您可以使用 ndb_restore 命令依次为每个备份文件启动集群还原过程。对于第一个备份文件,需要包含 -m 选项来还原集群元数据,如下所示

    shellR> ndb_restore -c replica_host:port -n node-id \
            -b backup-id -m -r dir

    dir 是备份文件在副本上的放置路径。对于其余备份文件对应的 ndb_restore 命令,不应 使用 -m 选项。

    对于从具有四个数据节点的源集群还原(如 第 25.7 节,“NDB 集群复制” 中的图所示),其中备份文件已复制到 /var/BACKUPS/BACKUP-1 目录中,要在副本上执行的正确命令顺序可能如下所示

    shellR> 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
    重要

    此示例中最后一次调用 ndb_restore 时使用的 -e(或 --restore-epoch)选项是必需的,以确保将纪元写入副本的 mysql.ndb_apply_status 表中。如果没有此信息,副本将无法与源正确同步。(请参见 第 25.5.23 节,“ndb_restore — 还原 NDB 集群备份”。)

  6. 现在,您需要从副本上的 ndb_apply_status 表中获取最新的纪元(如 第 25.7.8 节,“使用 NDB 集群复制实现故障转移” 中所述)

    mysqlR> SELECT @latest:=MAX(epoch)
            FROM mysql.ndb_apply_status;
  7. 使用 @latest 作为上一步中获取的纪元值,您可以从源上的 mysql.ndb_binlog_index 表中获取正确二进制日志文件 @file 中的正确起始位置 @pos。此处显示的查询从逻辑还原位置之前应用的最后一个纪元的 PositionFile 列中获取这些值

    mysqlS> SELECT
         ->     @file:=SUBSTRING_INDEX(File, '/', -1),
         ->     @pos:=Position
         -> FROM mysql.ndb_binlog_index
         -> WHERE epoch > @latest
         -> ORDER BY epoch ASC LIMIT 1;

    如果当前没有复制流量,您可以在源上运行 SHOW BINARY LOG STATUS,并使用输出中 Position 列中显示的值来获取文件名,该文件名的后缀值在 File 列中显示的所有文件中最大。在这种情况下,您必须确定是哪个文件,并在下一步中手动或通过使用脚本解析输出提供该文件名。

  8. 使用上一步中获取的值,您现在可以在副本的 mysql 客户端中发出适当的语句。使用以下 CHANGE REPLICATION SOURCE TO 语句

    mysqlR> CHANGE REPLICATION SOURCE TO
         ->     SOURCE_LOG_FILE='@file',
         ->     SOURCE_LOG_POS=@pos;
  9. 现在副本已经知道从哪个二进制日志文件的哪个点开始读取源数据,您可以使用以下语句使副本开始复制

    mysqlR> START REPLICA;

要在第二个复制通道上执行备份和还原,只需重复这些步骤,将辅助源和副本的主机名和 ID 替换为主源和副本服务器的主机名和 ID(如果适用),并在它们上运行前面的语句即可。

有关执行集群备份和从备份还原集群的更多信息,请参见 第 25.6.8 节,“NDB 集群的在线备份”