MySQL 锁

一、介绍

1.1  锁的介绍

锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。

1.2  锁的分类

分类:MySQL中的锁,按照锁的粒度分,分为以下三类:

  1. 全局锁:锁定数据库中的所有表。
  2. 表级锁:每次操作锁住整张表。
  3. 行级锁:每次操作锁住对应的行数据。

二、全局锁

2.1  全局锁的介绍

全局锁就是对整个数据库实例加锁,加锁后整个实例就处于只读状态,后续的DML的写语句,DDL语句,已经更新操作的事务提交语句都将被阻塞。
其典型的使用场景是做全库的逻辑备份,对所有的表进行锁定,从而获取一致性视图,保证数据的完整性。

2.2  全局锁的一致性数据备份

获取全局锁并锁定所有表

        FLUSH TABLES WITH READ LOCK;

不需要在使用FLUSH TABLES WITH READ LOCK命令之前使用USE指定数据库。该命令是针对所有数据库的,它会锁定当前MySQL实例中所有的表。FLUSH TABLES WITH READ LOCK命令用于锁定所有数据库的表,以进行数据库在线备份。此时,数据库中的所有表都处于锁定状态,不能进行删除、修改或增加数据等操作,但读操作能够正常执行。

备份数据库中的数据

mysqldump   -u   username   -p   password   dbname  [table1  table2]  >  BackupName.sql

其中:

  • username:数据库用户名;
  • password:数据库密码;
  • dbname:表示数据库的名称;
  • table1和table2:表示需要备份的表的名称,为空则整个数据库备份;
  • BackupName.sql:表示备份文件的名称,文件名前面可以加上一个绝对路径。

通常将数据库被分成一个后缀名为sql的文件,这样简单的备份数据库就完成了。

解除全局锁

        UNLOCK TABLES;

在InnoDB引擎中,我们可以在备份时加上参数--single-transaction参数来完成不加锁的一致性数据备份。

mysqldump  --single-transaction  -u  username  -p  password   dbname  > itcast.sql

使用--single-transaction参数可以使得mysqldump在备份时不需要使用FLUSH TABLES WITH READ LOCK来获取全局锁,可以直接通过mysqldump 语句进行备份。

三、表级锁

表级锁,每次操作锁住整张表。锁定粒度大,发生锁冲突的概率最高,并发度最低。应用在MyISAM、InnoDB、BDB等存储引擎中。

对于表级锁,主要分为以下三类:

  1. 表锁

  2. 元数据锁(meta data lock,MDL)

  3. 意向锁

 

3.1  表锁

表锁:对于表锁,分为两类:

1.表共享读锁(read lock)所有的事务都只能读(当前加锁的客户端也只能读,不能写),不能写 2.表独占写锁(write lock),对当前加锁的客户端,可读可写,对于其他的客户端,不可读也不可写。
读锁不会阻塞其他客户端的读,但是会阻塞写。写锁既会阻塞其他客户端的读,又会阻塞其他客户端的写。

3.2  元数据锁

元数据锁(meta data lock,MDL),MDL加锁过程是系统自动控制,无需显式使用,在访问一张表的时候会自动加上。MDL锁主要作用是维护表元数据的数据一致性,在表上有活动事务的时候,不可以对元数据进行写入操作(即不可修改表结构)。在MySQL5.5中引入了MDL,当对一张表进行增删改查的时候,加MDL读锁(共享);当对表结构进行变更操作的时候,加MDL写锁(排他)。

查看元数据锁:
select object type,object schema,object_ name,lock type,lock duration from performance_schema.metadata_locks ;
 

3.3  意向锁

意向锁: 为了避免DML在执行时,加的行锁与表锁的冲突,在InnoDB中引入了意向锁,使得表锁不用检查每行数据是否加锁,使用意向锁来减少表锁的检查。
一个客户端对某一行加上了行锁,那么系统也会对其加上一个意向锁,当别的客户端来想要对其加上表锁时,便会检查意向锁是否兼容,若是不兼容,便会阻塞直到意向锁释放。

 

 意向锁分类:
        1.意向共享锁(IS):由语句select ... lock in share mode添加。
        2.意向排他锁(IX)︰由insert、update、delete、select ... for update添加。

 

