【数据库8.0备份还原】之Percona XtraBackup

发布时间:2024年01月16日

Percona XtraBackup备份数据库

yum源安装:网站: https://repo.percona.com/yum/

Percona XtraBackup 下载网站:https://repo.percona.com/yum/
https://www.percona.com/downloads
官方下载太慢

1、Percona XtraBackup的介绍

无论是 24x7 高负载服务器还是低事务量服务器 环境中,Percona XtraBackup 旨在实现无缝备份 过程,而不会中断生产中服务器的性能 环境。Percona XtraBackup (PXB) 是一个 100% 开源备份解决方案,为希望从 MySQL 的全面、响应迅速且经济灵活的数据库支持中受益的组织提供商业支持。

Percona XtraBackup 是世界上唯一的开源免费 MySQL 热备份 为 InnoDB 和 XtraDB 执行非阻塞备份的软件 数据库。使用 Percona XtraBackup,您可以获得以下优势:

快速可靠地完成备份
备份期间不间断的事务处理
节省磁盘空间和网络带宽
自动备份验证
由于恢复时间更快,正常运行时间更长

xtrabakackup有3个工具,分别是
xtrabakup、
innobakupex、

xbstream 通过流数据功能,可将备份内容打包并传给管道后的压缩工具进行压缩
xtrabackup 支持InnoDB,XtraDB
innobakupex 支持Myisam,InnoDB、XtraaDB
xbstream:以专有格式压缩 xtrabackup 输出的信息

支持的存储引擎:
Percona XtraBackup 可以备份 MySQL 8.0 服务器以及 Percona Server for MySQL with XtraDB、Percona Server for MySQL 8.0 和 Percona XtraDB Cluster 8.0 上的 InnoDB、XtraDB、MyISAM 和 MyRocks 表中的数据。
局限性:

1、Percona XtraBackup 8.0 目前不可能同时支持 8.0 之前的版本
2、Percona XtraBackup 2.4 支持 MySQL 和 Percona Server for MySQL 5.65.7 数据库
3、Percona XtraBackup 8.1 不支持对数据库进行备份 在 MySQL 8.1 之前的版本中创建,Percona Server for MySQL 或 Percona XtraDB 集群。

2、Percona XtraBackup安装

用阿里或者清华大学percona源yum安装Percona XtraBackup==
事例:我用的redhat9安装这个软件
写源仓库:
cat <>/etc/yum.repos.d/percona.repo
[percona]
name = Percona
baseurl = https://mirrors.tuna.tsinghua.edu.cn/percona/release/$releasever/RPMS/$basearch
enabled = 1
gpgcheck = 0

[epel]
name=epelrepo
baseurl=https://mirrors.aliyun.com/epel/$releasever/$basearch
gpgcheck=0
enable=1
eof

[root@manged ~]# yum list all| grep xtraback -i    查看xtraback有哪些软件包
报错
Errors during downloading metadata for repository 'epel':
  - Status code: 404 for https://mirrors.aliyun.com/epel/9/x86_64/repodata/repomd.xml (IP: 118.112.22.214)
错误:为仓库 'epel' 下载元数据失败 : Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried

去epel官网:https://docs.fedoraproject.org/en-US/epel/ 下载额外的软件包。

dnf install
https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm

如果安装失败,就下载下来rpm安装:

[root@manged ~]# wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
[root@manged ~]# rpm -ivh epel-release-latest-9.noarch.rpm 
可以[root@manged ~]# yum repolist   查看
[root@manged ~]# yum list all| grep xtraback -i   好了耶
Repository epel is listed more than once in the configuration
holland-xtrabackup.noarch                                                                1.2.10-1.el9                                   epel               
percona-xtrabackup-24.x86_64                                                             2.4.28-1.el9                                   percona            
percona-xtrabackup-24-debuginfo.x86_64                                                   2.4.28-1.el9                                   percona            
percona-xtrabackup-24-debugsource.x86_64                                                 2.4.28-1.el9                                   percona            
percona-xtrabackup-80.x86_64                                                             8.0.35-30.1.el9                                percona            
percona-xtrabackup-80-debuginfo.x86_64                                                   8.0.35-30.1.el9                                percona            
percona-xtrabackup-80-debugsource.x86_64                                                 8.0.35-30.1.el9                                percona            
percona-xtrabackup-81.x86_64                                                             8.1.0-1.1.el9                                  percona            
percona-xtrabackup-81-debuginfo.x86_64                                                   8.1.0-1.1.el9

