当前位置: 首页 > news >正文

MYSQL备份恢复知识:第四章:备份锁

为了获得备份数据的一致性,需要在数据库中加锁,保证在备份期间没有数据变化。早期版本的MySQL仅支持表级锁,在加锁期间不允许访问数据库,这对生产环境是极大的挑战。因此,在后续版本中引入了实例级锁,使得备份期间可以进行正常的数据库读写,但是禁止DDL操作(例如修改表结构等)。这种机制,虽然不如传输的商用数据库那么成熟,但是基本可以满足用户需求。

1. 表级锁

MySQL 5.7之前的版本,提供Flush Tables with Read Lock备份锁。在执行备份时,为了保证一致性,关闭所有的表,并且加锁。Unlock Tables后,其它应用才可以访问数据库。在一些场景下,后果非常严重,例如:
一个长查询在执行,Flush Tables with Read Lock操作会一直等待查询完成后才能进行加锁。在对表加锁的等待中,其它所有的对数据库的操作都要等待,导致整个数据库无法使用。例如:
在session 1中创建表级锁,

mysql> flush tables with read lock;

在session 2中插入表数据,操作处于pending状态,

mysql> insert into tb01 values(1,1111,'lklsjflkwjefj');

在session 1 查看状态,ID 15是session 2的操作,状态为等待,
在这里插入图片描述

在session 1中解锁,

mysql> unlock tables;

在session 2中写入操作完成,
在这里插入图片描述

2. 实例锁

MySQL 8.0版本开始,提供Lock Instance for Backup备份锁。在执行备份时,为了保证一致性,阻断DDL操作,但是全部DML操作不受影响。备份完成后,执行Unlock Instance解锁。实例锁,仅用于InnoDB场景,因为InnoDB提供REDO机制,可支持非一致性备份。如果使用了MyISAM表,依然要通过表级锁进行备份。
执行了实例锁后,DML可正常运行,DDL操作被阻断,例如CREATE TABLE,要等待UNLOCK后可继续执行。例如,
在session 1 中创建实例锁,

mysql> lock instance for backup;

在session 2中操作表数据成功,但是创建表是pending状态
在这里插入图片描述

在session 1中查看,ID 15的创建表操作处于等待状态

在这里插入图片描述

在session 1中解锁,session 2的建表操作成功返回,

mysql> unlock instance;

CSDN视频课程:

https://edu.csdn.net/lecturer/8135?spm=1002.2001.3001.4144

相关文章:

  • 关于汇编语言与接口技术——单片机串行口的学习心得
  • 【综述】视频目标分割VOS
  • 视频监控联网系统GB28181协议中互联结构详解
  • 零基础入门Selenium自动化测试:自动登录edu邮箱
  • python宠物用品商城系统
  • web开发全过程总结
  • php、laravel框架下如何将一个png图片转化为jpg格式
  • langchain 实现 任务分解器
  • 【基础知识】QSPI的命令
  • Oracle中如何解决LATCH:CACHE BUFFERS LRU CHAIN
  • Windows 上配置 Docker,Docker 的基本原理和用途,以及如何在 Docker 中运行程序
  • JVM 性能问题排查实战10连击
  • 静态代理有哪些优势
  • 第二届帕鲁杯时间循环的信使
  • Vortex GPGPU的github流程跑通与功能模块波形探索(三)
  • CAN总线
  • 开源情报搜集系统:科研创新的强大引擎
  • 电网中窃电分析:概念、算法与应用
  • 深度解析 HDFS与Hive的关系
  • HarmonyOS NEXT~鸿蒙系统与mPaaS三方框架集成指南
  • 观察|脱欧5年后英欧再办峰会,多项突破性协议意味着什么?
  • 当文徵明“相遇”莫奈:苏博将展“从拙政园到莫奈花园”
  • 上海乐高乐园客流预测来了:工作日0.8万人次/日,周末节假日2万人次/日
  • 著名古人类学家高星获推选为国际史前与原史研究院院士
  • 全总联合六部门印发工作指引,共保劳动者合法权益
  • 央媒:设施老化、应急预案套模板,养老机构消防隐患亟待排查