6.2 备份和恢复副本数据库

要备份副本数据库,请将 --slave-info选项添加到您的备份命令。

要在副本服务器上恢复备份,请按照第 6.1 节“设置新副本”中概述的相同步骤进行操作。

基于语句的复制 (SBR) 副本上的临时表。  MySQL Enterprise Backup 不包括备份中的临时表。因此,对于基于语句的复制 (SBR) 或基于混合的复制设置(有关详细信息,请参阅 复制格式)中的副本服务器,在备份过程结束时仍打开的任何临时表都将在还原中丢失副本服务器,使副本的复制状态不一致,任何引用临时表的后续复制语句都将失败。为避免此问题,在mysqlbackup的热备份阶段之后复制所有 InnoDB 表,它进入一个循环,其中发生以下情况:

  1. mysqlbackup一直等到复制 SQL 线程关闭了所有临时表。 mysqlbackup通过检查变量 Slave_open_temp_tables 是否具有零值来判断是否属于这种情况。

  2. Slave_open_temp_tables=0 检测到 后 , mysqlbackup停止复制 SQL 线程以防止对副本上的表进行更多更改。

  3. 为了避免竞争条件导致的意外后果,在复制 SQL 线程停止后, mysqlbackup 再次检查是否 Slave_open_temp_tables=0 仍然为真:

    • 如果为真,则 mysqlbackup退出循环并通过断言全局读锁并复制所有非 InnoDB 表来完成备份。

    • 如果不是,则新的临时表刚刚在副本上创建并打开。 mysqlbackup然后重新启动复制 SQL 线程,因此可以在副本服务器上进行更多更新。mysqlbackup 然后回到这个循环的第 1 步

除了上面第(3)步中描述的退出条件(即确实没有更多打开的临时表, mysqlbackup准备完成备份), mysqlbackup在上面的循环中停留太久会超时等待所有要关闭的临时表。mysqlbackup等待超时 的时间由该--safe-slave-backup-timeout选项指定。

此外,mysqlbackup还在副本备份开始时运行初始检查,以查看是否 Slave_open_temp_tables=0 在 设置的持续时间内变为真 --safe-slave-backup-timeout。有关检查的详细信息,请参阅说明 --safe-slave-backup-timeout

请注意,对于基于行的复制 (RBR) 设置,临时表不存在上述问题,临时表不会复制到副本上。确定replica没有发生SBR的用户可以设置 --safe-slave-backup-timeout=0,这样可以避免mysqlbackup进入上述循环。

笔记

请参阅附录 B,MySQL 企业备份的限制中备份副本 时适用 的限制。