RDS MySQL物理备份文件恢复教程

背景:

在基础运维或必要取证时,我们需要对备份的数据库进行恢复,本文参考阿里云官方文档及实践整理教程。

 

基本环境:

1.系统要求: 建议CentOS 6.X/7.X, 本文使用的:7.8

2.Xtrabackup的版本

  • MySQL 5.6及之前的版本需要安装 Percona XtraBackup 2.3,安装指导请参见官方文档Percona XtraBackup 2.3
  • MySQL 5.7版本需要安装 Percona XtraBackup 2.4,安装指导请参见官方文档Percona XtraBackup 2.4
  • MySQL 8.0版本需要安装 Percona XtraBackup 8.0,安装指导请参见官方文档Percona XtraBackup 8.0

 Tips: 在MySQL5.7阿里云官方文档推荐2.4,但是没有明确具体的版本,记得yum默认2.4.3, 在2.4.3版本存在若干BUG,建议直接根据链接下载RPM 本地yum安装。

如果为8.0,安装8.0.4存在BUG,例如:

Populating InnoDB table cache.
Allocated tablespace ID 92 for dszgdb/dis_count, old maximum was 0
xtrabackup: Unknown error 3613
xtrabackup: Unknown error 3613
xtrabackup: Unknown error 3613
xtrabackup: Unknown error 3613

需要安装8.0.7版本问题解决

安装示例:

1.如果已经安装了,在恢复中,发现工具的版本不对,需要下载对应的Percona XtraBackup,首先需要卸载当前版本:

# yum移除xtrabackup
yum remove percona-xtrabackup

# 查询RPM包
rpm -qa|grep -i  xtrabackup
# 移除RPM
rpm -e percona-xtrabackup-2.3.5-1.el7.x86_64

2.正式安装:

1.在官方文档找到RPM的安装方式

2.以2.4版本进行安装(以下命令为官网示例,注意此版本存在BUG,实际安装参考建议使用2.4最新版本)

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm
yum localinstall percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm

安装后结果:

 

3.安装qpress

XtraBackup的innobackupex命令依赖qpress命令,否则执行会提示: qpress command not found.

wget "http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/183466/cn_zh/1608011575185/qpress-11-linux-x64.tar"
tar xvf qpress-11-linux-x64.tar
chmod 775 qpress
cp qpress /usr/bin

安装成功:

 

数据恢复:

在获得数据备份文件的前提下,根据文件类型不同,解压方式也不一样,阿里云目前大概类型如下:

  • 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 后缀)
    • 2019年2月20日后创建的MySQL 5.6实例,数据备份文件的格式为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

       

解压后,进入该目录,目录结构如下:

 

 

 这里有个小方法,mysql的数据目录可以看出,此目录结构为MySQL 8.0版本,使用对应8.0方式恢复即可。 

## 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

恢复根据数据大小,进行恢复,数据量大可能比较慢,最终结果类似,如果过程报错,大部分可能是安装的XtraBackup和Mysql版本对应错误:

 

 

 若系统返回如下报错,可以用rm -rf ,(提示,数据恢复最好用干净的环境进行恢复)

rm -rf /var/lib/mysql
chown -R mysql:mysql /var/lib/mysql

 

修改数据配置:

RDS的数据库阿里云进行了二次开发优化,原生mysql不支持部分参数,需要修改移除:

vim /home/mysql/data/backup-my.cnf
添加:
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

按Esc键,然后输入:wq并回车进行保存

赋予目录权限

chown -R mysql:mysql /home/mysql/data

启动MySQL,建议停止其他MySQL服务

mysqld --defaults-file=/home/mysql/data/backup-my.cnf --user=mysql --datadir=/home/mysql/data

mysqld根据情况进行指定,例如宝塔:/www/server/mysql/bin/mysqld,宝塔可以快速搭建使用MySQL各个版本。

如果不知道MySQL root的密码,可在配置文件中[mysqld]添加

[mysqld]
skip-grant-tables

最近使用mysql命令进入数据库:

 

 

数据导出:

如果希望对恢复的数据进行导出,可使用mysqldump进行导出,仍以宝塔路径示例:

/www/server/mysql/bin/mysqldump  databases_name > databases.sql

 

参考:

https://help.aliyun.com/knowledge_detail/41817.html

posted @ 2021-06-28 15:26  sevck  阅读(794)  评论(0编辑  收藏  举报