【5】MySQL数据库备份-XtraBackup - 全量备份
MySQL数据库备份-XtraBackup-全量备份
- 前言
- 环境
- 版本
- 安装部署
- 下载
- RPM 包
- 二进制包
- 安装
- 卸载
- 场景分析
- 全量备份 | 恢复
- 备份
- 恢复
- 综合
- 增量备份 | 恢复
- 部分备份 | 恢复
前言
关于数据库备份的一些常见术语、工具等,可见《MySQL数据库-备份》章节,当前不再重复概述。本篇主要对 XtraBackup 工具的使用做下详细讲解。
首先,说下所使用的环境、版本。
环境
- 操作系统:Red Hat Enterprise Linux Server release 7.5 (Maipo)
- 数据库:mysql Ver 8.0.32 for Linux on x86_64 (MySQL Community Server - GPL)
- XtraBackup:
- percona-xtrabackup-80-8.0.35-30.1.el7.x86_64.rpm
- percona-xtrabackup-80-8.0.32-25.1.el7.x86_64.rpm
版本
关于 XtraBackup 的版本这里有必要说明下,参考官网如下:
- https://www.percona.com/blog/aligning-percona-xtrabackup-versions-with-percona-server-for-mysql/

- 翻译成大白话的意思就是:Percona XtraBackup 的版本要超过(
大于或等于)数据库的版本。
但我个人的习惯,还是尽量和数据库的版本保持一致(仅个人习惯)。
原因如下:
当前 MySQL 数据库版本 8.0.32,若安装 XtraBackup 版本为 8.0.35-??,则查看 XtraBackup 版本时,将有如下输出、其最后一句,看着别扭。

版本也是经过测试的,可以备份 MySQL 8.0.32 的版本。
而且备份中,也有输出:
xtrabackup version 8.0.35-30 based on MySQL server 8.0.35 Linux (x86_64) (revision id: 6beb4b49)
看着就是别扭,故 XtraBackup 版本一般与数据库当前版本保持一致。
安装部署
下载
下载安装包的方式较多,当前主要以RPM包、二进制包进行讲解,本篇博文使用RPM包安装部署、测试。
RPM 包
访问官网地址:https://www.percona.com/downloads
打开官网页面后,鼠标往下扒拉、可找到如下截图:依次选择、下载 即可。

或者直接使用下载地址:
- 8.0.35
https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.35-30/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.35-30.1.el7.x86_64.rpm - 8.0.32
https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.32-25/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.32-25.1.el7.x86_64.rpm
二进制包
- 执行如下命令进行下载:
- 命令参考官网地址:https://docs.percona.com/percona-xtrabackup/8.0/binary-tarball.html
$ wget https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.35-30/binary/tarball/percona-xtrabackup-8.0.35-30-Linux-x86_64.glibc2.17.tar.gz
上述下载命令中包版本的选择(或者包名字的选择), 可参考官网如下地址:
https://docs.percona.com/percona-xtrabackup/8.0/binary-tarball-names.html

