当前位置:   article > 正文

MySQL设置只读模式——锁定所有表(好文章!!)_mysql数据库设置单张表为只读

mysql数据库设置单张表为只读

常见现象

运维工作中会经常维护MySQL主从服务器,当然Slave我们只是用于读操作。

一般权限开通也只授权只读账号,但是有时候维护工作可能不是一个人在做,你不能保证其他同事都按照这个标准操作。

有同事可能会授权Slave库MySQL账号为all或者select,update,insert,delete。还有一种情况是主从做了对所有数据的同步(包括用户信息),在Master库上面授权的账号也同步到了Slave库上面,当然Master账号中肯定会有select,update,insert,delete权限。

存在的问题

那么问题来了,当运维人员或者开发人员程序错误的连接了Mysql把Slave当成了Master等情况,那么就悲催了所有的数据修改就到Slave了,也会直接影响到主从的同步。

为了避免上述问题,我们需要给MySQL的Slave设置为只读模式。

解决方法

演示如下:

  1. mysql> set global read_only=1;
  2. Query OK, 0 rows affected (0.00 sec)
#set global read_only=0 为取消普通账号的只读模式

授权普通MySQL测试账号

  1. mysql> grant select,insert,update,delete on s18.* to 'test'@'127.0.0.1' identified by '123456';
  2. Query OK, 0 rows affected, 1 warning (0.00 sec)

用测试账号登陆进行删除等操作,会提示--read-only错误

  1. mysql> delete from student where sid=14;
  2. ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement
  3. mysql> insert class values(5,三年级十班);
  4. 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权限

那么我们在做数据迁移的时候不想发生任何数据的修改,包括super权限修改也要限制,如下操作:

可以用锁表:

  1. mysql> flush tables with read lock;
  2. Query OK, 0 rows affected (0.18 sec)

使用root账号测试:

  1. mysql> delete from student where sid=13;
  2. ERROR 1223 (HY000): Can't execute the query because you have a conflicting read lock

解锁测试:

  1. mysql> unlock tables;
  2. Query OK, 0 rows affected (0.00 sec)
  3. mysql> delete from student where sid=13;
  4. Query OK, 0 rows affected (0.00 sec)

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/514717
推荐阅读
相关标签
  

闽ICP备14008679号