Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Backing Up a Source or Replica by Making It Read Only

19.4.1.3 将源或副本设置为只读以进行备份

可以通过获取全局读锁并操作 read_only 系统变量来备份源或副本服务器:

  1. 使服务器变为只读,以便它仅处理检索请求并阻止更新。

  2. 执行备份。

  3. 将服务器恢复到正常的读写状态。

Note

本节中的说明将要备份的服务器置于安全的状态,以便使用从服务器获取数据的备份方法,例如 mysqldump(见 第 6.5.4 节,“mysqldump — 数据库备份程序”)。您不应该尝试使用这些说明来通过直接复制文件来创建二进制备份,因为服务器可能仍然有修改的数据缓存在内存中而没有刷新到磁盘。

以下说明描述了如何对源服务器和副本服务器进行备份。对于这里讨论的两个场景,假设您有以下复制设置:

  • 源服务器 S1

  • 副本服务器 R1,其源服务器为 S1

  • 客户端 C1 连接到 S1

  • 客户端 C2 连接到 R1

在这两个场景中,获取全局读锁和操作 read_only 变量的语句在要备份的服务器上执行,不会传播到该服务器的任何副本。

场景 1:使用只读源服务器备份

将源服务器 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 设置为只读状态,执行以下语句:

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;

在副本恢复到正常操作后,它将再次与源服务器同步,赶上源服务器的二进制日志中的任何未完成的更新。