返回顶部
首页 > 资讯 > 数据库 >MySQL全局锁指的是什么
  • 752
分享到

MySQL全局锁指的是什么

2024-04-02 19:04:59 752人浏览 安东尼
摘要

这篇文章主要介绍“Mysql全局锁指的是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“mysql全局锁指的是什么”文章能帮助大家解决问题。数据库设计的初衷是处理

这篇文章主要介绍“Mysql全局指的是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“mysql全局锁指的是什么”文章能帮助大家解决问题。

MySQL全局锁指的是什么

数据库设计的初衷是处理并发问题的,作为多用户共享的资源,当出现并发访问时,数据库需要合理地控制资源的访问规则。而锁就是用来实现这个访问规则的重要数据结构

我们先来贴一个锁的大概分类的图

MySQL全局锁指的是什么

根据加锁的范围,Mysql 里面的锁大致可以分为全局锁、表锁、行锁。我们主要先来学习这几种锁,这篇我们学习全局锁。

全局锁

全局锁就是对整个数据库加锁。当我们对数据库加了读锁之后,其他任何的请求都不能对数据库加写锁了,当我们对数据库加了写锁之后,后续其他任何的请求都不能对数据库加读锁和写锁了。

FTWRL

MySQL 提供了一个加全局读锁的方法,Flush tables with read lock (FTWRL)。当我们需要让整个库处于只读状态时,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(增删改)、数据定义语句(包括建表、修改表结构等)和更新类事务的提交语句。

全局锁的使用场景

全局锁的使用场景:做全库的逻辑备份。逻辑备份也就是把整个库的每个表都 select 出来存成文本。也就是全局锁只有在进行主从备份数据或者导入导出数据的时候才会使用到。

那么为什么需要全局锁呢?

因为我们在做数据备份或者导入导出数据的时候,如果在这个期间还可以同时进行数据的增删改,那么就会出现数据不一致的问题。

以前有一种做法是通过上面提到的 FTWRL 确保在备份的时候不会有其他线程对数据库做更新,注意:这里备份过程中整个库都是完全处于只读状态。

因为全局锁是面向这个数据库的,所以加全局锁听起来很危险:

  • 如果我们在主库上备份,在备份期间都不能执行更新,也就是基本上全部业务暂停。

  • 如果我们在从库上备份,在备份期间主库同步过来的 binlog 从库都不能执行,也就是会导致主从延迟,数据不一致。

如何避免加锁

既然加全局锁影响这么大,我们能不能避免加锁呢?

通过上面的介绍,我们知道加锁是为了解决数据不一致问题。那么是不是只要我们能解决数据不一致的问题,就可以不用加全局锁了。有这样一个思路:如果我们在开始进行数据备份的时候,记录一个操作日志,备份过程中不加锁允许对数据库的增删改查,而在备份过程中,增删改查的操作记录都记到一个日志文件里,等我们备份完成后,再把这段时间日志文件里的操作都执行一遍。这样就能保证备份前后数据的一致性了。

总结,不加锁的话,备份得到数据和主数据不是一个逻辑时间点,这个视图是逻辑不一致的。如果保证逻辑时间点一致即逻辑视图一致就能保证数据一致,由此我们就想到了我们之前学过的事务隔离级别,可重复复读的隔离级别下开启一个事务就是一个一致性视图。

在 MySQL 的默认引擎 InnoDB 里有一个机制可以保证数据一致性。InnoDB 引擎中有数据快照版本的功能,这个功能叫 mvcC,因为 MVCC 保留了历史版本的快照,每个快照都对应一个事务版本号,而在我们备份数据的时候会申请一个事务版本号,在读取数据的时候,只需要读取比自己事务版本号小的数据即可。

–single-transaction 命令加锁

官方自带的逻辑备份工具是 mysqldump。当 mysqldump 使用参数 –single-transaction 的时候,导数据之前就会启动一个事务,来确保拿到一致性视图。而由于 MVCC 的支持,这个过程中数据是可以正常更新的。

--single-transaction 参数的作用,设置事务的隔离级别为可重复读,即 REPEATABLE READ,这样能保证在一个事务中所有相同的查询读取到同样的数据,也就大概保证了在 dump 期间,如果其他 InnoDB 引擎的线程修改了表的数据并提交,对该 dump 线程的数据并无影响。

并且设置 WITH CONSISTENT SNAPSHOT 为快照级别。设想一下,如果只是可重复读,那么在事务开始时还没 dump 数据时,这时其他线程修改并提交了数据,那么这时第一次查询得到的结果是其他线程提交后的结果,而 WITH CONSISTENT SNAPSHOT 能够保证在事务开启的时候,第一次查询的结果就是事务开始时的数据 A,即使这时其他线程将其数据修改为 B,查的结果依然是 A。

single-transaction方法只适用于所有的表使用事务引擎的库。在 mysqldump 过程中,加了--single-transaction 就能保证 InnoDB 的数据是完全一致的,对于MyISAM这种不支持事务的引擎,如果备份过程中有更新,总是只能取到最新的数据,那么就破坏了备份的一致性。这时候就还是需要全局锁的,所以我们就还是需要使用 FTWRL 命令的。

只读设置

我们可能还会有这样一个疑问,既然要全库只读,我们为什么不适用 set global readonly = true 的方式呢?

确实 readonly 方式也可以让全库进入只读状态,但还是会建议用 FTWRL 方式,主要有两个原因:

  • 在有些系统,readonly 的值会被用来做其他逻辑,比如用来判断一个库是主库还是备库。因此,修改global变量的方式影响面更大。

  • 在异常处理机制上有差异。如果执行 FTWRL 命令之后由于客户端发生异常断开,那么 MySQL 会自动释放这个全局锁,整个库回到可以正常更新的状态。

