MySQL 真假read_only
在主从复制中,为了保护从库不被写入,往往会在从库设置set global read_only=on;
当打开read_only以后,MySQL不允许客户端用户修改任何数据,但除了拥有super权限的用户。也就是说read_only还不算完全地只读,最近差点踩了一个坑,在做迁移的时候,没注意到应用用户居然有all privilege权限,而在迁移过程中都是习惯性地把迁移从库设成read_only。好在及早发现,不然就造成数据双写了。
而需要限制拥有super权限用户写入数据,则需要设置set global super_read_only=on。当打开super_read_only,拥有super权限的用户尝试写入时会遇到以下报错:ERROR 1290 (HY000): The MySQL server is running with the --super-read-only option so it cannot execute this statement
super_read_only是自5.7.8引入的,5.7.8以下版本没有这个参数。另外这个参数可以在线开启或关闭,本人一度记错了是个静态参数。
而super_read_only和read_only有一些相关性,如果开了super_read_only,则read_only也会自动开启;如果关闭了read_only,那么super_read_only也会自动关闭。
而无论是开启哪个read_only,都不妨碍复制线程的正常运行,从库可以正常复制。
还没有评论,来说两句吧...