RDS MySQL数据恢复

本文最后更新于:2022年4月11日 晚上

确保已安装 MySQL 版本与 RDS MySQL 版本相同。

环境准备

安装 Percona XtraBackup

  • 对于MySQL 5.7、5.6或5.5实例,安装 Percona XtraBackup 2.4

    在线安装:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

    # 查看是否可以从仓库中获取 percona 包的信息
    yum list | grep percona

    # 启用 percona-relase 仓库
    percona-release enable-only tools release

    # 安装 Percona XtraBackup
    yum install percona-xtrabackup-24

    安装包安装,针对 CentOS 7,若下载速度很慢,附件提供该安装包:

    1
    2
    3
    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

    卸载 Percona XtraBackup

    1
    yum remove percona-xtrabackup
  • 对于MySQL 8.0实例,安装 Percona XtraBackup 8.0

安装解压工具 qpress ,附件提供下载包:

1
2
3
4
5
6
7
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

解压和恢复备份

  1. 在服务器上创建一个目录用于存储解压后的文件
1
mkdir /mnt/mysql/data
  1. 解压 RDS 备份压缩包(文件后缀 .tar.gz
1
tar -izxvf RDS备份压缩文件.tar.gz -C /mnt/mysql/data
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# xbstream 压缩包(.xb.gz 后缀)
gzip -d -c RDS备份压缩文件.xb.gz | xbstream -x -v -C /mnt/mysql/data

# xbstream 文件包(_qp.xb 后缀)
## 解包
cat RDS备份压缩文件_qp.xb | xbstream -x -v -C /mnt/mysql/data
## 解压
### 对于 MySQL 5.6/5.7
innobackupex --decompress --remove-original /mnt/mysql/data
### 对于 MySQL 8.0
innobackupex --decompress --remove-original --target-dir=/mnt/mysql/data

# xbstream qpress压缩包(_xb.qp后缀)
qpress -do RDS备份压缩文件_xb.qp | xbstream -x -v -C /mnt/mysql/data
  1. 恢复解压好的备份文件
1
2
3
4
5
6
## MySQL 5.6/5.7(只测试了 5.7)
innobackupex --defaults-file=/mnt/mysql/data/backup-my.cnf --apply-log /mnt/mysql/data

## MySQL 8.0 (未测试)
xtrabackup --prepare --target-dir=/mnt/mysql/data
xtrabackup --datadir=/var/lib/mysql --copy-back --target-dir=/mnt/mysql/data
  1. 若恢复出现报错,请查看参考文档。

启动 MySQL

  1. 修改 backup-my.cnf 文件,vim /mnt/mysql/data/backup-my.cnf 添加如下参数:
1
lower_case_table_names=1
  1. 注释掉自建数据库(使用的是 InnoDB 引擎)不支持的参数:
1
2
3
4
5
6
7
8
9
# 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

如果使用的是 MyISAM 引擎,需增加以下注释,并增加 skip-grant-tables 参数

1
2
3
#innodb_log_checksum_algorithm=strict_crc32
#redo_log_version=1
skip-grant-tables
  1. 修改文件属主,若没有该用户可忽略:
1
chown -R mysql:mysql /mnt/mysql/data
  1. 启动 MySQL 进程:
1
2
3
4
5
# mysqld 命令启动
mysqld --default-file=/mnt/mysql/data/backup-my.cnf --datadir=/mnt/mysql/data &

# docker 启动(已测试)
docker run --name mysql-5.7 -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -v /mnt/mysql/data:/var/lib/mysql -v /mnt/mysql/data/backup-my.cnf:/etc/mysql/my.cnf -d mysql:5.7

参考文档:RDS MySQL物理备份文件恢复到自建数据库 (aliyun.com)


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!