而将整个库设置为 readonly 之后,如果客户端发生异常,则数据库就会一直保持 readonly 状态,这样会导致整个库长时间处于不可写状态,风险较高。

关于“MySQL全局锁指的是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网数据库频道,小编每天都会为大家更新不同的知识点。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL全局锁指的是什么

本文链接: https://lsjlt.com/news/73532.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL全局锁指的是什么
    这篇文章主要介绍“MySQL全局锁指的是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL全局锁指的是什么”文章能帮助大家解决问题。数据库设计的初衷是处理...
    99+
    2024-04-02
  • node全局对象指的是什么
    这篇文章主要介绍“node全局对象指的是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“node全局对象指的是什么”文章能帮助大家解决问题。 ...
    99+
    2024-04-02
  • node中全局包指的是什么
    这篇文章主要介绍“node中全局包指的是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“node中全局包指的是什么”文章能帮助大家解决问题。 ...
    99+
    2024-04-02
  • mysql共享锁指的是什么
    小编给大家分享一下mysql共享锁指的是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、说明共享锁,也称读锁,多用于判断数据是否存在,多个读操作可以同时进行...
    99+
    2023-06-15
  • mysql间隙锁指的是什么
    这篇文章将为大家详细讲解有关mysql间隙锁指的是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、说明当我们用范围条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加...
    99+
    2023-06-15
  • MySQL全局锁、表锁、行锁解析
    ...
    99+
    2014-05-15
    MySQL全局锁 表锁 行锁解析
  • mysql独占写锁指的是什么
    这篇文章将为大家详细讲解有关mysql独占写锁指的是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、说明对MyISAM表的写操作(加写锁),会阻塞其他进程对同一表的读和写操作,只有当写锁释放后,才会...
    99+
    2023-06-15
  • MySQL中怎么实现全局锁和表锁
    今天就跟大家聊聊有关MySQL中怎么实现全局锁和表锁,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. 全局锁全局锁就是对整个数据库实例加锁。MyS...
    99+
    2024-04-02
  • MySQL的锁机制之全局锁和表锁的实现
    前言 对mysql锁的总结学习,本文将围绕,加锁的概念,加锁的应用场景和优化,以及不加锁会导致的问题这些方向进行总结学习。mysql的全局锁和表锁是本文的重点 一、全局锁 全局锁的介绍以及使用 全局锁就是对整个数据库实例...
    99+
    2023-01-15
    MySQL全局锁和表锁 MySQL全局锁 MySQL表锁
  • MySQL innobackupex全备是指什么
    下文主要给大家带来MySQL innobackupex全备是指什么,希望这些内容能够带给大家实际用处,这也是我编辑MySQL innobackupex全备是指什么这篇文章的主要目的。好了,废话不多说,大家直...
    99+
    2024-04-02
  • python线程锁和全局锁有什么作用
    Python线程锁和全局锁都是用来控制多线程并发访问共享资源的工具,可以确保线程安全地访问共享资源。 线程锁是在代码块中使用的锁,它...
    99+
    2024-03-15
    python
  • MySQL的全局锁和表级锁的具体使用
    目录前言全局锁表级锁表锁元数据锁(Metadata Locking,简称:MDL锁)总结参考资料前言 在真实的企业开发环境中使用MySQL,MySQL肯定不会只有我一个人使用,而是一个团队显式的使用MySQL,或者...
    99+
    2022-05-13
    MySQL 全局锁 MySQL 表级锁
  • 局域网指的是什么
    本篇内容主要讲解“局域网指的是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“局域网指的是什么”吧!局域网是局部地区形成的一个区域网络,其特点就是分布地区范围有限,可大可小,大到一栋建筑楼 与...
    99+
    2023-07-05
  • Python死锁指的是什么
    小编给大家分享一下Python死锁指的是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python主要应用领域有哪些1、云计算,典型应用OpenStack。2...
    99+
    2023-06-14
  • 史上最详细MySQL全局锁和表锁
    原文: https://www.enmotech.com/web/detail/1/728/1.html   导读:根据加锁的范围,MySQL里面的锁大致可以分成全局锁,...
    99+
    2024-04-02
  • 什么是Python全局锁(GIL),如何避开GIL限制?
    一、什么是Python 全局锁 1、什么是全局锁 简单来说,Python 全局解释器锁(Global Interpreter Lock, 简称 GIL) 是一个互斥锁(或锁),只允许一个线程保持 Py...
    99+
    2023-09-01
    python 开发语言 算法
  • Python全局解释器锁能做什么
    本篇内容主要讲解“Python全局解释器锁能做什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python全局解释器锁能做什么”吧!悬而未决的问题每个领域都会有这么一个问题:它难度大、耗时多,...
    99+
    2023-06-17
  • 电脑锁定指的是什么
    本文小编为大家详细介绍“电脑锁定指的是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“电脑锁定指的是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 ...
    99+
    2023-02-21
    电脑
  • MySQL中的锁是什么?
    锁,在现实生活中是为我们想要隐藏于外界所使用的一种工具。在计算机中,是协调多个进程或县城并发访问某一资源的一种机制。在数据库当中,除了传统的计算资源(CPU、RAM、I/O等等)的争用之外,数据也是一种供许...
    99+
    2024-04-02
  • MySQL数据库中怎么实现全局锁和表级锁
    这篇文章给大家介绍MySQL数据库中怎么实现全局锁和表级锁,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1. 全局锁全局锁是粒度比较大的锁,基本上也使用不上,就像我们家的大门一样,控制...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作