Mysql的read_only 只读属性说明 (运维笔记)
在MySQL数据库中,在进行数据迁移和从库只读状态设置时,都会涉及到只读状态和Master-Slave主从关系设置, 以下针对real_only只读属性做些笔记记录:
1) 对于MySQL单实例数据库和master库,如果需要设置为只读状态,需要进行如下操作和设置:
将MySQL设置为只读状态的命令(可以登录mysql执行下面命令, 或者在my.cnf配置文件中添加"read_only=1",然后重启mysql服务):
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;
2) 对于需要保证master-slave主从同步的salve库
将slave从库设置为只读状态,需要执行的命令为:
mysql> set global read_only=1;
将salve库从只读状态变为读写状态,需要执行的命令是:
mysql> set global read_only=0;
对于Mysql数据库读写状态,主要靠"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操作;(也就是说"real_only"只会禁止普通用户权限的mysql写操作,不能限制super权限用户的写操作; 如果要想连super权限用户的写操作也禁止,就使用"flush tables with read lock;",这样设置也会阻止主从同步复制!)
锁表操作
为了确保所有用户,包括具有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的read_only 只读属性说明 (运维笔记)相关推荐
- 老男孩的linux运维笔记-初级部分内容(一)
############################################################ # # USER YYYY-MM-DD – ACTION # ...
- 老男孩的运维笔记文档-高级部分(系统架构师)列表(三)
############################################################ # # USER YYYY-MM-DD – ACTION # ...
- H5直播站点运维笔记四 压测篇
H5直播站点运维笔记四 压测篇 压测篇 一.测试环境 1.CPU 2.内存 3.操作系统 4.WEB环境 二.优化前压测 三.开启opcache优化 四.laravel 缓存配置/路由/类映射加载优化 ...
- 老男孩的运维笔记文档-中级部分(运维中级)列表(二)
############################################################ # # USER YYYY-MM-DD – ACTION # ...
- 运维笔记--postgresql占用CPU问题定位
运维笔记--postgresql占用CPU问题定位 场景描述: 业务系统访问变慢,登陆服务器查看系统负载并不高,然后查看占用CPU较高的进程,发现是连接数据库的几个进程占用系统资源较多. 处理方式: ...
- mysql 二进制日志变化_MySQL运维之二进制日志
MySQL二进制日志里保存会造成或可能造成数据变化的SQL语句.通过二进制日志可以完成如实时异地容灾备份.读写分离.数据恢复等功能.下面,我们一起来看看Mysql二进制日志. 开启bin-log日志 ...
- bind blz mysql_MySQ DBAL重点剖析课程 企业级MySQL系统安全与DBA运维日常事务管理 运维DBA必备宝典...
MySQ DBAL重点剖析课程 企业级MySQL系统安全与DBA运维日常事务管理 运维DBA必备宝典 本资源由JAD资源网收集整理丨www.jiuandun.com 资源简介 MySQ DBAL重点剖 ...
- 本周四晚8点直播预告丨探秘MySQL极限,解锁核心运维关卡
点击上方蓝色字关注我们~ 探秘MySQL极限,解锁核心运维关卡--3月3日20:00 根据 DB-engine 流行度显示,MySQL 是最流行的开源关系型数据库管理系统,在 WEB 应用方面,是最好 ...
- [运维笔记] PowerShell (模块).模块的查找、安装、卸载、更新、保存、发布
[运维笔记] PowerShell (库/模块).库的查找.安装.卸载.更新.保存.发布 作者主页:jcLee95:https://blog.csdn.net/qq_28550263?spm=3001 ...
- [运维笔记] PowerShell (模块).模块清单
[运维笔记] PowerShell (模块).模块清单 作者:jcLee95 目 录 1. 模块清单是什么 2. 如何创建模块清单 3. 模块清单.psd1文件内容解释 4. 某库的模块清单实例 1. ...
最新文章
- 中汽创智科技首席人工智能官丁华杰:AI赋能自动驾驶的几点思考
- 求解一个数的所有约数之积
- 湖南大学计算机系统原理实验,湖南大学-计算机组成原理实验-实验3-bomblab_图文.pdf...
- a标签隐藏真实地址_家庭影院布线非常杂乱应该怎么补救?A/V电缆管理的7个技巧...
- pyqt5子窗口跳出主窗口_弹出式窗口与 可用性,转换和跳出率
- 线性代数的本质笔记-更新ing
- 从310到蚂蚁森林,蚂蚁金服在线图计算的创新与实践
- python入门教授_南开大学教授强力推荐的5本Python入门书籍,附电子版
- 查看linux系统软件各种版本环境
- C语言 - 判断素数的函数
- 广东IPTV机顶盒安装第三方应用
- sqlserver 查询 oracle 语法,Oracle/SQLServer 跨库查询
- Origin作图点太密集处理方法
- 费曼和西蒙的学习方法分享
- Springboot毕设项目基于Java对运动心跳数据分析系统设计与实现455j4(java+VUE+Mybatis+Maven+Mysql)
- onload的具体使用
- 【实用】关于Ubuntu下的对拍程序
- 几种主流快速开发平台选择
- SqlService基础一篇搞定(建库建表、插入数据、修改和删除数据、基础查询、条件查询、模糊查询、聚合函数、分组查询、多表查询)
- android个人记账软件(附上源码)