xre*_*ref 22 mysql replication percona mysql-5.5
我按照本指南在 Percona Server 5.5 上运行了复制,并想知道我是否应该添加read-only=1到我的从属设备my.cnf以使其只读?
该指南为 mysql 表设置复制,以便复制用户,但我主要使用从属来获取 mysqldumps,在紧急情况下将其重新配置为主,所以我认为我们不需要(或应该)启用写入它不断?
Rol*_*DBA 32
当 Slave 为read-only 时,它不是 100% 屏蔽世界。
根据 MySQL 文档 read-only
默认情况下,此变量处于关闭状态。启用后,服务器不允许更新,除非来自具有 SUPER 权限的用户或(在从服务器上)来自从线程执行的更新。在复制设置中,在从服务器上启用 read_only 以确保从服务器仅接受来自主服务器而不是来自客户端的更新会很有用。
因此,任何拥有SUPER 权限的人都可以随意对这样的 Slave 进行读写……
确保所有非特权用户都没有超级特权。
如果你想一口气撤销所有SUPER权限,请在Master和Slave上运行:
UPDATE mysql.user SET super_priv='N' WHERE user<>'root';
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)
参考 Slave,这将保留 SUPER 特权,root并防止非特权进行写入,否则他们将受到限制。
我最近才知道 MySQL 5.7 将引入super_read_only。
这将阻止超级用户,因为 5.7 Docs 说
如果启用了 read_only 系统变量,则服务器仅允许具有 SUPER 权限的用户进行客户端更新。如果还启用了 super_read_only 系统变量,则服务器甚至禁止拥有 SUPER 的用户进行客户端更新。有关只读模式的说明以及有关 read_only 和 super_read_only 如何交互的信息,请参阅 read_only 系统变量的说明。
主服务器上对 super_read_only 的更改不会复制到从服务器。该值可以在独立于主服务器上的设置的从属服务器上设置。
super_read_only 是在 MySQL 5.7.8 中添加的。