《Linux运维实战:使用Percona XtraBackup物理备份与恢复Mysql数据》
一、Percona XtraBackup工具介绍
Percona XtraBackup是世界上唯一开源、免费的MySQL热备份软件,可为InnoDB和XtraDB数据库执行非阻塞备份。Percona XtraBackup特点如下所示:
1、在不暂停数据库的情况下创建热InnoDB备份。
2、对MySQL进行增量备份。
3、将压缩的MySQL备份流式传输到另一台服务器。
4、在线在MySQL服务器之间移动表。
5、轻松创建新的MySQL复制副本。
6、不增加服务器负载的情况下备份MySQL。
7、Percona XtraBackup根据每秒的IO操作数进行节流。
8、Percona XtraBackup跳过二级索引页面并在准备紧凑备份时重新创建它们。
9、Percona XtraBackup甚至可以从完整备份中导出单个表,无论InnoDB版本如何。
10、FLUSH TABLES WITH READ LOCK备份锁是Percona Server中可用的轻量级替代品。XtraBackup使用它们自动复制非InnoDB数据,以避免阻塞修改InnoDB表的DML查询。
二、安装Percona XtraBackup
参考官方:Percona XtraBackup工具多种安装方式
2.1、环境信息
主机IP | 操作系统 | Mysql版本 | XtraBackup版本 | 类型 |
---|---|---|---|---|
192.168.1.191 | Centos7.6 | 8.0.30 | 8.0.30 | 单机 |
说明:一般来说,建议Percona XtraBackup版本高于或等于Mysql的版本,如果Mysql的版本高于XtraBackup版本,则有可能会备份失败。
2.2、使用YUM存储库安装
1、安装Percona yum存储库
[root@localhost ~]# yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
2、启用存储库
[root@localhost ~]# percona-release enable-only tools release
3、如果Percona XtraBackup打算与上游MySQL Server结合使用,你只需要启用`tools repository
[root@localhost ~]# percona-release enable-only tools
4、通过运行安装Percona XtraBackup
[root@localhost ~]# yum install percona-xtrabackup-80
5、为了能够进行压缩备份,请安装qpress软件包
[root@localhost ~]# yum install qpress
6、要解压缩使用ZSTD压缩算法制作的备份,请安装zstd软件包
[root@localhost ~]# yum install zstd
三、创建备份数据库用户
说明:创建具有完整备份所需的最低权限的数据库用户,如下所示:
mysql> CREATE USER 'bkpuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Lolaage@backup2022' PASSWORD EXPIRE NEVER;
mysql> GRANT BACKUP_ADMIN, PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'bkpuser'@'localhost';
mysql> GRANT SELECT ON performance_schema.log_status TO 'bkpuser'@'localhost';
mysql> GRANT SELECT ON performance_schema.keyring_component_status TO bkpuser@'localhost';
mysql> GRANT SELECT ON performance_schema.replication_group_members TO bkpuser@'localhost';
mysql> FLUSH PRIVILEGES;
如下图所示:
四、xtrabackup全量备份与恢复
说明:xtrabackup配置都是通过选项完成的,也可以通过诸如/etc/my.cnf进行配置,如下所示:
[root@localhost ~]# vim /etc/my.cnf
[xtrabackup]
host=localhost
port=53000
user=bkpuser
password=Lolaage@backup2022
socket=/var/lib/mysql/mysql.sock
target_dir=/data/mysql_backup
4.1、xtrabackup全量备份
说明:xtrabackup默认会读取/etc/my.cnf文件中的datadir参数,可以使用–defaults-file手动指定,注意该参数必须是第一个参数,如下所示:
[root@localhost ~]# xtrabackup --defaults-file=/etc/my.cnf -Hlocalhost -P53000 -ubkpuser -pLolaage@backup2022 \
-S /var/lib/mysql/mysql.sock --backup --target-dir=/data/mysql_backup/`date "+%Y%m%d"` --no-server-version-check#备份后的数据并不处于一致性状态,为了可以用来恢复,需要使用--prepare准备备份集
[root@localhost 20221214]# xtrabackup --defaults-file=/etc/my.cnf -Hlocalhost -P53000 -ubkpuser -pLolaage@backup2022 \
-S /var/lib/mysql/mysql.sock --prepare --target-dir=/data/mysql_backup/`date "+%Y%m%d"` --no-server-version-check
如下图所示,则表明备份成功。
总结:为什么备份完后要准备备份prepare?
一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。它的作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态。prepare操作可以在任何机器上运行准备操作;它不需要位于原始服务器或你打算恢复到的服务器上。您可以将备份复制到实用程序服务器并在那里准备,我这里是在备份完成后进行prepare操作的。
4.2、xtrabackup全量恢复
说明:以下操作请勿在生产环境操作,如下操作仅做恢复测试,建议使用个人本地测试环境进行测试。
1、模拟数据库故障,删除数据库文件
[root@localhost ~]# systemctl stop mysqld
[root@localhost ~]# rm -rf /var/lib/mysql/*
2、快速的恢复数据库中的数据
[root@localhost ~]# xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/data/mysql_backup/20221214
3、恢复数据时,一定要记得更改数据目录下的文件拥有者以及所属组权限,否则mysql无法启动
[root@localhost ~]# chown mysql.mysql /var/lib/mysql -R
[root@localhost ~]# systemctl start mysqld
总结:恢复备份注意数据目录必须为空及权限
在恢复备份之前数据目录必须是空的。另外,需要注意的是,在执行恢复之前需要关闭MySQL服务器。您不能恢复到正在运行的mysqld实例的数据目录(导入部分备份时除外)。由于文件的属性将被保留,在大多数情况下,您需要mysql在启动数据库服务器之前将文件的属主和属组更改为mysql.mysql。
五、xtrabackup增量备份与恢复
5.1、xtrabackup增量备份
说明:要进行增量备份,请像往常一样从完整备份开始。
1、全量备份
[root@localhost ~]# xtrabackup --defaults-file=/etc/my.cnf -Hlocalhost -P53000 -ubkpuser -pLolaage@backup2022 \
-S /var/lib/mysql/mysql.sock --backup --target-dir=/data/mysql_backup/base --no-server-version-check
说明:备份完成后,xtrabackup_checkpoints文件包含一行显示to_lsn,这是备份结束时数据库的LSN。
[root@localhost ~]# cat /data/mysql_backup/base/xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 19460146
last_lsn = 19460146
flushed_lsn = 19460146
redo_memory = 360
redo_frames = 1
2、创建第一次增量备份
[root@localhost ~]# xtrabackup --defaults-file=/etc/my.cnf -Hlocalhost -P53000 -ubkpuser -pLolaage@backup2022 \
-S /var/lib/mysql/mysql.sock --backup --target-dir=/data/mysql_backup/inc1 \
--incremental-basedir=/data/mysql_backup/base --no-server-version-check
说明:备份完成后,xtrabackup_checkpoints文件包含一行显示to_lsn,这是备份结束时数据库的LSN。from_lsn是备份的起始LSN,对于增量备份,它必须与先前基础备份的to_lsn相同。
[root@localhost ~]# cat /data/mysql_backup/inc1/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 19460146
to_lsn = 19518284
last_lsn = 19518284
flushed_lsn = 19518284
redo_memory = 360
redo_frames = 1
3、创建第二次增量备份
[root@localhost ~]# xtrabackup --defaults-file=/etc/my.cnf -Hlocalhost -P53000 -ubkpuser -pLolaage@backup2022 \
-S /var/lib/mysql/mysql.sock --backup --target-dir=/data/mysql_backup/inc2 \
--incremental-basedir=/data/mysql_backup/inc1 --no-server-version-check
说明:备份完成后,xtrabackup_checkpoints文件包含一行显示to_lsn,这是备份结束时数据库的LSN。from_lsn是备份的起始LSN,对于增量备份,它必须与先前基础备份的to_lsn相同。
[root@localhost ~]# cat /data/mysql_backup/inc2/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 19518284
to_lsn = 19541579
last_lsn = 19541579
flushed_lsn = 19541579
redo_memory = 360
redo_frames = 1
4、准备增量备份
#1、第一次
[root@localhost ~]# xtrabackup --defaults-file=/etc/my.cnf -Hlocalhost -P53000 -ubkpuser -pLolaage@backup2022 \
-S /var/lib/mysql/mysql.sock --prepare --apply-log-only --target-dir=/data/mysql_backup/base#2、第二次
[root@localhost ~]# xtrabackup --defaults-file=/etc/my.cnf -Hlocalhost -P53000 -ubkpuser -pLolaage@backup2022 \
-S /var/lib/mysql/mysql.sock --prepare --apply-log-only --target-dir=/data/mysql_backup/base --incremental-dir=/data/mysql_backup/inc1#3、第三次
[root@localhost ~]# xtrabackup --defaults-file=/etc/my.cnf -Hlocalhost -P53000 -ubkpuser -pLolaage@backup2022 \
-S /var/lib/mysql/mysql.sock --prepare --target-dir=/data/mysql_backup/base --incremental-dir=/data/mysql_backup/inc2
说明:增量备份的prepare步骤与完整备份的步骤不同
1、对于全量备份,在准备阶段中,需要将已提交事务从日志文件写入数据文件,回滚未提交的事务,确保数据处于一致性状态。
2、对于增量备份,在准备阶段中,不能回滚未提交的事务,因为事务可能在下次备份中提交。因此必须使用 --apply-log-only选项来阻止回滚阶段,否则你的增量备份将毫无用处。事务回滚后,无法应用下一次的增量备份。
3、如果有多次增量备份,最后一次增量备份prepare准备阶段则不能使用–apply-log-only选项,之前的增量备份则需要使用–apply-log-only选项。
5.2、xtrabackup增量恢复
说明:以下操作请勿在生产环境操作,如下操作仅做恢复测试,建议使用个人本地测试环境进行测试。
1、模拟数据库故障,删除数据库文件
[root@localhost ~]# systemctl stop mysqld
[root@localhost ~]# rm -rf /var/lib/mysql/*
2、快速的恢复数据库中的数据
[root@localhost ~]# xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/data/mysql_backup/base
3、恢复数据时,一定要记得更改数据目录下的文件拥有者以及所属组权限,否则mysql无法启动
[root@localhost ~]# chown mysql.mysql /var/lib/mysql -R
[root@localhost ~]# systemctl start mysqld
总结:恢复备份注意数据目录必须为空及权限
在恢复备份之前数据目录必须是空的。另外,需要注意的是,在执行恢复之前需要关闭MySQL服务器。您不能恢复到正在运行的mysqld实例的数据目录(导入部分备份时除外)。由于文件的属性将被保留,在大多数情况下,您需要mysql在启动数据库服务器之前将文件的属主和属组更改为mysql.mysql。
六、xtrabackup压缩备份与恢复
Percona XtraBackup支持压缩备份,可以使用xbstream压缩或解压缩本地或流式备份。要进行压缩备份,请将选项与和–compress选项一起使用。
6.1、安装qpress
[root@localhost ~]# percona-release enable tools
[root@localhost ~]# yum install qpress -y
6.2、xtrabackup全量备份
1、创建压缩备份
[root@localhost ~]# xtrabackup --defaults-file=/etc/my.cnf -Hlocalhost -P53000 -ubkpuser -pLolaage@backup2022 \
-S /var/lib/mysql/mysql.sock --compress --compress-threads=4 \
--backup --target-dir=/data/mysql_backup/base --no-server-version-check
说明:未使用压缩备份和使用压缩备份之后的文件大小差异,压缩过后是以qp结尾的文件。
[root@localhost ~]# du -sh /data/mysql_backup/base/
71M /data/mysql_backup/base
[root@localhost ~]# du -sh /data/mysql_backup/base/
3.7M /data/mysql_backup/base
6.3、xtrabackup全量恢复
说明:以下操作请勿在生产环境操作,如下操作仅做恢复测试,建议使用个人本地测试环境进行测试。
1、模拟数据库故障,删除数据库文件
[root@localhost ~]# systemctl stop mysqld
[root@localhost ~]# rm -rf /var/lib/mysql/*
2、快速的恢复数据库中的数据
#1、解压缩所有备份文件
[root@localhost ~]# xtrabackup --decompress --target-dir=/data/mysql_backup/base
#2、解压缩文件后,使用以下--prepare选项准备备份
[root@localhost ~]# xtrabackup --defaults-file=/etc/my.cnf -Hlocalhost -P53000 -ubkpuser -pLolaage@backup2022 \
-S /var/lib/mysql/mysql.sock --prepare --target-dir=/data/mysql_backup/base --no-server-version-check
#3、使用--copy-back选项恢复备份
[root@localhost ~]# xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/data/mysql_backup/base
3、恢复数据时,一定要记得更改数据目录下的文件拥有者以及所属组权限,否则mysql无法启动
[root@localhost ~]# chown mysql.mysql /var/lib/mysql -R
[root@localhost ~]# systemctl start mysqld
总结:恢复备份注意数据目录必须为空及权限
在恢复备份之前数据目录必须是空的。另外,需要注意的是,在执行恢复之前需要关闭MySQL服务器。您不能恢复到正在运行的mysqld实例的数据目录(导入部分备份时除外)。由于文件的属性将被保留,在大多数情况下,您需要mysql在启动数据库服务器之前将文件的属主和属组更改为mysql.mysql。
七、xtrabackup部分备份与恢复
说明:xtrabackup支持在启用innodb_file_per_table选项时进行部分备份。创建部分备份的方法有以下三种:
1、将表名与正则表达式匹配
2、提供文件中的表名列表
3、提供数据库列表
指定部分表的选项
--tables=name:用正则表达式的方式指定包括的表
--tables-file=name:将要包括的表名放在指定的文件中
--tables-exclude=name:用正则表达式的方式指定排除的表,该选项比 --tables 的优先级高。指定部分数据库的选项
--databases=name:用正则表达式的方式指定包括的库
--databases-file=name:将要包括的库名放在指定的文件中
--databases-exclude=name:用正则表达式的方式指定排除的库,该选项比 --databases 的优先级高。
说明:这里就以物理备份某库为例。
#1、创建部分备份
[root@localhost ~]# xtrabackup --defaults-file=/etc/my.cnf -Hlocalhost -P53000 -ubkpuser -pLolaage@backup2022 \
-S /var/lib/mysql/mysql.sock --backup --target-dir=/data/mysql_backup/base \
--databases=possecu_3 --no-server-version-check#2、准备部分备份
[root@localhost ~]# xtrabackup --defaults-file=/etc/my.cnf -Hlocalhost -P53000 -ubkpuser -pLolaage@backup2022 \
-S /var/lib/mysql/mysql.sock --prepare --export --target-dir=/data/mysql_backup/base --no-server-version-check
总结:整理不易,如果对你有帮助,可否点赞关注一下?
更多详细内容请参考:《Linux运维篇:Linux系统运维指南》
《Linux运维实战:使用Percona XtraBackup物理备份与恢复Mysql数据》相关推荐
- ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)
视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...
- ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析
视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...
- 信息学奥赛真题解析(玩具谜题)
玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...
- 信息学奥赛之初赛 第1轮 讲解(01-08课)
信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...
- 信息学奥赛一本通习题答案(五)
最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...
- 信息学奥赛一本通习题答案(三)
最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...
- 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题
第1章 快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章 素数 第 3 章 约数 第 4 章 同余问题 第 5 章 矩阵乘法 第 6 章 ...
- 信息学奥赛一本通题目代码(非题库)
为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...
- 信息学奥赛一本通(C++版) 刷题 记录
总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...
- 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离
首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...
最新文章
- 详细的mongo工具手册,包含常见CURD+条件操作+聚合+案例
- boost::geometry::srs::transformation用法的测试程序
- 微信小程序出现【需要进行身份验证】弹框解决方法
- Java技术栈---语言基础
- 鸡肉和鸡蛋–测试前解决Spring属性
- sigslot库源码分析
- SIEM部署失败的五大原因
- android应用开发---(第1章)android基础学习之六大Layout布局
- 基于Matlab----RSSI测距定位技术性能仿真
- shell脚本遍历文件夹下所有文件
- 计算机交叉专业考研方向,与理工科交叉的计算机专业考研方向有哪些?
- elasticsearch查看版本号
- JAVA图书管理系统不用数据库_java简单的图书管理系统(只用java代码不用数据库和可视化界面,一个管理员表和图书表)...
- 记录WIN10选择文件右键后资源管理器无响应的解决方法
- ERROR: No matching distribution found for XXXXX 国内的镜像源来加速网络
- 本原多项式/PRBS编码
- MySQL(图形化界面)
- 开源倾情奉献:基于.NET打造IP智能网络视频监控系统(一)开放源代码
- 智能养老监测系统设计
- 为什么不能结账_为什么其他结帐行总是移动得更快
热门文章
- 后端返回数组对象(id重复)来去重并保留第一个
- 条码用什么条码标签打印软件可以达到A级
- 我对SNS游戏的初步理解
- gmail收件箱标签设置_Gmail已在收件箱中添加了新的“类别标签”功能
- 2022年宜昌助理工程师职称评审流程和条件是什么呢?甘建二
- Android开发技巧!怒斩获了30家互联网公司offer,大厂直通车!
- r语言中popsd和sd的区别_R语言与地图(一)
- mysql 有数据就修改,无数据则新增
- windows 找不到文件 ‘C:\ApplicationC\UltraEdit24_18212\UltraEdit24.20.0.40(x64)\UltraEdit\uedit32.exe’
- linux下载安装一个软件,怎么创建快捷方式