当前位置: 首页 > 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

http://www.xdnf.cn/news/557065.html

相关文章:

  • 【优秀三方库研读】在 quill 开源库中为什么封装 safe_fwrite,而不是直接使用系统 fwrite
  • MySQL中添加一个具有创建数据库权限的用户
  • Java并发进阶系列:深度讨论jdk1.8 ConcurrentHashMap并发环境下transfer方法桶位分配过程
  • C/C++ Select Poll Epoll 多路转接
  • python -> matplotlib简单用法
  • Unity3D仿星露谷物语开发47之砍树时落叶特效
  • Wan2.1 加速推理方法
  • 使用cursor自动生成前后端分离的web应用程序
  • ROS2 pkg 创建功能包
  • [ 计算机网络 ] 深入理解OSI七层模型
  • 经验过程简介与suprema的集中(Guntuboyina理论统计学笔记)
  • QT高DPI支持
  • linux之 pcie MSI-X中断编程
  • 自动化测试核心知识梳理与 Java 代码详解
  • 基于正点原子阿波罗F429开发板的LWIP应用(3)——Netbiosns功能
  • 嵌入式培训之系统编程(一)标准IO、文件操作
  • Liquid Wire 柔性应变传感器:金属凝胶导体 | 仿生肌肉长度监测 | 高精度动作控制
  • 特定领域 RAG中细调嵌入模型能否提升效果?
  • IVX:重构 AI 原生开发范式,让模型调用成为指尖艺术​
  • PostgreSQL简单使用
  • 深入浅出人工智能:机器学习、深度学习、强化学习原理详解与对比!
  • 【深度学习-Day 14】从零搭建你的第一个神经网络:多层感知器(MLP)详解
  • 第六天的尝试
  • 服务器部署1Panel
  • 證券行業證券交易系統開發方案
  • 基于SpringBoot+Vue的学籍管理系统的设计与实现
  • Kubernetes在线练习平台深度对比:KillerCoda与Play with Kubernetes
  • 【开源工具】文件夹结构映射工具 | PyQt5实现多模式目录复制详解
  • 【鸿蒙开发】Hi3861学习笔记- MQTT通信
  • 统一端点管理(UEM):定义、优势与重要性