使用第三方工具percona-xtrabackup进行数据备份与恢复

目录

准备工作

开始安装

innobackupex的使用

完全备份

增量备份

数据恢复


本次需要用到的软件

  • mysql 5.7.35
  • percona-xtrabackup-24-2.4.8

ps:---MySQL必须是5.7的版本,在8.0之后已经不支持 percona-xtrabackup-24

系统版本CentOS7.9

准备工作

下载软件percona-xtrabackup

链接  Software Downloads - Percona

当然,假如使用RHEL 9 或者 Rocky Linux 9 以上的版本 软件的版本也要求变高,如图所示

这两个是mysql的扩展包也需要安装

mysql-community-libs-compat-5.7.35-1.el7.x86_64.rpm
mysql-community-devel-5.7.35-1.el7.x86_64.rpm

由于安装此原件需要过多的扩展包,配置阿里云镜像源

wget -O https://mirrors.aliyun.com/repo/Centos-7.repo
[root@localhost script] yum makecache 
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
base                                                                          | 3.6 kB  00:00:00     
extras                                                                        | 2.9 kB  00:00:00     
local                                                                         | 3.6 kB  00:00:00     
percona-release-noarch                                                        | 1.5 kB  00:00:00     
percona-release-x86_64                                                        | 2.9 kB  00:00:00     
prel-release-noarch                                                           | 1.5 kB  00:00:00     
updates                                                                       | 2.9 kB  00:00:00     
元数据缓存已建立

或者可以在官方源中寻找yum仓库

yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

开始安装

(CentOS 7.9)

[root@localhost src] ls
mysql  percona-xtrabackup-24-2.4.8-1.el7.x86_64.rpm

[root@localhost src] yum localinstall percona-xtrabackup-24-2.4.8-1.el7.x86_64.rpm 
已加载插件:fastestmirror, langpacks
正在检查 percona-xtrabackup-24-2.4.8-1.el7.x86_64.rpm: percona-xtrabackup-24-2.4.8-1.el7.x86_64
percona-xtrabackup-24-2.4.8-1.el7.x86_64.rpm 将被安装
正在解决依赖关系
--> 正在检查事务
---> 软件包 percona-xtrabackup-24.x86_64.0.2.4.8-1.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

========================================================================================
 Package             架构   版本        源                                         大小
========================================================================================
正在安装:
 percona-xtrabackup-24
                     x86_64 2.4.8-1.el7 /percona-xtrabackup-24-2.4.8-1.el7.x86_64  31 M

事务概要
========================================================================================
安装  1 软件包

总计:31 M
安装大小:31 M
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : percona-xtrabackup-24-2.4.8-1.el7.x86_64                            1/1 
  验证中      : percona-xtrabackup-24-2.4.8-1.el7.x86_64                            1/1 

已安装:
  percona-xtrabackup-24.x86_64 0:2.4.8-1.el7                                            

完毕!

Percona XtraBackup 2.4 版本主要提供了两个核心命令来进行MySQL的备份操作:

xtrabackup:这个命令是用于InnoDB和XtraDB存储引擎的物理备份工具,专注于高效、可靠的热备份。它能够执行全备(full backup)和增量备份(incremental backup),并在备份过程中不影响数据库的正常运行。

innobackupex:这是一个封装脚本,实际上是对xtrabackup命令的封装和扩展,旨在提供与mysqldump类似的使用体验,同时结合MyISAM等非事务表的支持。通过innobackupex,可以对包含InnoDB和非InnoDB表的MySQL实例进行热备份,它能够处理全备、增量备份以及备份的准备(prepare)阶段,以便备份文件可以被直接用于恢复。

innobackupex的使用

完全备份

[root@localhost src] innobackupex --user=root --password=Openlab123! --no-timestamp /db/full

