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

MYSQL备份恢复知识:第五章:备份原理

MYSQL备份分为逻辑备份和物理备份,本章,主要介绍的内容是物理备份。首先,我们先简要的说明关于逻辑备份的知识。逻辑备份,即导出,使用DUMP工具完成。DUMP从原理上分析,并不适合用于备份,只是一个数据导出工具。当数据量较大时,导出的耗时较长。如果需要导出一致数据,就需要长时间的表级锁。因此,在数据量较小的场景,或非备份用途的导出数据,可以使用此工具。MySQL自带命令MYSQLDUMP,输出文件为纯文本,包括DDL和DML Statement。mysqlpump为高级版本的dump工具,支持多线程等高级功能,并且包括权限的导出。mysqldump不关注引擎类型,它只是逻辑读数据,因此支持全部存储引擎环境,也包括NDB Cluster。
下面,我们开始介绍物理备份。
区别于逻辑备份,物理备份不仅对数据进行备份,也对整个数据库架构进行备份。恢复时,产生的目录与备份的源保持一致。

1 物理备份内容

1.1 备份过程

为了让读者更容易理解,我们通过一个示例图来说明备份的过程:

  1. 在t0时刻,开始了备份,将数据文件拷贝到备份存储中;
  2. 在t2时刻,数据文件拷贝结束。备份获得了全部的数据文件,但是它们不具备一致性;
  3. 在t3时刻,开始拷贝redo归档文件。如果没有开启归档,拷贝redo文件。拷贝的日志范围比数据文件要更延后一些,即比t2的时间点晚一点的t3;
  4. 在t4时刻,开始拷贝binary日志。拷贝的日志至少要包括t2到t3的范围,但是要比t3更延后一些至t4;
  5. 到t4时刻,一次完整的物理备份结束;
  6. 在此后的时刻,可以随时进行binary备份,用于PITR恢复
    在这里插入图片描述

1.2 数据文件备份

MySQL数据库的数据文件,主要是表空间文件,可以直接采用文件拷贝的方式进行备份。在拷贝过程中,数据库有数据写入,因此备份的数据文件是不一致的。这就需要日志备份来配合。

1.3 REDO日志备份

为了保证数据100%的可恢复性,需要启用归档功能(8版本后支持)。尽管REDO日志可以配置为多个文件,并且可以设置非常大的容量,但是依然不能保证全部日志文件在备份前不会被覆盖。
例如,
没有开启归档,REDO日志文件有32个,从#ib_redo381到#ib_redo412。在备份数据文件开始时,相关的REDO信息记录在381中。由于数据库体量大、交易频繁,在数据文件备份结束时,#ib_redo381已经被循环利用,重新置成了#ib_redo413。在进行REDO日志备份时,只包含了#ib_redo382到#ib_redo413。因此,首先备份的数据文件,如果想到与后期备份的数据文件一致,所需的那部分日志所在的文件381已经丢失了。
还是这个场景,如果开始了归档,就不会存在这个问题。在数据文件备份开始前激活了REDO归档,从此该开始REDO会被同时写入指定的归档目录中,直到关闭了归档。因此,在整个备份过程中,所有生成的REDO都被保存在了指定的目录,不论REDO文件如何循环。
备份软件,例如MEB和xTraBackup,都会自动检测是否启用了归档。如果检测到已经启用,会自动在开始备份时激活归档,在备份结束时关闭归档。如果检测到归档没有启用,就会对REDO进行备份,但是不保证100%可恢复。

1.4 BINARY日志备份

日志文件是一系列连续的文件,文件编号持续增加,记录在INDEX文件中。备份以文件拷贝的方式,将全部或部分BINARY日志保存。虽然没有限制拷贝当前正在写入的日志,但是从文件系统调用的层面上看,还是尽量避免。BINARY文件编号最大的一个,是正在使用的,在这之前的编号都已经停止了写入。在备份前,使用FLUSH LOGS命令对日志进行更新,新的日志文件产生,这样包含所需数据的日志文件就停止了写入。例如,当前的日志文件是binlog.000010,如果对它进行备份,可能会对数据库有影响。执行FLUSH命令后,新的binlog.000011产生,binlog.000010停止写入,可以进行拷贝。

2 备份过程简述

2.1 一致性备份

所有非INNODB引擎,都需要使用一致性备份。

  1. 对数据库加表级锁,保证没有更新产生;
  2. 备份数据文件,可以是快照或文件拷贝方式。快照方式可以大幅缩短数据库加锁的时间,因此这类备份使用快照方式的较多;
  3. 在文件拷贝结束或快照结束后,关闭锁;
  4. 拷贝Binary日志

2.2 非一致性备份

只有InnoDB引擎支持。

  1. 打开实例锁;
  2. 激活Redo归档(8.0版本以后);
  3. 开始捕获Redo归档线程;
  4. 拷贝全部数据文件;
  5. 拷贝Binary日志;
  6. 关闭Redo归档;
  7. 关闭Redo归档捕获线程;
  8. 关闭实例锁;

2.3 混合备份

配置了包括InnoDB等多种引擎的场景。

  1. 获取InnoDB和non-InnoDB的数据文件列表
  2. 打开实例锁;
  3. 激活Redo归档(8.0版本以后);
  4. 开始捕获Redo归档线程;
  5. 拷贝全部InnoDB数据文件;
  6. 打开表级锁;
  7. 拷贝全部non-InnoDB数据文件;
  8. 拷贝Binary日志;
  9. 关闭Redo归档;
  10. 关闭Redo归档捕获线程;
  11. 关闭表级锁和实例锁;

CSDN视频课程:

https://edu.csdn.net/lecturer/8135?spm=1002.2001.3001.4144
http://www.xdnf.cn/news/643447.html

相关文章:

  • 渗透测试流程-下篇
  • 定时任务调度平台XXL-JOB
  • 基于Python实现JSON点云数据的3D可视化与过滤
  • 美团2025年校招笔试真题手撕教程(三)
  • Spring 源码阅读(循环依赖、Bean 生命周期、AOP、IOC) - 5.2.15.RELEASE
  • 电路笔记(通信):RS-485总线 物理层规范 接口及其组成部分 瑞萨电子RS-485总线笔记
  • vue3中computed计算属性和watch监听的异同点
  • Qt实战教程:设计并实现一个结构清晰、功能完整的桌面应用
  • 机械师安装ubantu双系统:一、制作系统盘
  • React从基础入门到高级实战:React 核心技术 - 组件通信与 Props 深入
  • Pandas数据规整
  • 香橙派3B学习笔记3:宝塔 Linux 面板的安装
  • 2025年- H46-Lc154 --543. 二叉树的直径(深度、递归、深搜)--Java版
  • 华为OD机试真题—— 矩阵匹配(2025B卷:200分)Java/python/JavaScript/C/C++/GO最佳实现
  • MySQL的查询进阶
  • 学习STC51单片机15(芯片为STC89C52RCRC)
  • (九)PMSM驱动控制学习---高阶滑膜观测器
  • 网络 :序列和反序列化
  • <uniapp><threejs>在uniapp中,怎么使用threejs来显示3D图形?
  • 电子电路:电压就是电场么?二者有什么关系?
  • python打卡day36
  • Hutool使用
  • 针对面试- RabbitMQ消息队列篇
  • 【linux】umask权限掩码
  • Java类和对象知识点
  • 从lateral说起
  • Ansible常用Ad-Hoc 命令
  • react问一问
  • Axure 基本用法学习笔记
  • 修复ubuntu server笔记本合盖导致的无线网卡故障