意向锁兼容性:

  1. 意向共享锁(IS):与表锁共享锁(read)兼容,与表锁排它锁(write)互斥。
  2. 意向排他锁(lX):与表锁共享锁(read)及排它锁(write)都互斥。意向锁之间不会互斥。

可以通过以下SQL,查看意向锁及行锁的加锁情况:
select object _schema,object_name index_name,lock_type,lock_mode,lock_data from performance_schema.data_locks;
 

四、行级锁

行级锁,每次操作锁住对应的行数据。锁定粒度最小,发生锁冲突的概率最低,并发度最高。应用在InnoDB存储引擎中。
InnoDB的数据是基于索引组织的,行锁是通过对索引上的索引项加锁来实现的,而不是对记录加的锁。对于行级锁,主要分为以下三类:

  1. 行锁(Record Lock):锁定单个行记录的锁,防止其他事务对此行进行update和delete。在RC(read commit )、RR(repeat read)隔离级别下都支持。
  2. 间隙锁(GapLock):锁定索引记录间隙(不含该记录),确保索引记录间隙不变,防止其他事务在这个间隙进行insert,产生幻读。在RR隔离级别下都支持。比如说 两个临近叶子节点为 15 23,那么间隙就是指 [15 , 23],锁的是这个间隙。
  3. 临键锁(Next-Key Lock):行锁和间隙锁组合,同时锁住数据,并锁住数据前面的间隙Gap。在RR隔离级别下支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/128684.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring修炼之路--基础知识

一、核心概念 1.1软件模块化 软件模块化是一种软件开发的设计模式,它将一个大型的软件系统划分成多个独立的模块,每个模块都有自己的功能和接口,并且能够与其他模块独立地工作1. 软件模块化设计可以使软件不至于随着逐渐变大而变得不可控&am…

大数据-玩转数据-Flink 容错机制

一、概述 在分布式架构中,当某个节点出现故障,其他节点基本不受影响。在 Flink 中,有一套完整的容错机制,最重要就是检查点(checkpoint)。 二、检查点(Checkpoint) 在流处理中&am…

初识docker

目录 docker解决的问题1. 开发、测试和运维人员之间的矛盾2. 更轻量的虚拟化,节省了虚拟机的性能损耗 虚拟机与容器的区别1. 虚拟机2. 容器 Docker 系统架构 docker解决的问题 1. 开发、测试和运维人员之间的矛盾 “程序在我这跑得好好的,在你那怎么就…

Qt的窗口系统

代码仓库以及参考文件见文章底部 坐标体系 要想学好GUI,界面的坐标系首先要搞清楚 在Qt编程中,以左上角为原点,X向右增加,Y向下增加。 对于所有嵌套的窗口,其坐标是相对于父窗口来说的。 QWidget 所有窗口以及窗口控件都是从QWidget直接或者间接派生出来的。 对象模…

手写Spring:第5章-注入属性和依赖对象

文章目录 一、目标:注入属性和依赖对象二、设计:注入属性和依赖对象三、实现:注入属性和依赖对象3.0 引入依赖3.1 工程结构3.2 注入属性和依赖对象类图3.3 定义属性值和属性集合3.3.1 定义属性值3.3.2 定义属性集合 3.4 Bean定义补全3.5 Bean…

21.添加websocket模块

这里默认读者了解websocket协议,若是还不了解可以看下这篇文章wesocket协议。 websocket主要有三个步骤,1通过HTTP进行握手连接,2进行双向通信,3.协商断开连接 第一步的握手连接需要HTTP,所以还需要使用到上一节讲解…