安装
在安装 XtraBackup 过程中遇到了报错,见《XtraBackup 安装报错 zstd》文章,故提前做下依赖包的安装。
- 安装依赖包执行如下命令:
yum -y install epel-release zstd
- 安装 XtraBackup
yum -y install percona-xtrabackup-80-8.0.35-30.1.el7.x86_64.rpm
- 查看版本
说明下哈:实际上,我使用的版本是8.0.32版本,当前安装的是8.0.35版本,你懂我的意思吧?-- 下面有卸载步骤。
[root@testdbmy01 soft]# xtrabackup -version2024-06-01T10:05:07.033137+08:00 0 [Note] [MY-011825] [Xtrabackup] recognized server arguments: --server-id=8833 --datadir=/mysql/data --tmpdir=/mysql/tmp --open_files_limit=65535 --log_bin=/mysql/binlog/mysql-bin --innodb_data_home_dir=/mysql/data/ --innodb_log_group_home_dir=/mysql/data/ --innodb_file_per_table=1 --innodb_data_file_path=ibdata1:1G:autoextend --innodb_flush_log_at_trx_commit=1 --innodb_buffer_pool_size=1G --innodb_io_capacity=1000 --innodb_max_dirty_pages_pct=60 --innodb_flush_method=O_DIRECT --innodb_log_file_size=2G --innodb_log_files_in_group=2 --innodb_log_buffer_size=64M --innodb_write_io_threads=8 --innodb_read_io_threads=8 --innodb_open_files=4096
xtrabackup version 8.0.35-30 based on MySQL server 8.0.35 Linux (x86_64) (revision id: 6beb4b49)
[root@testdbmy01 soft]#
卸载
- 查找已经安装的 XtraBackup 名称
[root@testdbmy01 soft]# yum list installed | grep -i xtrabackup
percona-xtrabackup-80.x86_64 8.0.35-30.1.el7 installed
[root@testdbmy01 soft]#
- 卸载
[root@testdbmy01 soft]# yum -y remove percona-xtrabackup-80.x86_64
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
Resolving Dependencies
--> Running transaction check
---> Package percona-xtrabackup-80.x86_64 0:8.0.35-30.1.el7 will be erased
--> Finished Dependency ResolutionDependencies Resolved==========================================================================================================================================================================================Package Arch Version Repository Size
==========================================================================================================================================================================================
Removing:percona-xtrabackup-80 x86_64 8.0.35-30.1.el7 installed 219 MTransaction Summary
==========================================================================================================================================================================================
Remove 1 PackageInstalled size: 219 M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transactionErasing : percona-xtrabackup-80-8.0.35-30.1.el7.x86_64 1/1 Verifying : percona-xtrabackup-80-8.0.35-30.1.el7.x86_64 1/1 Removed:percona-xtrabackup-80.x86_64 0:8.0.35-30.1.el7 Complete!
[root@testdbmy01 soft]#
场景分析
再次声明 虽然安装的步骤中是8.0.35版本,但实际上:背地里 偷偷的卸载重装了 XtraBackup 版本是 8.0.32 。
如下场景也是基于8.0.32版本,一个小版本号而已,问题不大。
全量备份 | 恢复
备份
- 创建备份目录(使用
root用户执行)
[root@testdbmy01 /]# DATE=`date +%Y%m%d%H`
[root@testdbmy01 /]# mkdir -p /backup/$DATE
- 执行备份
[root@testdbmy01 /]# xtrabackup --backup --target-dir=/backup/2024060110 --user=root --password=123456
参数讲解:
--backup:指示 XtraBackup 执行备份。--target-dir:指定备份文件的目标目录。--user和--password:用于访问 MySQL 数据库的用户凭证。
- 准备数据
[root@testdbmy01 /]# xtrabackup --prepare --target-dir=/backup/2024060110
这个准备数据 是干啥的?能不能省略?
既然写了,那肯定是不能省略滴~。原因有以下三个:
应用事务日志:在备份期间,XtraBackup 会创建一个不一致的备份,因为数据库在备份过程中可能有写操作。为了确保备份的一致性,需要应用事务日志。--prepare步骤会读取备份中的事务日志文件,并应用这些日志到数据文件,从而使数据文件处于一致状态。使备份可恢复:未经 --prepare 处理的备份数据文件是不可恢复的。必须先准备备份,应用所有的事务日志,才能确保恢复时数据文件的一致性。支持增量备份:如果你在全量备份的基础上执行了增量备份,必须先对全量备份执行 --prepare --apply-log-only,然后才能应用增量备份。最后再执行一次 --prepare,使整个备份集可恢复。
上述的备份,涉及的命令,也可以合并在一起。如下,将其放到脚本中了。
使用时,
先设置下这 3个变量:BACKUP_DIR、MYSQL_USER、MYSQL_PASSWORD
然后,用 root 账号执行就好了,sh export.sh,是不是很 easy …
cat > backup_export.sh <<EOF
#!/bin/bash# 设置变量
BACKUP_DIR="/backup/`date +%Y%m%d%H`"
MYSQL_USER="root"
MYSQL_PASSWORD="123456"# 创建备份目录
mkdir -p \$BACKUP_DIR# 执行全量备份
xtrabackup --backup --target-dir=\$BACKUP_DIR --user=\$MYSQL_USER --password=\$MYSQL_PASSWORD# 检查备份是否成功
if [ \$? -eq 0 ]; thenecho "Backup successful, preparing the backup..."# 准备备份数据xtrabackup --prepare --target-dir=\$BACKUP_DIRif [ \$? -eq 0 ]; thenecho "Backup prepared successfully."elseecho "Failed to prepare backup."fi
elseecho "Backup failed."
fiecho "Backup path:\$BACKUP_DIR"
EOF
恢复
恢复步骤,更 easy 了,就 1 条命令。
[root@testdbmy01 backup]# xtrabackup --copy-back --target-dir=/backup/2024060110
综合
主要是基于上面的备份、恢复步骤,进行一次完整的演示操作。这里主要分为 6个步骤,如下:
- 创建 脚本,并执行,完成备份。
- 创建脚本
cat > backup_export.sh <<EOF
#!/bin/bash# 设置变量
BACKUP_DIR="/backup/`date +%Y%m%d%H`"
MYSQL_USER="root"
MYSQL_PASSWORD="123456"# 创建备份目录
mkdir -p \$BACKUP_DIR# 执行全量备份
xtrabackup --backup --target-dir=\$BACKUP_DIR --user=\$MYSQL_USER --password=\$MYSQL_PASSWORD# 检查备份是否成功
if [ \$? -eq 0 ]; thenecho "Backup successful, preparing the backup..."# 准备备份数据xtrabackup --prepare --target-dir=\$BACKUP_DIRif [ \$? -eq 0 ]; thenecho "Backup prepared successfully."elseecho "Failed to prepare backup."fi
elseecho "Backup failed."
fiecho "Backup path:\$BACKUP_DIR"
EOF
- 执行脚本
## 检查 MySQL 数据库 运行中。
[root@testdbmy01 soft]# ps -ef | grep mysql
root 17601 1 0 11:15 pts/1 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/mysql/data --pid-file=/mysql/data/testdbmy01.pid
mysql 18971 17601 0 11:15 pts/1 00:02:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/mysql/logs/mysql-error.log --open-files-limit=65535 --pid-file=/mysql/data/testdbmy01.pid --socket=/mysql/tmp/mysql.sock --port=3306
root 21242 4833 0 15:11 pts/1 00:00:00 grep --color=auto mysql
[root@testdbmy01 soft]# ## 执行导出
[root@testdbmy01 soft]# sh backup_export.sh
- 停止数据库,并删除库(模拟故障)。
## 停止数据库
[root@testdbmy01 soft]# service mysqld stop
Shutting down MySQL.. SUCCESS!
[root@testdbmy01 soft]# ## 我怕万一、恢复不出来。我没敢删除(rm -rf),我又偷偷的 mv 了...
[root@testdbmy01 soft]# mv /mysql /mysql_bak202406
[root@testdbmy01 soft]#
- 创建数据库目录&文件
恢复时,只有data、binlog会自动创建,其他还需手动创建。所以这里一次性全部创建完成。
[root@testdbmy01 soft]# mkdir -p /mysql/{data,binlog,logs,tmp}
[root@testdbmy01 soft]# touch /mysql/logs/{mysql-error.log,mysql-slow.log}
- 使用
步骤1中的备份,进行恢复。
[root@testdbmy01 soft]# xtrabackup --copy-back --target-dir=/backup/2024060115
- 设置权限
[root@testdbmy01 soft]# chown -R mysql.mysql /mysql
- 启动数据库
[root@testdbmy01 soft]# service mysqld start
Starting MySQL..... SUCCESS!
[root@testdbmy01 soft]#
最后,在登录数据库验证一下,就 Okk 了。
增量备份 | 恢复
~ 忒长了~ 已写 9千多字了,我怕~写完,字数太长受限制不能发布,
当前章节、晚会我补链接~~
部分备份 | 恢复

