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)
上一篇 2022年2月17日 下午3:00
下一篇 2022年2月17日 下午4:00


相关推荐

  • js中的闭包[通俗易懂]

    js中的闭包[通俗易懂]闭包是js的一个难点也是它的一个特色,是我们必须掌握的js高级特性,那么什么是闭包呢?它又有什么用呢?我们都知道,js的作用域分两种,全局和局部,基于我们所熟悉的作用域链相关知识,我们知道在js作用域环境中访问变量的权利是由内向外的,内部作用域可以获得当前作用域下的变量并且可以获得当前包含当前作用域的外层作用域下的变量,反之则不能,也就是说在外层作用域下无法获取内层作用域下的变量,同样在不同的函…

    2022年6月25日
    29
  • CURL

    CURL

    2021年7月31日
    57
  • android 触屏处理流程,android触摸事件处理流程 ? FOOKWOOD「建议收藏」

    android 触屏处理流程,android触摸事件处理流程 ? FOOKWOOD「建议收藏」最近在工作中,经常需要处理触摸事件,但是有时候会出现一些奇怪的bug,比如有时候会检测不到ACTION_MOVE和ACTION_UP,我决定下决心写个测试的小程序,来研究一个触摸事件从上往下是怎么传递和处理的。先说下大概的流程吧,这个应该在很多博客中都有讲解:当一个事件来临的时候,会先传递给最外层的ViewGroup(比如LinearLayout,FrameLayout),如果这个ViewGrou…

    2025年10月24日
    6
  • pycharm专业版下载安装教程_pycharm2021专业版安装教程

    pycharm专业版下载安装教程_pycharm2021专业版安装教程Pycharm官网地址(下载):https://link.zhihu.com/?target=https%3A//www.jetbrains.com/pycharm/download/other.html有各种不同版本的Pycharm供下载,本文选择Pycharm专业版下载,建议下载2020.1.5版本.安装教程下载完成之后,就按照步骤开始安装了,点击Next:我选择安装在F盘,因为C盘太占用空间了,会比较卡,点击Next:一定要选着添加到环境变量中,不然后面还要手动配置环境变量,比较麻烦,

    2022年8月28日
    5
  • java string转inputstream(substring截取字符串)

    Apachecommons是一个强大的Java辅助工具包。它提供的IOUtils可以让我们很便捷的实现InputStream转换为String。StringWriterwriter=newStringWriter();IOUtils.copy(inputStream,writer,encoding);StringtheString=writer.toString();首先把in…

    2022年4月16日
    126
  • 眼图分析与测量详解

    眼图分析与测量详解很多工程师都知道高速信号需要测量眼图 那眼图代表着什么 该如何分析眼图的好与坏 以及从眼图各种形状上 我们能知道哪些信息呢 现代的眼图分析软件又有哪些新的功能 今天有请是德科技示波器专家李军给大家解答 首先我们先了解关于眼图的基本知识 1 为什么要关注眼图数字信号的眼图中包含了丰富的信息 可以体现数字信号的整体特征 能够很好地评估数字信号的质量 因而眼图的分析是数字系统信号完整性分析的关键之一 2 眼图的形成眼图实际上就是数字信号的一系列不同二进制码按一定的规律在示波器屏幕上累积

    2026年3月17日
    2

发表回复

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

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