6.1 设置新副本

MySQL Enterprise Backup 允许您通过备份源并在新的副本服务器上恢复备份来设置副本,而无需停止源。

对于不使用 GTID 的服务器

  1. 对源进行完整备份,然后使用copy-back-and-apply-log 命令等将备份和日志文件还原到新副本上的正确目录并准备数据。

    笔记

    --no-locking 备份服务器时 不要使用该选项,否则您将无法在下面的第 4 步中获得正确的二进制日志位置以初始化副本。

  2. 编辑my.cnf新副本的文件并将skip-slave-startand event_scheduler=off(如果源使用 Event Scheduler)放在该[mysqld]部分下。

  3. 启动新的副本mysqld(版本 >= 5.1)。您会在服务器的输出中看到以下内容:

    …
    InnoDB: Last MySQL binlog file position 0 128760007, file name ./hundin-bin.000006
    …

    虽然Last MySQL binlog file position显示了,但它不一定是备份服务器上最新的二进制日志位置,因为 InnoDB 不存储任何 DDL 操作或对非 InnoDB 表的任何更改的二进制日志位置信息。不要使用此二进制日志位置来初始化副本。下一步解释如何找到要使用的正确二进制日志位置。

  4. 在新副本的数据目录中datadir/meta/backup_variables.txt 查找 文件 。datadir查看文件以检索最新的二进制日志位置和存储在其中的相应日志文件编号:

    binlog_position=hundin-bin.000006:128760128

  5. 使用CHANGE MASTER TOSQL 语句和您在上一步中检索到的信息正确初始化副本:

    CHANGE MASTER TO
    MASTER_LOG_FILE='hundin-bin.000006',
    MASTER_LOG_POS=128760128;
  6. 将从源复制的任何事件的状态设置为SLAVESIDE_DISABLED。例如:

    mysql> UPDATE mysql.event SET status = 'SLAVESIDE_DISABLED';

  7. 删除您在第 2 步中添加到副本文件中的行skip-slave-startevent_scheduler=off条目my.cnf。(您也可以保留该skip-slave-start 条目,但是您将始终需要使用 START SLAVE语句在您重新启动副本服务器时启动复制。)

  8. 重新启动副本服务器。复制开始。

对于使用 GTID 的服务器(MySQL Server 5.6 及更高版本支持;请参阅使用 GTID 设置复制以了解如何使服务器能够使用 GTID)

  1. 对源进行完整备份,然后使用(例如)copy-back-and-apply-log 命令将备份和日志文件还原到启用 GTID 的新副本上的正确目录并准备数据。

  2. 编辑my.cnf新副本的文件并将skip-slave-startand event_scheduler=off(如果源使用 Event Scheduler)放在该[mysqld]部分下。

  3. 启动新的副本服务器。

  4. 使用mysql客户端 连接到副本服务器 。然后,执行以下语句重置二进制日志:

    mysql> RESET MASTER;

    并执行以下语句停止二进制日志记录:

    mysql> SET sql_log_bin=0;

  5. 当备份使用 GTID 功能的服务器时, mysqlbackup会生成一个名为 的文件 backup_gtid_executed.sql,可以在新副本服务器的还原数据目录中找到该文件。该文件包含一条 GTID_PURGED在副本上设置配置选项的 SQL 语句:

    # On a new replica, issue the following command if GTIDs are enabled:
    SET @@GLOBAL.GTID_PURGED='f65db8e2-0e1a-11e5-a980-080027755380:1-3';

    它还包含CHANGE MASTER TO用于初始化副本的注释掉的语句:

    # Use the following command if you want to use the GTID handshake protocol:
    # CHANGE MASTER TO MASTER_AUTO_POSITION = 1;

    取消注释该命令并向其添加任何需要的连接和身份验证参数(例如 、 MASTER_HOSTMASTER_USERMASTER_PASSWORDMASTER_PORT

    # Use the following command if you want to use the GTID handshake protocol:
    CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_USER='muser', MASTER_PASSWORD='mpass', MASTER_PORT=18675, MASTER_AUTO_POSITION = 1;

    用mysql客户端 执行文件

    mysql> source /path-to-backup_gtid_executed.sql/backup_gtid_executed.sql

  6. 将从源复制的任何事件的状态设置为SLAVESIDE_DISABLED。例如:

    mysql> UPDATE mysql.event SET status = 'SLAVESIDE_DISABLED';

  7. 删除您在步骤 2 中添加到副本文件中的skip-slave-start和 条目。(您也可以保留该条目,但是无论何时重新启动副本服务器 ,您都将始终需要使用 START SLAVE语句来启动复制。)event_scheduler=offmy.cnfskip-slave-start

  8. 重新启动副本服务器。复制开始。

有关 GTID 的更多信息,请参阅 GTID 功能