暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

17.3.1.3 Backing Up a Master or Slave by Making It Read Only

原创 由迪 2020-03-06
509

通过获取全局读取锁并操纵read_only 系统变量以更改要备份的服务器的只读状态,可以在复制设置中备份主服务器或从属服务器:

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

执行备份。

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

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

以下说明描述了如何对主服务器和从服务器执行此操作。对于此处讨论的两种情况,假设您具有以下复制设置:

主服务器M1

以M1作为主服务器的从服务器S1

客户端C1连接到M1

客户端C2连接到S1

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

方案1:使用只读母版进行备份

通过在主M1上执行以下语句,将主M1置于只读状态:

mysql> FLUSH TABLES WITH READ LOCK;
mysql> SET GLOBAL read_only = ON;
当M1处于只读状态时,以下属性为true:

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

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

在M1上进行备份是安全的。

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

M1只读时,执行备份。例如,您可以使用mysqldump。

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

mysql> SET GLOBAL read_only = OFF;
mysql> UNLOCK TABLES;
尽管在M1上执行备份是安全的(就备份而言),但这并不是最佳性能,因为M1的客户端被阻止执行更新。

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

方案2:使用只读从站进行备份

通过在从站S1上执行以下语句,将其置于只读状态:

mysql> FLUSH TABLES WITH READ LOCK;
mysql> SET GLOBAL read_only = ON;
当S1处于只读状态时,以下属性为true:

主机M1将继续运行,因此在主机上进行备份是不安全的。

从站S1停止,因此在从站S1上进行备份是安全的。

这些属性为常见的备份方案提供了基础:一个从属服务器忙于执行一段时间备份不是问题,因为它不会影响整个网络,并且系统在备份过程中仍在运行。尤其是,客户端仍可以在主服务器上执行更新,而不受从服务器上备份活动的影响。

当S1只读时,执行备份。例如,您可以使用mysqldump。

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

mysql> SET GLOBAL read_only = OFF;
mysql> UNLOCK TABLES;
从站恢复到正常操作后,它会通过赶上主站二进制日志中所有未完成的更新,再次与主站同步。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论