【阿里云】RDS MySQL备份文件恢复实战

  • A+
所属分类:安全闲碎

前言

      在某起案件中,办案人员获取了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 本地文件位置 上传的位置
【阿里云】RDS MySQL备份文件恢复实战


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.7innobackupex --defaults-file=/home/mysql/data/backup-my.cnf --apply-log /home/mysql/data
## MySQL 8.0xtrabackup --prepare --target-dir=/home/mysql/dataxtrabackup --datadir=/var/lib/mysql --copy-back --target-dir=/home/mysql/data

对于xbstream qpress压缩包(_xb.qp后缀),使用命令:

qpress -do  <数据备份文件名>  | xbstream -x -v -C /home/mysql/datals -l /home/mysql/data#执行如下命令,恢复解压好的备份文件## MySQL 5.6/5.7innobackupex --defaults-file=/home/mysql/data/backup-my.cnf --apply-log /home/mysql/data
## MySQL 8.0xtrabackup --prepare --target-dir=/home/mysql/dataxtrabackup --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
【阿里云】RDS MySQL备份文件恢复实战

       解压.xb压缩包后,得到文件后缀为.qp的压缩文件,还需要再次进行解压操作。


02

解压.qp文件            

xtrabackup --decompress --remove-original --target-dir=/home/mysql/data

这一步可能会提示缺少qpress,上面的环境报已经提供该文件,使用一些命令处理qpress即可。

chmod 775 qpresscp qpress /usr/bin
【阿里云】RDS MySQL备份文件恢复实战

       经过2次解包后,已经可以恢复正常的文件结构。在解压后的文件中找到xtrabackup_info文件,可以找到原始mysql版本,以及压缩使用的xtrabackup版本,user,备份时间等信息。

【阿里云】RDS MySQL备份文件恢复实战

   如图上使用的xtrabackup为8.0.8,mysql版本为8.0.18,则不需要再进行更换xtrabackup。

如遇到xtrabackup为2.X版本,则需更换对应的xtrabackup。

#如何更换xtrabackup版本yum remove percona-xtrabackup-80.x86_64y
【阿里云】RDS MySQL备份文件恢复实战
#安装对应xtrabackup版本yum localinstall percona-xtrabackup-2.X.rpm
【阿里云】RDS MySQL备份文件恢复实战


4、恢复解压好的备份文件

#执行如下命令,恢复解压好的备份文件。/home/mysql/data为解压后的备份文件路径,/var/lib/mysql为要恢复到的路径,可自定义## MySQL 8.0xtrabackup --prepare --target-dir=/home/mysql/dataxtrabackup --datadir=/var/lib/mysql --copy-back --target-dir=/home/mysql/data

恢复时请耐心等待,若系统返回如下类似结果,则说明备份文件已成功恢复。

【阿里云】RDS MySQL备份文件恢复实战
【阿里云】RDS MySQL备份文件恢复实战


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
【阿里云】RDS MySQL备份文件恢复实战

    如不知道数据库密码,还需要增加参数以跳过密码验证。

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备份文件恢复实战

来源:广西南宁平衡信息技术有限公司,平衡郭德纲

【阿里云】RDS MySQL备份文件恢复实战

本文始发于微信公众号(电子物证):【阿里云】RDS MySQL备份文件恢复实战

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: