MySQL设置只读模式

常见现象
MySQL主从服务器,Slave我们只是用于读操作。
 
一般权限开通也只授权只读账号,但是有时候维护工作可能不是一个人在做,你不能保证其他同事都按照这个标准操作。
 
有同事可能会授权Slave库MySQL账号为all或者select,update,insert,delete。
 
还有一种情况是主从做了对所有数据的同步(包括用户信息),在Master库上面授权的账号也同步到了Slave库上面,当然Master账号中肯定会有select,update,insert,delete权限。
 
存在的问题
如果开发人员程序错误的连接了Mysql把Slave当成了Master等情况,那么就悲催了所有的数据修改就到Slave了,也会直接影响到主从的同步。为了避免上述问题,我们需要给MySQL的Slave设置为只读模式。
 
解决方法
Slave服务器,登入mysql
1.设置普通账号为只读模式
mysql > set global read_only=1;
Query OK, 0 rows affected (0.00 sec)
取消普通账号的只读模式
mysql > set global read_only=0;
Query OK, 0 rows affected (0.00 sec)
2.授权普通MySQL测试账号
格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by “密码”;
mysql > grant select,insert,update,delete on test.* to 'test'@'127.0.0.1' identifi ed by '123456'; 
Query OK, 0 rows affected, 1 warning (0.00 sec)
3.用测试账号登陆进行删除等操作,会提示--read-only错误
MySQL [test]> delete from test where id=14; 
ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement

MySQL [test]> insert test values(1,10,50);
ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement
注意:set global read_only=1,对拥有super权限的账号是不生效的,所以在授权账号的时候尽量避免添加super权限。
 
4.我们在做数据迁移的时候不想发生任何数据的修改,包括super权限修改也要限制。
锁表:
mysql > flush tables with read lock; 
Query OK, 0 rows affected (0.18 sec)
使用root账号测试:
mysql > delete from test where id=1; 
ERROR 1223 (HY000): Can't execute the query because you have a conflicting read lock
解锁测试:
mysql > unlock tables; 
Query OK, 0 rows affected (0.00 sec) 
mysql > delete from test where id=1; 
Query OK, 0 rows affected (0.00 sec)

您可以选择一种方式赞助本站

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: