前言
在某起案件中,办案人员获取了RDS云数据库备份文件,需要我们在本地重构数据库并进行分析。本文将详细介绍使用开源软件Percona Xtraxtrabackup将云数据库Mysql的备份文件恢复到自建数据库中的操作步骤。
1、环境准备
系统推荐使用Linux CentOS,环境安装较方便。
本文操作环境选择:
Centos版本:CentOS7
数据库版本:MySQL 8.0
xtrabackup版本:8.0.8
需要的xtrabackup环境会受到版本影响,为了减少出错,建议:
xtrabackup8.0搭配mysql8.0
xtrabackup2.4搭配mysql5.7
xtrabackup2.3搭配mysql5.6及以下
但初步解包xb不受版本限制,使用8.0版本即可。
安装Mysql参照:
https://www.cnblogs.com/shenjianping/p/10984540.html
安装XtraBackup参照:
https://blog.csdn.net/qq_42534026/article/details/106304496
xtrabackup源代码分享:
https://pan.baidu.com/s/1Cj-fklCoL3nVJ69oYkukJg
提取码:ni8a
2、上传备份.xb文件
本文使用xshell的sftp进行上传备份文件。
put 本地文件位置 上传的位置
3、解包.xb文件
目前物理备份集文件有以下几种格式:
.tar压缩包(.tar.gz后缀)
.xbstream压缩包(.xb.gz后缀)
.xbstream文件包(_qp.xb后缀)
.xbstream qpress压缩包(_xb.qp后缀)
对于tar 压缩包 (.tar.gz 后缀),使用命令:
tar -izxvf <数据备份文件名> -C /home/mysql/data
对于xbstream 压缩包 (.xb.gz 后缀),使用命令:
gzip -d -c <数据备份文件名> | xbstream -x -v -C /home/mysql/data
对于xbstream 文件包(_qp.xb 后缀),使用命令:
## 解包
cat <数据备份文件名> | xbstream -x -v -C /home/mysql/data
## MySQL 5.6/5.7解压
innobackupex --decompress --remove-original /home/mysql/data
## MySQL 8.0解压
xtrabackup --decompress --remove-original --target-dir=/home/mysql/data
对于xbstream qpress压缩包(_xb.qp后缀),使用命令:
qpress -do <数据备份文件名> | xbstream -x -v -C /home/mysql/data
执行如下命令,查询解压后生成的文件
ls -l /home/mysql/data
执行如下命令,恢复解压好的备份文件
## MySQL 5.6/5.7
innobackupex --defaults-file=/home/mysql/data/backup-my.cnf --apply-log /home/mysql/data
## MySQL 8.0
xtrabackup --prepare --target-dir=/home/mysql/data
xtrabackup --datadir=/var/lib/mysql --copy-back --target-dir=/home/mysql/data
对于xbstream qpress压缩包(_xb.qp后缀),使用命令:
qpress -do <数据备份文件名> | xbstream -x -v -C /home/mysql/data
ls -l /home/mysql/data
#执行如下命令,恢复解压好的备份文件
## MySQL 5.6/5.7
innobackupex --defaults-file=/home/mysql/data/backup-my.cnf --apply-log /home/mysql/data
## MySQL 8.0
xtrabackup --prepare --target-dir=/home/mysql/data
xtrabackup --datadir=/var/lib/mysql --copy-back --target-dir=/home/mysql/data
本文以下操作是针对_xb.qp压缩包格式文件包进行恢复实战。
01
xtrabackup解包.xb
cat xxx.xb | xbstream -x -v -C /home/data/ 解包至/data
解压.xb压缩包后,得到文件后缀为.qp的压缩文件,还需要再次进行解压操作。
02
解压.qp文件
xtrabackup --decompress --remove-original --target-dir=/home/mysql/data
这一步可能会提示缺少qpress,上面的环境报已经提供该文件,使用一些命令处理qpress即可。
chmod 775 qpress
cp qpress /usr/bin
经过2次解包后,已经可以恢复正常的文件结构。在解压后的文件中找到xtrabackup_info文件,可以找到原始mysql版本,以及压缩使用的xtrabackup版本,user,备份时间等信息。
如图上使用的xtrabackup为8.0.8,mysql版本为8.0.18,则不需要再进行更换xtrabackup。
如遇到xtrabackup为2.X版本,则需更换对应的xtrabackup。
#如何更换xtrabackup版本
yum remove percona-xtrabackup-80.x86_64
y
#安装对应xtrabackup版本
yum localinstall percona-xtrabackup-2.X.rpm
4、恢复解压好的备份文件
#执行如下命令,恢复解压好的备份文件。
/home/mysql/data为解压后的备份文件路径,/var/lib/mysql为要恢复到的路径,可自定义
## MySQL 8.0
xtrabackup --prepare --target-dir=/home/mysql/data
xtrabackup --datadir=/var/lib/mysql --copy-back --target-dir=/home/mysql/data
恢复时请耐心等待,若系统返回如下类似结果,则说明备份文件已成功恢复。
5、修改权限及配置
恢复完成后,还需要进行最后的配置,防止重建后报错。
#1、修改恢复文件夹的用户权限
chown -R mysql:mysql /home/mysql/data
#2、编辑backup-my.cnf文件
在[mysqld]下增加
lower_case_table_names=1
注释不需要的参数,如没有就不用管
#innodb_log_checksum_algorithm
#innodb_fast_checksum
#innodb_log_block_size
#innodb_doublewrite_file
#innodb_encrypt_algorithm
#rds_encrypt_data
#redo_log_version
#master_key_id
#server_uuid
如不知道数据库密码,还需要增加参数以跳过密码验证。
skip-grant-tables
6、启动mysql数据库
以上配置完成后,安装对应版本的mysql,使用命令启动。
mysqld --defaults-file=/home/mysql/data/backup-my.cnf --user=mysql --datadir=/home/mysql/data &
如以上流程没有报错,是可以直接启动mysql的。
启动后,新建shell窗口,使用mysql -uroot -p 密码 进入mysql数据库,如添加skip-grant-tables参数,可直接跳过数据库权限验证,直接进入数据库。
来源:广西南宁平衡信息技术有限公司,平衡郭德纲
本文始发于微信公众号(电子物证):【阿里云】RDS MySQL备份文件恢复实战
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论