[root@manged ~]# yum install percona-xtrabackup-80
安装对应数据库版本的,速度快多了。

3、Percona XtraBackup8.0的使用

常用选项:  
   --host     指定主机
   --user     指定用户名
   --password    指定密码
   --port     指定端口
   --databases     指定数据库
   --incremental    创建增量备份
   --incremental-basedir   指定包含完全备份的目录
   --incremental-dir      指定包含增量备份的目录   
   --apply-log        对备份进行预处理操作 
   --defaults-file	  指定默认配置文件,默认是读取/etc/my.cf

一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。
–redo-only 不回滚未提交事务
–copy-back 恢复备份目录

1.全库备份和还原

一、全库备份
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/backup -uroot -predhat -H localhost -P 3306

-p 后面是mysql的密码 -H 后面是主机,支持远程备份,-P是端口

   如果出现如下问题是在没有创建/data/backup/目录
2023-12-13T18:05:19.164770+08:00 0 [Note] [MY-011825] [Xtrabackup] Redo Log Archiving is not set up.
2023-12-13T18:05:19.257242+08:00 0 [ERROR] [MY-011825] [Xtrabackup] cannot mkdir: 2 /data/backup/

出现的这个没有权限问题:

2023-12-13T11:40:23.815725-05:00 0 [ERROR] [MY-011825] [Xtrabackup] failed to execute query 'LOCK INSTANCE FOR BACKUP' : 1227 (42000) 
Access denied; you need (at least one of) the BACKUP_ADMIN privilege(s) for this operation

解决方法:

GRANT BACKUP_ADMIN ON *.* TO 'root'@'localhost';  
FLUSH PRIVILEGES;

二、数据库恢复
删掉数据库:

