设置mysql数据库为只读_如何设置mysql数据库为只读

直奔主题,mysql设置为只读后,没法增删改。html

设置命令:mysql

mysql>set global read_only=1;    #1是只读,0是读写

sql

mysql> show global variables like "%read_only%";数据库

设置mysql数据库为只读_如何设置mysql数据库为只读_第1张图片

如下是相关说明:flex

一、对于数据库读写状态,主要靠 “read_only”全局参数来设定;spa

二、默认状况下,数据库是用于读写操做的,因此read_only参数也是0或faluse状态,这时候不管是本地用户仍是远程访问数据库的用户,均可以进行读写操做;3d

三、如需设置为只读状态,将该read_only参数设置为1或TRUE状态,但设置 read_only=1 状态有两个须要注意的地方:日志

1)read_only=1只读模式,不会影响slave同步复制的功能,因此在MySQL slave库中设定了read_only=1后,经过 show slave status\G ,命令查看salve状态,能够看到salve仍然会读取master上的日志,而且在slave库中应用日志,保证主从数据库同步一致;

2)read_only=1只读模式,能够限定普通用户进行数据修改的操做,但不会限定具备super权限的用户的数据修改操做;在MySQL中设置read_only=1后,普通的应用用户进行insert、update、delete等会产生数据变化的DML操做时,都会报出数据库处于只读模式不能发生数据变化的错误,但具备super权限的用户,例如在本地或远程经过root用户登陆到数据库,仍是能够进行数据变化的DML操做;htm

那么super用户怎么控制读写?blog

一、为了确保全部用户,包括具备super权限的用户也不能进行读写操做,就须要执行给全部的表加读锁的命令 “flush tables with read lock;”这样使用具备super权限的用户登陆数据库,想要发生数据变化的操做时,也会提示表被锁定不能修改的报错。

1)这样经过 设置“read_only=1”和“flush tables with read lock;”两条命令,就能够确保数据库处于只读模式,不会发生任何数据改变。

2)但同时因为加表锁的命令对数据库表限定很是严格,若是在slave从库上执行这个命令后,slave库能够从master读取binlog日志,但不可以应用日志,slave库不能发生数据改变,固然也不可以实现主从同步了,这时若是使用 “unlock tables;”解除全局的表读锁,slave就会应用从master读取到的binlog日志,继续保证主从库数据库一致同步。

二、为了保证主从同步能够一直进行,在slave库上要保证具备super权限的root等用户只能在本地登陆,不会发生数据变化,其余远程链接的应用用户只按需分配为select,insert,update,delete等权限,保证没有super权限,则只须要将salve设定“read_only=1”模式,便可保证主从同步,又能够实现从库只读。

三、设定“read_only=1”只读模式开启的解锁命令为设定“read_only=0”;设定全局锁“flush tables with read lock;”,对应的解锁模式命令为:“unlock tables;”.

四、固然设定了read_only=1后,全部的select查询操做都是能够正常进行的。

你可能感兴趣的:(设置mysql数据库为只读)