通过遵循本指南,我已经在Percona Server 5.5上运行了复制,并且想知道是否应该将其添加read-only=1
到从属服务器中my.cnf
以使其只读。
该指南为mysql表设置了复制,以便复制用户,但是我主要是使用从属服务器来获取mysqldumps,在紧急情况下将其重新配置为主服务器,因此我认为我们不需要(或应该)启用写入功能它不断吗?
通过遵循本指南,我已经在Percona Server 5.5上运行了复制,并且想知道是否应该将其添加read-only=1
到从属服务器中my.cnf
以使其只读。
该指南为mysql表设置了复制,以便复制用户,但是我主要是使用从属服务器来获取mysqldumps,在紧急情况下将其重新配置为主服务器,因此我认为我们不需要(或应该)启用写入功能它不断吗?
Answers:
当从属服务器为只读时,它不会100%被屏蔽。
根据MySQL文档 read-only
默认情况下,此变量是关闭的。启用该功能后,服务器不允许进行任何更新,除非具有SUPER特权的用户或(在从属服务器上)从属线程执行的更新。在复制设置中,在从属服务器上启用read_only可能很有用,以确保从属仅接受来自主服务器的更新,而不接受来自客户端的更新。
因此,具有超级权限的任何人都可以随意对这样的从属进行读写...
确保所有非特权用户都没有SUPER特权。
如果要一次性撤消所有SUPER特权,请在“主”和“从”上运行此命令:
UPDATE mysql.user SET super_priv='N' WHERE user<>'root';
FLUSH PRIVILEGES;
参考从站,这将保留SUPER特权以公正,root
并防止非特权用户执行否则将受到限制的写入。
我最近才了解到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。
这里的问题(包括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
。因此,就目前而言,您必须手动进行控制并且要非常小心。
请享用。