这条命令是用来使用innobackupex工具执行一次MySQL数据库的全量备份操作。具体参数解释如下:

  • innobackupex:是命令名称,表示要使用的工具是Percona XtraBackup的封装脚本,用于执行MySQL数据库备份。

  • --user=root:指定连接MySQL数据库的用户名为root。这是备份操作需要的数据库用户权限,用户必须拥有足够的权限来读取数据库的所有数据。

  • --password=Openlab123!:指定连接MySQL数据库的密码为Openlab123!。请注意,在实际使用中直接在命令行中暴露密码可能会有安全风险,建议通过其他更安全的方式传递密码,如使用环境变量或配置文件。

  • --no-timestamp此选项指示innobackupex不要在备份目录名中自动添加时间戳。默认情况下,innobackupex会在备份目标目录后面加上一个时间戳,以区分不同的备份。如果使用--no-timestamp,则备份会被直接放在指定的目录下,这可能导致覆盖之前的备份,需谨慎使用。

  • /db/full:这是指定的备份目标目录。备份将会被保存到这个路径下。如果没有提供绝对路径,那么路径会被认为是相对于当前工作目录的。由于使用了--no-timestamp,所有备份文件都会直接存放在/db/full目录下,没有子目录区分。

该命令执行的操作是:以root用户身份,使用密码Openlab123!登录MySQL数据库,并执行一次全量备份,备份文件将被保存到/db/full目录下,且不会在目录名后添加时间戳。请确保在执行此类备份操作前,已正确配置MySQL的访问权限,并考虑备份文件的管理策略,避免无意识的覆盖重要备份。

使用root账号实现效果

使用其他账号需要增加权限

创建用户
mysql> CREATE USER 'backup'@'localhost' IDENTIFIED BY 'Openlab123!';

给予用户权限
mysql> grant SELECT,RELOAD,SHOW DATABASES,LOCK TABLES,SUPER,PROCESS,REPLICATION CLIENT on *.* to backup@'localhost' identified by 'Openlab123!';
[root@localhost src] rm -rf /db
[root@localhost src] innobackupex --user=backup --password=Openlab123! --no-timestamp /db/full

同样也能实现功能

查看备份的目录

[root@localhost src]# ls /db/full/
backup-my.cnf   ibdata1      MyScl  performance_schema  xtrabackup_checkpoints  xtrabackup_logfile
ib_buffer_pool  Myschool_db  mysql  sys                 xtrabackup_info

增量备份

在执行增量备份之前,你需要有一个全量备份的基础。增量备份基于上一次的备份进行,只备份自那之后发生变化的数据。

[root@localhost src] innobackupex --user=backup --password=Openlab123! --host=localhost --port=3306 --incremental /db/incr_v1  --incremental-basedir=/db/full

这里,--incremental-basedir指定了上一次全量备份的位置。

实现效果

数据恢复

已经完成了备份的准备阶段,现在要恢复数据:

  1. 停止MySQL服务:确保MySQL服务已经停止。

  2. 复制备份文件:将备份文件复制到MySQL的数据目录(通常是/var/lib/mysql)或者你自定义的数据存放位置。

  3. 调整文件所有权和权限:确保MySQL服务用户(如mysql:mysql)拥有这些文件的适当权限。

  4. 启动MySQL服务:启动MySQL服务,数据应该已经被恢复到备份时的状态。

请注意,实际操作时务必根据系统环境和需求进行适当的调整。此外,定期检查和验证备份的有效性是非常重要的,以确保在真正需要时能够成功恢复数据。

以下是一个完整的恢复示例(已经备份好数据了):

停止MySQL服务: 首先,确保MySQL服务已经停止,以避免数据不一致的问题。在大多数Linux系统上,可以通过以下命令实现:

systemctl stop mysql

准备恢复目录: 确保MySQL的数据目录为空或已移除旧数据(小心操作,避免误删生产数据!)

[root@localhost ~] ls /var/lib/mysql
auto.cnf         ib_buffer_pool  MyScl               public_key.pem
back_db          ibdata1         mysql               server-cert.pem
ca-key.pem       ib_logfile0     mysql.sock          server-key.pem
ca.pem           ib_logfile1     mysql.sock.lock     sys
client-cert.pem  ibtmp1          performance_schema
client-key.pem   Myschool_db     private_key.pem