Python实现猎人猎物优化算法(HPO)优化BP神经网络回归模型(BP神经网络回归算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 猎人猎物优化搜索算法(Hunter–prey optimizer, HPO)是由Naruei& Keynia于2022年提出的一种最新的…

OpenCV(三十三):计算轮廓面积与轮廓长度

1.介绍轮廓面积与轮廓长度 轮廓面积(Contour Area)是指轮廓所包围的区域的总面积。通常情况下,轮廓面积的单位是像素的平方。 轮廓长度(Contour Length)又称周长(Perimeter),表示轮廓…

Unity 从0开始编写一个技能编辑器_01_分析需求

入职以来一直很想实现一个技能编辑器,在积累了一些经验以后,决定利用ScriptableObject开发一个,在此记录 1.简单的需求分析 在游戏开发中,技能系统是一个至关重要的组成部分。技能决定了游戏角色可以执行的各种动作,例…

代码随想录算法训练营第十八天|513. 找树左下角的值|112. 路径总和|106. 从中序与后序遍历序列构造二叉树

513. 找树左下角的值 题目:给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1 思路一:层序遍历,最后一层的第一个元素,即…

java实时监控mysql数据库变化

对于二次开发来说,很大一部分就找找文件和找数据库的变化情况 对于数据库变化。还没有发现比较好用的监控数据库变化监控软件。 今天,我就给大家介绍一个如何使用mysql自带的功能监控数据库变化 1、打开数据库配置文件my.ini (一般在数据库…

c语言 2.0

1.数据类型 数据类型介绍 数据类型:c语言中数据类型有3种,分别是基本数据类型、构造数据类型、指针数据类型。 数据类型的作用:编译器预算数据分配的内存空间大小。 ps:可以通俗理解为:数据类型是用来规范内存的开销…

python DVWA文件上传POC练习

先直接测试POC 抓包 GET /dv/vulnerabilities/sqli/?id1%27unionselect1%2Cmd5%28123%29%23&SubmitSubmit HTTP/1.1Host: 10.9.75.161Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrom…

Tomcat服务的部署及配置优化

文章目录 1. Tomcat的相关介绍1.1 Tomcat简介1.2 Tomcat的核心组件1.2.1 Web容器1.2.2 Servlet容器1.2.3 JSP容器 1.3 Tomcat的功能组件1.3.1 connector连接器1.3.2 container容器1.3.2.1 子容器及其相关功能 1.4 主要作用1.5 Tmocat处理请求的过程 2. Tomcata服务部署2.1 安装…

log4qt库的使用

log4qt库的使用 一,什么是log4qt?二,log4qt的下载三,如何集成log4qt?1.在vs2022中集成log4qt的方法:模块一:配置log4qt的步骤步骤一,将下好的log4qt库进行解压,然后再库文件中,新建build和Log4Qt文件夹步骤二,打开cmake,有两个填写路径的位置.步骤三,点击cmake的configure按钮…

tcp满开始和拥塞避免

tcp的拥塞控制有四种算法,后面的快重传和快恢复是后面新增的, 刚开始会初始化慢开始门限值,并将拥塞窗口值为1往网络中发送,若收到确认包则将拥塞窗口翻倍,执行慢开始算法,当拥塞窗口值达到慢开始门限后&am…

02-Tomcat打破双亲委派机制

上一篇:01-从JDK源码级别剖析JVM类加载机制 Tomcat 如果使用默认的双亲委派类加载机制行不行? 我们思考一下:Tomcat是个web容器, 那么它要解决什么问题: 一个web容器可能需要部署两个应用程序,不同的应用…

Alibaba(获得店铺的所有商品) API 接口

为了进行电商平台 的API开发,首先我们需要做下面几件事情。 1)开发者注册一个账号 2)然后为每个alibaba应用注册一个应用程序键(App Key) 。 3)下载alibaba API的SDK并掌握基本的API基础知识和调用 4)利…

深入浅出Android同步屏障机制

原文链接 Android Sync Barrier机制 诡异的假死问题 前段时间,项目上遇到了一个假死问题,随机出现,无固定复现规律,大量频繁随机操作后,便会出现假死,整个应用无法操作,不会响应事件&#xff…

【Linux】Systemd 中的单元(Unit)和单元文件(Unit File)怎么理解?

单元(Unit)单元文件(Unit File)感谢 💖 关于systemd是什么,http://t.csdn.cn/pMkG7这篇文章里有详细说明。 这篇文件我们一起来看看Systemd 中的单元(Unit)和单元文件(Un…