• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 使用NDB群集复制进行备份并从中还原

    本节讨论使用NDB群集复制进行备份并从中还原。我们假定复制服务器已经按照前面所述进行了配置(请参见“准备要复制的NDB群集”以及紧随其后的部分)。完成此操作后,进行备份然后从中还原的过程如下:

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

      • 方法A。此方法要求在开始复制过程之前,先前已在主服务器上启用了集群备份过程。可以通过在的[mysql_cluster]部分中包含以下行来完成my.cnf file,其中management_hostNDB主集群的管理服务器的IP地址或主机名,并且port是管理服务器的端口号:

        ndb-connectstring=management_host[:port]
        
        注意

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

        在这种情况下,可以通过在复制主数据库上执行以下语句来启动备份:

        shellM>ndb_mgm -e "START BACKUP"
        
      • 方法B。如果my.cnf文件未指定在何处查找管理主机,则可以通过将此信息NDB作为START BACKUP命令的一部分传递给管理客户端来启动备份过程。可以按照此处所示进行操作,其中management_hostport是管理服务器的主机名和端口号:

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

        在前面概述的场景中(请参见“准备要复制的NDB群集”),将按以下方式执行:

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

      从集群不必具有与主集群相同数量的ndbd进程(数据节点);但是,强烈建议此数字相同。这必要的,从与启动--skip-slave-start选项,以防止复制过程中过早启动。

    3. 在从属群集上创建要复制到从属群集的主群集上存在的任何数据库。

      重要

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

    4. 在MySQL Monitor中使用以下语句重置从集群:

      mysqlS> RESET SLAVE;
      
    5. 现在,您可以依次使用ndb_restore命令对每个备份文件在复制从属服务器上启动群集还原过程。对于其中的第一个,有必要包括-m还原集群元数据的选项:

      shellS>ndb_restore -c slave_host:port -n node-id \
              -b backup-id -m -r dir
      

      dir是复制从属服务器上备份文件所在目录的路径。对于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

    6. 现在,您需要ndb_apply_status从属服务器上的表中获取最新的纪元(如“使用NDB群集复制实现故障转移”中所述):

      mysqlS> SELECT @latest:=MAX(epoch)
              FROM mysql.ndb_apply_status;
      
    7. 使用@latest上一步中获得的纪元值,您可以使用此处显示的查询从主表@pos中获取正确的二进制日志文件中的正确起始位置:@filemysql.ndb_binlog_index

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

      如果当前没有复制流量,则可以通过SHOW MASTER STATUS在主服务器上运行并使用Position名称后缀为该File列中所有文件的最大值的文件的列中的值来获取此信息。但是,在这种情况下,您必须确定它并在下一步中手动或通过使用脚本解析输出来提供它。

    8. 使用上一步中获得的值,您现在可以CHANGE MASTER TO在从站的mysql客户端中发出适当的语句:

      mysqlS> CHANGE MASTER TO
      ->     MASTER_LOG_FILE='@file',
      ->     MASTER_LOG_POS=@pos;
      
    9. 现在,从服务器从哪个点“知道”从哪个二进制日志文件开始从主服务器读取数据,您可以使从服务器开始使用以下标准MySQL语句进行复制:

      mysqlS> START SLAVE;
      

    要在第二个复制通道上执行备份和还原,只需要重复这些步骤,就可以用辅助主服务器和从属服务器的主机名和ID替换主主服务器和从属复制服务器的主机名和ID,并运行前面的命令。关于他们的声明。

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