MySQL复制从站是否应该设置为只读?


22

通过遵循本指南,我已经在Percona Server 5.5上运行了复制,并且想知道是否应该将其添加read-only=1到从属服务器中my.cnf以使其只读。

该指南为mysql表设置了复制,以便复制用户,但是我主要是使用从属服务器来获取mysqldumps,在紧急情况下将其重新配置为主服务器,因此我认为我们不需要(或应该)启用写入功能它不断吗?


+1是经常被忽略的提醒,使奴隶为只读。
RolandoMySQLDBA 2012年

Answers:


31

当从属服务器为只读时,它不会100%被屏蔽。

根据MySQL文档 read-only

默认情况下,此变量是关闭的。启用该功能后,服务器不允许进行任何更新,除非具有SUPER特权的用户或(在从属服务器上)从属线程执行的更新。在复制设置中,在从属服务器上启用read_only可能很有用,以确保从属仅接受来自主服务器的更新,而不接受来自客户端的更新。

因此,具有超级权限的任何人都可以随意对这样的从属进行读写...

确保所有非特权用户都没有SUPER特权。

如果要一次性撤消所有SUPER特权,请在“主”和“从”上运行此命令:

UPDATE mysql.user SET super_priv='N' WHERE user<>'root';
FLUSH PRIVILEGES;

参考从站,这将保留SUPER特权以公正,root并防止非特权用户执行否则将受到限制的写入。

更新2015-08-28 17:39 EDT

我最近才了解到MySQL 5.7将引入super_read_only

这将使SUPER用户停止跟踪,因为5.7文档说

如果启用了read_only系统变量,则服务器仅允许具有SUPER特权的用户进行客户端更新。如果还启用了super_read_only系统变量,则服务器甚至禁止具有SUPER用户的客户端更新。有关只读模式的描述以及有关read_only和super_read_only如何交互的信息,请参见read_only系统变量的描述。

主服务器上对super_read_only的更改不会复制到从属服务器。可以在从属服务器上设置该值,而与主服务器上的设置无关。

在MySQL 5.7.8中添加了super_read_only。


1
因此,最佳做法是将奴隶设为只读?
xref 2012年

6
是的,这样做是最佳做法
RolandoMySQLDBA 2012年

1
如何在从站上使用报表数据库,并从操作数据库中将数据与只读选项一起使用?
Geany

3

MySQL复制从站是否应该设置为只读?

是的,您最好运行具有R / O 模式的从属服务器。以前的特权用户无论如何都可以修改此类从站的数据,但后来又获得了R / O限制“旋钮”。

为什么重要–最好写失败而不是后悔写不正确,因为简单的数据堆积或密钥冲突之类的事情会破坏复制(如果再也没有实际的从属),写可能会导致从属不可用。

还有用于编排/负载分配的软件,该软件将考虑它们在池中配置的服务器的R / O状态,以便在这些服务器之间正确地路由请求。

这是安全的。用它。


1

这里的问题(包括MySQL 8.0)是MySQL read_only = ON在执行start slave命令时不会强迫您进行设置。为什么会出问题?因为几乎所有MySQL DBA都在RO上使用其从属服务器,以防止数据损坏,并且始终存在一个dba,该dba意外运行了错误地修改了从属服务器上的数据的SQL或不会更改其conf的应用程序。如果我想在奴隶上写东西,因为它有几个模式,并且我需要在这个模式上写东西,所以read_only命令必须更加智能,让我们来做一个read_only for schema。这对于执行的多主服务器和从服务器可能非常有用Replicate_Ignore_DB。因此,就目前而言,您必须手动进行控制并且要非常小心。

请享用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.