资讯专栏INFORMATION COLUMN

mysql 只读模式详解

netmou / 568人阅读

摘要:为了保证主从同步可以一直进行,在库上要保证具有权限的等用户只能在本地登录,不会发生数据变化,其他远程连接的应用用户只按需分配为等权限,保证没有权限,则只需要将设定模式,即可保证主从同步,又可以实现从库只读。

1、设置只读模式(此中模式连super都不能进行写)
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%";

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

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

4、将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 statusG 命令查看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查询操作都是可以正常进行的

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/47162.html

相关文章

  • 可能是最漂亮的Spring事务管理详解

    摘要:事务隔离级别定义了一个事务可能受其他并发事务影响的程度我们先来看一下并发事务带来的问题,然后再来介绍一下接口中定义了五个表示隔离级别的常量。 Java面试通关手册(Java学习指南):https://github.com/Snailclimb/Java_Guide 微信阅读地址链接:可能是最漂亮的Spring事务管理详解 事务概念回顾 什么是事务? 事务是逻辑上的一组操作,要么都执行,...

    邹立鹏 评论0 收藏0
  • 数据库分片(Database Sharding)详解

    摘要:基于键的分片添加描述为了确保数据记录以正确的方式被放置在正确的分片中,哈希函数中输入的值都应该来自同一列。当您开始重新平衡数据时,新旧哈希函数都不会有效。 本文由云+社区发表作者:腾讯云数据库 showImg(https://segmentfault.com/img/remote/1460000018214430?w=554&h=409); Introduction 导言 任何看到显...

    Honwhy 评论0 收藏0
  • MySQL Explain详解

    摘要:因为只有一行,所以优化器的其余部分可以将此行中列的值视为常量。将包含已使用的时间最长的关键部分。要想强制使用或忽视列中的索引,在查询中使用或者。 MySQL Explain详解 简介 执行计划(query Execution plan) 语法 explain select * from table explain 中的列 expain出来的信息有10列,分别是id,select...

    honmaple 评论0 收藏0
  • 云原生数据库如何打造业务弹性

    摘要:实战阿里云数据库为业务架构变迁做好准备目前,阿里云的数据库形态已经覆盖了互联网中的业务场景。演进路线阿里云上提供了这么多的数据库产品,在实际应用中该如何进行选择呢我们已经为业务的快速发展和更新迭代做好了准备。 摘要: 云计算带来了业务弹性上的极大优势,阿里云数据库高级产品专家时慢从应用架构的变迁,客户实战案例,业务分析等方面详细介绍POLARDB,及如何利用POLARDB设计互联网创新...

    fou7 评论0 收藏0
  • 阿里云腾讯云api

    摘要:创建实列接口名称阿里云腾讯云参数名称类型是否必选描述参数名称必选类型描述是系统规定参数,取值为是公共参数,本接口取值否自动续费标记,可选值为不自动续费自动续费否备库的可用区,默认为,购买主实例时可指定该参数,购买只读实例或者灾备实例时指 创建mysql实列 接口名称:CreateDBInstance 阿里云 腾讯云 参数名称 类型 是否必选 描述 参数...

    Invoker 评论0 收藏0

发表评论

0条评论

netmou

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<