MySQL全局锁库锁表「建议收藏」

MySQL全局锁库锁表

大家好,又见面了,我是全栈君。

1、全局读锁定:

FLUSH TABLES WITH READ LOCK ;

执行了命令之后所有库所有表都被锁定只读,一般用在数据库联机备份,这个时候数据库的写操作将被阻塞,读操作顺利进行。

解锁:

UNLOCK TABLES ;

2、全局表级别锁定:

LOCK TABLES tbl_name ; #不影响其他表的写操作

解锁也是:

UNLOCK TABLES ;

这两个语句在执行的时候都需要注意个特点,就是隐式提交的语句,在退出mysql终端的时候都会隐式的执行unlock tables,也就是如果要让表锁定生效就必须一直保持对话。

read-lock:  允许其他并发的读请求,但阻塞写请求,即可以同时读,但不允许任何写。也叫共享锁
write-lock: 不允许其他并发的读和写请求,是排他的(exclusive)。也叫独占锁

设置MySQL为只读模式

在MySQL数据库中,在进行数据迁移和从库只读状态设置时,都会涉及到只读状态和Master-slave的设置和关系。
对于MySQL单实例数据库和master库,如果需要设置为只读状态,需要进行如下操作和设置:

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;
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 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设定

set global read_only=1;

模式,即可保证主从同步,又可以实现从库只读。

相对的,设定“read_only=1”只读模式开启的解锁命令为设定

set global read_only=0;

设定全局锁

flush tables with read lock;

对应的解锁模式命令为:

unlock tables;

当然设定了

set global read_only=1;

后,所有的select查询操作都是可以正常进行的。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111656.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Navicat Premium 15激活码【2021.10最新】

    (Navicat Premium 15激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~09LV…

    2022年3月28日
    63
  • java set集合详解

    java set集合详解参考地址:https://blog.csdn.net/qq_33642117/article/details/52040345一,SetSet:注重独一无二的性质,该体系集合可以知道某物是否已近存在于集合中,不会存储重复的元素用于存储无序(存入和取出的顺序不一定相同)元素,值不能重复。对象的相等性  引用到堆上同一个对象的两个引用是相等的。如果对两个引用调用hashCode方…

    2022年5月18日
    39
  • KRACK破解Wi-Fi WPA2加密协议 问题相关

    KRACK破解Wi-Fi WPA2加密协议 问题相关Wi-Fi爆重大安全漏洞,Android、iOS、Windows等所有无线设备都不安全了KRACK漏洞发现者回答纪实:所有设备都面临风险无线网络中所使用的WPA2安全加密协议遭到破解LineageOS已经着手修复WPA2安全加密协议的破解问题

    2022年5月1日
    35
  • JPA环境下使用Hibernate二级缓存

    JPA环境下使用Hibernate二级缓存http://tuhaitao.iteye.com/blog/568653hibernate二级缓存本质上分为两类:1.对象缓存2.查询缓存在JPA环境下,例如Jboss,底层还是通过Hibernate来实现JPA的Query。下边简单说一下配置的步骤:1.配置entity在实体上方加入@CacheJava代码 import j

    2022年5月10日
    33
  • pycharm软件界面设置与配置[通俗易懂]

    pycharm软件界面设置与配置[通俗易懂]pycharm软件界面设置与配置pycharm软件介绍:基于eclipse开发的开源软件,适用于整体开发较大项目。负责繁琐的工作细节,节省宝贵的时间,善用以键盘操作为主的编程方法,pycharm完全理解代码的每个面向,依靠它的智能化代码补全,实时检查和快速修复等功能,轻松进行项目导航。其有以下优点:集成python需要的模块,方便开发;语法高亮,快速识别代码,方便开发;代码提示。搭建pycharm软件的开发环境:首先安装JDK(JDK是整个java开发的核心,它包含了JAVA的运行环

    2022年8月29日
    2
  • linux查看防火墙,关闭防火墙,启动防火墙,防火墙定义,对端口用处的理解

    linux查看防火墙,关闭防火墙,启动防火墙,防火墙定义,对端口用处的理解

    2021年7月18日
    80

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号