Mysql复制:slave不是只读的

使用主/从数据库scheme设置mysql复制后,我注意到从数据库服务器不是只读的。 之后,我在/etc/my.cnf文件中手动configuration了它。

我只是不明白:是不是默认的行为,奴隶总是运行在只读模式,或者应该总是手工configuration?

在read_only模式下没有slave是很常见的。

事实上,如果你不自己设置,那么它永远不会启用..

一个很好的问题是,为什么你真的想要设置它?

你想保护错误吗? 或错误使我的pipe理员用户? 或应用程序?
考虑到许多pipe理员使用MySQL作为根,反正在这里的保护?
你不能像你想象的那样完全保护你的数据(因为无论如何,一切都复制到了奴隶中)

你知道有超级特权和复制线程的用户不遵守read_only?

用户和权限的强大结构化方法是处理复制问题的正确方法,而不是从属设备上的read_onlyconfiguration

在我的诚恳的意见,它实际上不保护非常…或有用的除了阻止一些用户不写…(在生产系统上 – 不应该发生)

例如,在Mysql-Multi-Master(read_only是由脚本设置的)这在理论上只是简单地决定哪个服务器是主 – 主configuration中的“真主”。

总而言之。忘掉read_only(它真的没有必要,也许不会保护你的想象)

不,这不是默认的行为,是的,如果你想奴隶只读,你需要“手工”(或脚本)。

原因主要是因为它是如何开始的,而且从那以后没有改变过。 但是有很多方法可以实现这种行为,例如,如果你的从站有一些你的主站没有的表(比如报告汇总表)。 或者,如果你想运行一个ALTER,你可以先在你的slave上运行它,然后在master上运行它,以免影响live站点。

我认为只读模式是每个用户的基础,而不是全局的奴隶所以请确保你没有复制的用户(数据库'mysql'),如果有必要创build用户只有用法授予选项 – 这样的用户有只读。

虽然我们的许多奴隶被设置为read_only,但其中有一些不是。

在这些情况下,通常是因为我们在这些服务器上放置了其他开发/暂存器/报告数据库。 在这些情况下,用户只被授予对主数据库的SELECT权限,但对辅助数据库有SELECT / UPDATE权限。

而且,如果使用多主复制,默认情况下将从属设备设置为read_only将是一个严重的问题。 🙂