[root@localhost ~] rm -rf /var/lib/mysql/*

复制备份文件: 将备份的文件复制到MySQL的数据目录。--copy-back选项会自动处理文件复制和权限调整。

[root@localhost ~] innobackupex --copy-back /db/full/

调整权限: 如果在复制过程中权限没有被自动调整,可能需要手动调整MySQL数据目录的权限,确保MySQL服务用户(如 mysql:mysql)有正确的访问权限。

[root@localhost ~] ll /var/lib/mysql
总用量 12324
drwxr-x---. 2 root root       48 5月  31 14:25 back_db
-rw-r-----. 1 root root      282 5月  31 14:25 ib_buffer_pool
-rw-r-----. 1 root root 12582912 5月  31 14:25 ibdata1
drwxr-x---. 2 root root      166 5月  31 14:25 Myschool_db
drwxr-x---. 2 root root      254 5月  31 14:25 MyScl
drwxr-x---. 2 root root     4096 5月  31 14:25 mysql
drwxr-x---. 2 root root     8192 5月  31 14:25 performance_schema
drwxr-x---. 2 root root     8192 5月  31 14:25 sys
-rw-r-----. 1 root root      434 5月  31 14:25 xtrabackup_info

# 给予权限
[root@localhost ~] chown -R mysql:mysql /var/lib/mysql

[root@localhost ~] ll -a /var/lib/mysql
总用量 122964
drwxr-x--x.  8 mysql mysql     4096 5月  31 14:27 .
drwxr-xr-x. 64 root  root      4096 5月  30 10:49 ..
-rw-r-----.  1 mysql mysql       56 5月  31 14:27 auto.cnf
drwxr-x---.  2 mysql mysql       48 5月  31 14:25 back_db
-rw-------.  1 mysql mysql     1680 5月  31 14:27 ca-key.pem
-rw-r--r--.  1 mysql mysql     1112 5月  31 14:27 ca.pem
-rw-r--r--.  1 mysql mysql     1112 5月  31 14:27 client-cert.pem
-rw-------.  1 mysql mysql     1680 5月  31 14:27 client-key.pem
-rw-r-----.  1 mysql mysql      282 5月  31 14:25 ib_buffer_pool
-rw-r-----.  1 mysql mysql 12582912 5月  31 14:27 ibdata1
-rw-r-----.  1 mysql mysql 50331648 5月  31 14:27 ib_logfile0
-rw-r-----.  1 mysql mysql 50331648 5月  31 14:27 ib_logfile1
-rw-r-----.  1 mysql mysql 12582912 5月  31 14:27 ibtmp1
drwxr-x---.  2 mysql mysql      166 5月  31 14:25 Myschool_db
drwxr-x---.  2 mysql mysql      254 5月  31 14:25 MyScl
drwxr-x---.  2 mysql mysql     4096 5月  31 14:25 mysql
srwxrwxrwx.  1 mysql mysql        0 5月  31 14:27 mysql.sock
-rw-------.  1 mysql mysql        6 5月  31 14:27 mysql.sock.lock
drwxr-x---.  2 mysql mysql     8192 5月  31 14:25 performance_schema
-rw-------.  1 mysql mysql     1680 5月  31 14:27 private_key.pem
-rw-r--r--.  1 mysql mysql      452 5月  31 14:27 public_key.pem
-rw-r--r--.  1 mysql mysql     1112 5月  31 14:27 server-cert.pem
-rw-------.  1 mysql mysql     1676 5月  31 14:27 server-key.pem
drwxr-x---.  2 mysql mysql     8192 5月  31 14:25 sys
-rw-r-----.  1 mysql mysql      434 5月  31 14:25 xtrabackup_info

启动MySQL服务: 最后,重新启动MySQL服务以加载恢复的数据。

[root@localhost ~] systemctl start mysql

验证数据恢复: 登录MySQL,检查数据库是否正确恢复。

[root@localhost ~] mysql -u root -p
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| MyScl              |
| Myschool_db        |
| back_db            |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妍妍的宝贝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值