文档首页
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 参考手册  /  ...  /  通过将源或副本设为只读来进行备份

19.4.1.3 通过将源或副本设为只读来进行备份

可以通过获取全局读锁并操作 read_only 系统变量来更改要备份的服务器的只读状态,从而备份复制设置中的源或副本服务器。

  1. 将服务器设为只读,以便它只处理检索并阻止更新。

  2. 执行备份。

  3. 将服务器更改回其正常的读写状态。

注意

本节中的说明将要备份的服务器置于一种状态,该状态对于从服务器获取数据的备份方法是安全的,例如 mysqldump(参见 第 6.5.4 节,“mysqldump — A Database Backup Program”)。不应尝试使用这些说明通过直接复制文件来创建二进制备份,因为服务器可能仍会在内存中缓存已修改的数据,而不会刷新到磁盘。

以下说明描述了如何在源和副本上执行此操作。对于此处讨论的两种情况,假设您有以下复制设置

  • 源服务器 S1

  • 以 S1 作为其源的副本服务器 R1

  • 连接到 S1 的客户端 C1

  • 连接到 R1 的客户端 C2

在这两种情况下,获取全局读锁并操作 read_only 变量的语句是在要备份的服务器上执行的,不会传播到该服务器的任何副本。

情况 1:使用只读源进行备份

通过在 S1 上执行以下语句,将源 S1 置于只读状态

mysql> FLUSH TABLES WITH READ LOCK;
mysql> SET GLOBAL read_only = ON;

当 S1 处于只读状态时,以下属性为真

  • 由于服务器处于只读模式,因此 C1 发送到 S1 的更新请求将被阻止。

  • C1 发送到 S1 的查询结果请求将成功。

  • 在 S1 上进行备份是安全的。

  • 在 R1 上进行备份是不安全的。此服务器仍在运行,并且可能正在处理来自客户端 C2 的二进制日志或更新请求。

当 S1 处于只读状态时,执行备份。例如,可以使用 mysqldump

完成在 S1 上的备份操作后,通过执行以下语句将 S1 恢复到其正常运行状态

mysql> SET GLOBAL read_only = OFF;
mysql> UNLOCK TABLES;

尽管在 S1 上执行备份是安全的(就备份而言),但对于性能来说它不是最佳的,因为 S1 的客户端被阻止执行更新。

此策略适用于在复制设置中备份源,但也可用于非复制设置中的单个服务器。

情况 2:使用只读副本进行备份

通过在 R1 上执行以下语句,将副本 R1 置于只读状态

mysql> FLUSH TABLES WITH READ LOCK;
mysql> SET GLOBAL read_only = ON;

当 R1 处于只读状态时,以下属性为真

  • 源 S1 继续运行,因此在源上进行备份是不安全的。

  • 副本 R1 已停止,因此在副本 R1 上进行备份是安全的。

这些特性为一个流行的备份场景提供了基础:让一个副本长时间忙于执行备份不会有问题,因为它不会影响整个网络,并且系统在备份过程中仍在运行。特别是,客户端仍然可以在源服务器上执行更新,源服务器不受副本上的备份活动影响。

在 R1 只读的情况下,执行备份。例如,您可以使用 mysqldump

在 R1 上的备份操作完成后,通过执行以下语句将 R1 恢复到其正常运行状态

mysql> SET GLOBAL read_only = OFF;
mysql> UNLOCK TABLES;

副本恢复到正常运行后,它将再次与源同步,以追赶源二进制日志中的任何未完成更新。