相关文章:
【5】MySQL数据库备份-XtraBackup - 全量备份
MySQL数据库备份-XtraBackup-全量备份 前言环境版本 安装部署下载RPM 包二进制包 安装卸载 场景分析全量备份 | 恢复备份恢复综合 增量备份 | 恢复部分备份 | 恢复 前言 关于数据库备份的一些常见术语、工具等,可见《MySQL数据库-备份》章节,当前不再重…...
数据治理-数据标准演示
数据字典 数据标准-数据字典 词根 数据标准-词根 业务字典映射 数据标准-业务字典映射 标准文档 数据标准-标准文档...
基于Chisel的FPGA流水灯设计
Chisel流水灯 一、Chisel(一)什么是Chisel(二)Chisel能做什么(三)Chisel的使用(四)Chisel的优缺点1.优点2.缺点 二、流水灯设计 一、Chisel (一)什么是Chise…...
LabVIEW齿轮调制故障检测系统
LabVIEW齿轮调制故障检测系统 概述 开发了一种基于LabVIEW平台的齿轮调制故障检测系统,实现齿轮在恶劣工作条件下的故障振动信号的实时在线检测。系统利用LabVIEW的强大图形编程能力,结合Hilbert包络解调技术,对齿轮的振动信号进行精确分析…...
AI帮写:探索国内AI写作工具的创新与实用性
随着AI技术的快速发展,AI写作正成为创作的新风口。但是面对GPT-4这样的国际巨头,国内很多小伙伴往往望而却步,究其原因,就是它的使用门槛高,还有成本的考量。 不过,随着GPT技术的火热,国内也涌…...
n后问题 回溯笔记
问题描述 在nn格的棋盘上放置彼此不受攻击的n个皇后。 按照国际象棋的规则,皇后可以攻击与之处在同 一行或同一列或同一斜线上的棋子。n后问题等价于在nn格的棋盘上放置n个皇后,任何2个皇后不放在同一行或同一列或同一斜线上。 代码 import java.uti…...
简述Java中实现Socket通信的步骤
在Java中,实现Socket通信通常涉及客户端和服务器端两个角色。以下是它们各自的基本步骤: 服务器端(Server) 创建ServerSocket对象: 在服务器端,首先需要创建一个ServerSocket对象。这个对象会监听来自客户…...
Asp.Net Core 实现分片下载的最简单方式
技术群里的朋友遇到了这个问题,起初的原因是他对文件增加了一个属性配置 fileResult.EnableRangeProcessing true;这个属性我从未遇到过,然后,去F1查看这个属性的描述信息也依然少的可怜,只有简单的描述为(获取或设置为 启用范围…...
[Mac软件]Leech for Mac v3.2 - 轻量级mac下载工具
黑果魏叔推荐Leech是由Many Tricks开发的适用于Mac OS X的轻量级且功能强大的下载管理器。 Leech让您完全控制下载,并与浏览器完全集成。您可以将下载排队,暂停和恢复,从受密码保护的服务器下载,并将密码存储在系统范围的安全钥匙…...
留给“端侧大模型”的时间不多了
端侧大模型(Edge AI models),也就是只在设备本地(如智能手机、IoT设备、嵌入式系统等)运行的大模型,过去一两年来非常流行。 具体表现在,终端设备厂商,如苹果、荣耀、小米、OV等&…...
Pytest框架中的Setup和Teardown功能
在 pytest 测试框架中,setup 和 teardown是用于在每个测试函数之前和之后执行设置和清理的动作,而pytest 实际上并没有内置的 setup 和 teardown 函数,而是使用了一些装饰器或钩子函数来实现类似的功能。 学习目录 钩子函数(Hook…...
yolov10/v8 loss详解
v10出了就想看看它的loss设计有什么不同,看下来由于v8和v10的loss部分基本一致就放一起了。 v10的论文笔记,还没看的可以看看,初步尝试耗时确实有提升 好记性不如烂笔头,还是得记录一下,以免忘了,废话结束…...
Typescript高级: 深入理解infer关键字
概述 在 TS 中,infer 是一个高级类型操作,特别是条件类型和映射类型中非常有用的关键字它在泛型中使用也会是一个强大工具,增强了类型推断的能力,让开发者更灵活地处理和操作类型它允许在泛型类型推导过程中捕获一个具体的类型&a…...
JQC-3FF-S-Z 继电器模块使用(arduino)
前言 继电器模块可以控制电流的接通和非接通状态,和开关一样。实际上是用小电流去控制大电流运作的一种“自动开关” 本文只是简单使用继电器模块做一个 led 点亮和熄灭的案例,结合案例可以和 nodemcu 等板子结合做出远程控制开关。 材料准备 杜邦线…...
黑马一站制造数仓实战2
问题 DG连接问题 原理:JDBC:用Java代码连接数据库 Hive/SparkSQL:端口有区别 可以为同一个端口,只要不在同一台机器 项目:一台机器 HiveServer:10000 hiveserver.port 10000 SparkSQL:10001…...
网络I/O模型
网络I/O模型 同步I/O阻塞I/O非阻塞I/OI/O多路复用select函数接口示例 poll函数接口示例 poll 和 select 的区别epoll原理:示例 异步I/O 同步I/O 阻塞I/O 一个基本的C/S模型如下图所图:其中 listen()、connect()、write()、read() 都是阻塞I/O࿰…...
Docker 简介和安装
目录 Docker 是什么 跟普通虚拟机的对比 打包、分发、部署 Docker 部署的优势 Docker 通常用来做什么 重要概念:镜像、容器 安装 镜像加速源 Docker 是什么 Docker 是一个应用打包、分发、部署的工具 你也可以把它理解为一个轻量的虚拟机,它只虚…...
【源码】Spring Data JPA原理解析之Repository自定义方法命名规则执行原理(二)
Spring Data JPA系列 1、SpringBoot集成JPA及基本使用 2、Spring Data JPA Criteria查询、部分字段查询 3、Spring Data JPA数据批量插入、批量更新真的用对了吗 4、Spring Data JPA的一对一、LazyInitializationException异常、一对多、多对多操作 5、Spring Data JPA自定…...
Vue前端中从后端获取图片验证码
前端发送请求 <template><el-form :model"user" :rules"rules" ref"userForm" class"login" label-width"auto" style"max-width: 600px"><el-form-item label"用户名" prop"name…...
【源码】多语言H5聊天室/thinkphp多国语言即时通讯/H5聊天室源码/在线聊天/全开源
多语言聊天室系统,可当即时通讯用,系统默认无需注册即可进入群聊天,全开源 【海外聊天室】多语言H5聊天室/thinkphp多国语言即时通讯/H5聊天室源码/在线聊天/全开源 - 吾爱资源网...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...


