20.16 特殊备份类型的选项

这些选项用于备份在复制中扮演特定角色的数据库服务器,或者包含在备份时需要特别小心的某些类型的数据。

  • --slave-info

    备份副本服务器时,此选项会捕获设置相同副本服务器所需的信息。meta/ibbackup_slave_info 它在备份目录中创建一个文件,其中包含一个CHANGE MASTER带有二进制日志位置和源服务器二进制日志文件名称的语句。此信息也打印在 mysqlbackup输出中。要为此源设置一个新的副本,在另一台服务器上恢复备份数据,在备份数据上启动一个副本服务器,并发出一个CHANGE MASTER带有保存在 ibbackup_slave_info文件中的二进制日志位置的命令。请参见 第 8.1 节 “设置新副本”获取说明。

    笔记
    • 仅在备份副本服务器时使用此选项。在源服务器或非复制服务器上使用时,其行为未定义。

    • 该选项与选项不兼容 --no-locking;同时使用这两个选项将使 mysqlbackup抛出错误。

    • 此选项与选项不兼容 --only-innodb

    • 对于副本服务器的 TTS--slave-info备份,使用该选项 backup_gtid_executed.sql 生成文件并将其包含在备份中。

  • --safe-slave-backup-timeout=SECONDS

    对于 MySQL Enterprise Backup 8.0.16 及更高版本:对于复制设置,该选项指定时间(以秒为单位) mysqlbackup将等待 Slave_open_temp_tables变为0(当没有打开临时表时为真)以完成备份副本服务器通过断言读锁并复制所有非 InnoDB 表。如果等待时间超过选项指定的时间, mysqlbackup超时并抛出错误。等待是为了防止 mysqlbackup在临时表仍处于打开状态时完成副本备份。有关mysqlbackup如何处理副本服务器上的临时表 的详细信息,请参阅副本上的临时表中的描述。

    对于 MySQL Enterprise Backup 8.0.15 及更早版本:对于基于语句的复制 (SBR) 或基于混合的复制设置,该选项指定mysqlbackup将等待 Slave_open_temp_tables变为0的时间(以秒为单位) (当没有打开的临时表)通过断言全局读锁并复制所有非 InnoDB 表来完成副本服务器的备份。如果等待时间超过选项指定的时间, mysqlbackup 超时并抛出错误。等待是为了防止 mysqlbackup在临时表仍处于打开状态时完成副本备份。有关mysqlbackup如何处理副本服务器上的临时表 的详细信息,请参阅副本上的临时表中的描述。

    此外,mysqlbackup还在副本备份开始时运行初始检查,以查看是否 Slave_open_temp_tables=0 在 设置的持续时间内变为真 --safe-slave-backup-timeout。如果没有,mysqlbackup认为在备份完成之前,一些临时表很可能在超过超时限制后仍保持打开状态;mysqlbackup然后抛出一个错误,而不是继续备份。发生这种情况时,您可以使用更高的 值重新启动备份--safe-slave-backup-timeout,或者在使用较少的临时表时重试。

    默认值:300

    警告

    此值的正确设置取决于用例,并且根据情况可能会有很大差异。将此选项的值设置得太高或太低都会对备份操作的性能产生不利影响:

    • 太高:如果您需要等待很长时间才能没有更多的临时表,则可能是您的数据库的更改率非常高,这意味着要包含在备份中的重做日志数据量将很大,备份的恢复时间会很长。在这种情况下,最好让 mysqlbackup超时然后重新启动备份操作,因此表以其最终状态被复制。因此,为选项设置高超时值没有帮助。作为一个非常普遍的经验法则:即使对于使用许多现代表的繁忙数据库,也不要将值设置为超过几个小时。

    • 太低:将等待时间值设置得太低会使备份过程很容易超时,并且当发生这种情况时,必须重新启动该过程。随着重启的重复循环,备份可能需要很长时间才能完成,用于失败备份的资源将被浪费。作为一个非常普遍的经验法则,不要将超时设置为低于默认值 300 秒。

    即使基于行的复制 (RBR) 设置(临时表未复制到副本)不存在上述临时表问题,任何副本备份仍会等待临时表全部关闭,如上所述,因为复制模式可能随时从 RBR 切换到基于语句的复制 (SBR) 或混合模式复制。确定副本没有发生 SBR 的用户可以设置 --safe-slave-backup-timeout=0mysqlbackup在完成备份之前不会检查任何打开的临时表。

  • --suspend-at-end

    当备份过程接近结束时, 此选项暂停mysqlbackup命令。它会在备份日志组主目录中创建一个名为的文件 ibbackup_suspended,并等到您删除该文件后再继续。此选项可用于通过自定义脚本自定义非 InnoDB 文件的锁定行为和备份。

    对于 MySQL Enterprise Backup 8.0.16 及更高版本:所有非 InnoDB 表在挂起之前都被锁定,将它们置于只读状态,除非您使用 --no-locking. 该 --only-innodb选项还可以防止锁定步骤。您还可以使用 --only-innodb--suspend-at-end来仅备份某些 InnoDB 表。

    对于 MySQL Enterprise Backup 8.0.15 及更早版本:所有表在挂起前都被锁定,将数据库置于只读状态,除非您使用 --no-locking. 该 --only-innodb选项还可以防止锁定步骤。因为在繁忙的服务器上锁定所有表可能会出现问题,所以您可以使用--only-innodb--suspend-at-end来仅备份某些 InnoDB 表。

  • --exec-when-locked=" ..." utility arg1 arg2

    命令行格式 --exec-when-locked="utility arg1 arg2 ..."
    类型 细绳

    对于 MySQL Enterprise Backup 8.0.16 及更高版本:utility当所有非 InnoDB 表在备份操作接近尾声时被锁定时执行 指定

    对于 MySQL Enterprise Backup 8.0.15 及更早版本:utility当所有表在备份操作接近尾声时被锁定时执行 指定

    您可以使用此选项运行一个脚本来备份任何未包含在常规备份中的信息。例如,使用 --exec-when-locked,您可以使用 mysqldump备份来自 MEMORY 存储引擎的表,这些表不在磁盘上。

    在运行mysqlbackup 之前设置要在脚本中使用的任何变量。在以下示例中,BACKUP_DIR环境变量设置为指向当前备份目录(引号用于 , 的参数 --exec-when-locked以防止变量过早扩展 BACKUP_DIR):

    在 Unix 或 Linux 系统上:

    export BACKUP_DIR=path_to_backupdir
    mysqlbackup --exec-when-locked="mysqldump mydb t1 > $BACKUP_DIR/t1.sql" other_options mysqlbackup_command

    或者在 Windows 系统上:

    set BACKUP_DIR=path_to_backupdir
    mysqlbackup --exec-when-locked="mysqldump mydb t1 > %BACKUP_DIR%/t1.sql" other_options mysqlbackup_command

    如果该实用程序无法执行或返回非零退出状态,则整个备份过程将被取消。如果您还使用该--suspend-at-end选项,则 --exec-when-locked在解除暂停后执行由指定的实用程序。