mysql只读模式的设置方法与实验【转】

MySQL数据库中,在进行数据迁移和从库只读状态设置时,都会涉及到只读状态和Master-slave的设置和关系。

经过实际测试,对于MySQL单实例数据库和master库,如果需要设置为只读状态,需要进行如下操作和设置:
      将MySQL设置为只读状态的命令:
# mysql -uroot -p
mysql> show global variables like "%read_only%";
mysql> flush tables with read lock;
mysql> set global read_only=1;
mysql> show global variables like "%read_only%";

将MySQL从只读设置为读写状态的命令:
mysql> unlock tables;
mysql> set global read_only=0;

对于需要保证master-slave主从同步的salve库,如果要设置为只读状态,需要执行的命令为:
mysql> set global read_only=1;

将salve库从只读状态变为读写状态,需要执行的命令是:
mysql> set global read_only=0;

对于数据库读写状态,主要靠 “read_only”全局参数来设定;默认情况下,数据库是用于读写操作的,所以read_only参数也是0或faluse状态,这时候不论是本地用户还是远程访问数据库的用户,都可以进行读写操作;如需设置为只读状态,将该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操作;

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

这样通过 设置“read_only=1”和“flush tables with read lock;”两条命令,就可以确保数据库处于只读模式,不会发生任何数据改变,在MySQL进行数据库迁移时,限定master主库不能有任何数据变化,就可以通过这种方式来设定。

但同时由于加表锁的命令对数据库表限定非常严格,如果再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只读模式的设置方法与实验 - yumushui的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/yumushui/article/details/41645469#

时间: 2024-10-15 08:16:02

mysql只读模式的设置方法与实验【转】的相关文章

【转】mysql只读模式的设置方法与实验

在MySQL数据库中,在进行数据迁移和从库只读状态设置时,都会涉及到只读状态和Master-slave的设置和关系. 经过实际测试,对于MySQL单实例数据库和master库,如果需要设置为只读状态,需要进行如下操作和设置: 将MySQL设置为只读状态的命令: # mysql -uroot -p mysql> show global variables like "%read_only%"; mysql> flush tables with read lock; mysql

MySQL编码设置方法 MySQL编码为utf8设置方法

mysql的默认编码是拉丁,我每次JSP制作网页用insert语句插入数据库时汉字都会显示成问号,安装mysql后,启动服务并登陆,使用show variables命令可查看mysql数据库的默认编码: 由上图可见database和server的字符集使用了latin1编码方式,不支持中文,即存储中文时会出现乱码.以下是命令行修改为utf-8编码的过程,以支持中文. (1)关闭mysql服务 [plain] view plaincopy service mysql stop (2)修改 /etc

mysql的字码设置方法

我是按照这篇文章来的https://www.linuxidc.com/Linux/2016-09/135273.htm 但是看样子觉得https://www.cnblogs.com/xiaoluo501395377/archive/2013/05/14/3077880.html这篇文章也像是靠谱的样子 最后放上我的my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql character

KindEditor 编辑器3.5.1版本只读模式的配置方法

<script>            KE.show({                id : 'content1',                resizeMode : 0,                afterCreate : function(id) {                    KE.toolbar.disable(id, []);                    KE.readonly(id);                    KE.g[id].n

MySQL设置只读模式

常见现象: 运维工作中会经常维护MySQL主从服务器,当然从库我们只是用于读的. 一般权限开通也只授权只读账号,但是有时候维护工作可能不是一个人在做,你不能保证所有都按照这个标准操作. 有同事可能会授权Slave库MySQL账号为all或者select,update,insert,delete.还有一种情况是主从做了对所有数据的同步,在主库上面授权的账号也同步到了从库上面,当然Master账号中肯定会有select,update,insert,delete权限. 存在的问题: 那么问题来了,当运

golang github.com/go-sql-driver/mysql 遇到的数据库,设置库设计不合理的解决方法

golang github.com/go-sql-driver/mysql 遇到的数据库,设置库设计不合理的解决方法,查询中报了以下这个错 Scan error on column index 2: unsupported Scan, storing driver.Value type <nil> 解决方案就是动态的把数据 字段前加一上一个COALESCE SELECT u.id,ta.`title` as `活动名` ,COALESCE(IFNULL(i.name,i.nickname) F

iOS代理模式设置方法

代理模式通常用于解决类似这样的问题:我们通过界面A打开了界面B,但在应用进行的过程中,界面B有时候也需要和A主动联络,比如点击某个按钮时.一个比较好的办法是,让A成为B的代理,这样B就可以在需要的时候给A发送消息了. 代理模式的一个好处是,B实际上不需要了解A的任何事情,只要知道A是自己的代理就可以了.在这种模式下,B依然独立与A,实现了松耦合. 对象A是对象B的代理,对象B需要向A发送消息,设置方法分四步: 1.在对象B的.h中定义一个protocol代理协议,并声明一个协议的属性变量 2.让

mysql 数据库远程访问设置方法

摘自: http://www.iteye.com/topic/418151 mysql数据库远程访问设置方法 1.修改localhost更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改成"%" mysql>use mysql; mysql>update user set host = '%' where user = 'root'; mysql

Windows Server 2003开机自动启动MySQL服务设置方法

Windows Server 2003开机自动启动MySQL服务设置方法 发布时间:2014-12-19 更新时间:2014-12-24 来源:网络 作者:eaglezhong 关键词: 2003 exe 开机 nbsp; 设置方法 &http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   每次开机我都要去点击mysqld-nt.exe执行文件才启动mysql,虽然将创建了mysqld-nt.exe快捷方式到桌面,但还