先停掉数据库systemctl stop mysqld
rm -rf  /var/lib/mysql/*         mysql这个目录的所有者,所属组都是mysql   
这个目录删除之后,重启数据库就是一个全新的数据库

启动数据库,这时是一个全新的数据库。

备份之前要删除/var/lib/mysql/* 的文件,并且先停掉数据库,还原的时候数据库dead状态
先备份备份集:
备份后的数据并不处于一致性状态,为了可以用来恢复,需要使用-prepare准备备份集
[root@redhat ~]# xtrabackup --prepare --target-dir=/data/backup 准备数据备份集
[root@redhat ~]# xtrabackup --copy-back --target-dir=/data/backup 备份
然后chown mysql:mysql /var/lib/mysql/ -R
再重启数据库就完成了。非常完美!

注意:好像数据库版本不一样,还原的时候会出错

2.增量备份和还原

先进行全备:
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/backup -uroot -predhat -H localhost -P 3306
增备份1:
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/inc1 --incremental-basedir=/data/backup -uroot -predhat -H localhost -P 3306

解释:target-dir=/data/inc1中的inc1目录不用自己创建,--incremental-basedir=/data/backup增备份是在全备的基础上做得,这个参数是填全备的路径,全备和增备的目录要分开,不能放在一起。

增备份2:
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/inc2 --incremental-basedir=/data/inc1 -uroot -predhat -H localhost -P 3306

第二天也做了增量备份 ,incremental-basedir=/data/inc1,这里的参数是参照增备1里备份的,所以这个参数是填增备1的路径。

备份好后会在/data出现3个目录,一个是全备的数据,还有个增备1的数据,还有个增备2的数据。

恢复数据:
准备还原命令:
xtrabackup --defaults-file=/etc/my.cnf --prepare --apply-log-only --target-dir=/data/backup/

xtrabackup --defaults-file=/etc/my.cnf --prepare --apply-log-only --target-dir=/data/backup --incremental-dir=/data/inc1/

xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/data/backup --incremental-dir=/data/inc2/

以上命令就是把增量备份合并到完全备份的日志里,到时候直接还原完全备份的目录数据就行

注意:最好一次把增量备份恢复到全部不要加 --apply-log-only,不然会出现问题,说你没有准备好。

恢复数据到目录:
停止数据库并清空数据库目录
xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/data/backup 恢复
chown mysql:mysql /var/lib/mysql/ -R 把文件的所有文件属组改成mysql

重启数据库,所有的数据都在,实验完成!👌
遇到问题:
当最后一次增备加了 --apply-log-only,还原的时候会报这个错误:

2023-12-15T08:03:29.481391-05:00 0 [Note] [MY-011825] [Xtrabackup] cd to /datas/backup/
2023-12-15T08:03:29.481464-05:00 0 [ERROR] [MY-011825] [Xtrabackup] The target is not fully prepared. Please prepare it without option --apply-log-only
解决方法:
xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/datas/backup/
xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/datas/backup
解释:也就是在做一次全备份,并且全备的时候删除--apply-log-only,再进行还原,这时候就成功了。
3.差异备份和还原

先进行全备:
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/backup -uroot -predhat -H localhost -P 3306
增备份1:
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/inc1 --incremental-basedir=/data/backup -uroot -predhat -H localhost -P 3306
增备份2:
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/inc2 --incremental-basedir=/data/backup -uroot -predhat -H localhost -P 3306

解释:差异备份跟增量备份其实差不多,只不过增量备份每次的参照物是前一个,而差异备份的参照物就是全备

恢复数据:
准备还原命令:
xtrabackup --defaults-file=/etc/my.cnf --prepare --apply-log-only --target-dir=/data/backup/

xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/data/backup --incremental-dir=/data/inc2/

解释:准备还原只需要第一次备份和最后一次备份就行

恢复数据到目录:
停止数据库并清空数据库目录
xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/data/backup 恢复
chown mysql:mysql /var/lib/mysql/ -R 把文件的所有文件属组改成mysql
重启数据库,所有的数据都在,差异备份实验完成!👌

4.差异备份和增量备份的区别

在这里插入图片描述
总结一下,感觉差异备份更好用。差异备份都是基于全备备份的,而且还原的 时候只需要准备全备和最后一次增量备份就行。

5.压缩备份和还原

xtrabackup --defaults-file=/etc/my.cnf --backup --compress --target-dir=/data/backup/compressed/ -uroot -predhat -H localhost -P3306
解释:compress就是压缩的命令,因为数据库的备份的数据比较大,占用的空间也比较多,而压缩就能减少文件大小。

xtrabackup --defaults-file=/etc/my.cnf --backup --compress-threads=4 --target-dir=/data/backup/compress/ -uroot -predhat -H localhost -P3306
如果要加速压缩,可以使用--compress-threads=4 ,使用四个线程同时进行压缩

解压缩和还原:
xtrabackup --defaults-file=/etc/my.cnf --decompress --target-dir=/data/backup/compressed/
解释:解压命令 --decompress,使用这个压缩的备份集在准备备份之前需要解压,解压工具是qpress(报错就安装这个),解压的原来的文件不会被删除,可以使用 --remove-original选项清除。

xtrabackup --prepare --target-dir=/data/backup/compressed/ 准备数据集
xtrabackup --copy-back --target-dir=/data/backup/compressed 还原

解释:跟全备一样的还原
chown mysql:mysql /var/lib/mysql/ -R 把文件的所有文件属组改成mysql
重启数据库,所有的数据都在,压缩备份实验完成!👌

文章来源:https://blog.csdn.net/qq_62331653/article/details/135631649
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。