本文介绍如何使用Percona XtraBackup工具,将RDS MySQL的物理备份文件恢复到自建数据库。
背景
RDS MySQL支持将实例备份文件恢复到自建数据库,当前支持物理备份文件恢复、逻辑备份文件恢复等多种方式。如何选择数据恢复方案,请参见MySQL数据恢复方案。
您可以前往RDS管理控制台,在左侧导航栏选择备份恢复,然后在基础备份列表 > 数据备份中查看实例备份的类型。

如果没有物理备份,可以手动创建备份后,再进行本文操作。创建方法,请参见手动备份。
应用场景
如果您未来一段时间不再使用RDS MySQL,或实例已释放但有物理备份文件,您可以将RDS MySQL数据库的物理备份恢复到本地自建数据库,以保留RDS MySQL中的数据。
前提条件
- RDS MySQL实例基础配置需满足以下条件: - 大版本:8.0、5.7、5.6、5.5 
- 系列:高可用系列 
- 存储类型:高性能本地盘 
 说明- 您可以在实例基本信息页面查看以上信息。 
- 仅如上版本的实例支持下载物理备份。如果您的实例是基础系列实例,请参见本文常见问题。 
 
- RDS实例中的表未通过TDE加密。 重要- 加密表会导致恢复出错,请先执行解密操作。 
- 您可在RDS控制台目标实例数据安全性TDE页面查看TDE开启状况。 
 
- RAM账号需要具备下载备份文件的权限,授权操作请参见添加下载备份文件权限给只读子账号。 
使用限制
- 仅适用于本地盘实例的物理备份文件恢复。如需恢复云盘实例的快照备份,请参见RDS MySQL快照备份文件恢复到自建数据库。 
- 用于恢复备份文件中的全部数据。如仅需恢复部分库表,请参见RDS MySQL逻辑备份文件恢复到自建数据库。 
- 目前仅支持将RDS MySQL的物理备份文件恢复到Linux系统中的自建MySQL数据库中。 
- 暂不支持MGR(MySQL Group Replication)集群的数据恢复。 
影响
- 如果将RDS MySQL物理备份恢复到当前运行其他业务的自建数据库,原有业务将不可用。 
- 本文介绍的恢复方案将数据恢复到新建的数据库数据目录中,不影响自建数据库中的原数据。 
技术实现
本文介绍的物理备份恢复方式主要是通过如下流程实现的:
- 对数据库进行全量物理备份。 
- 下载物理备份文件到本地,通过 - qpress工具进行解压。
- 使用 - Percona XtraBackup工具,将解压后的备份文件恢复到自建数据库的数据目录中。
- 重启数据库后,即可在自建数据库中查看到原先位于RDS MySQL中的数据。 
注意事项
- 备份下载链接有效时间为一小时,过期后请刷新页面获取新链接。 
- 请勿修改或删减备份文件内容,否则可能导致文件损坏且无法恢复。如需修改,请先恢复到自建数据库。 
费用说明
准备工作
环境准备
工具准备
1. 下载备份文件
- 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。 
- 在左侧导航栏单击备份恢复。 
- 在基础备份列表 > 数据备份中,找到目标物理备份,单击操作列的实例备份下载。 - 如果没有物理备份文件,您可以手动备份,具体操作,请参见手动备份。 
- 如果跳转至高级下载页面,表示您的RDS实例为云盘实例,请参见RDS MySQL快照备份文件恢复到自建数据库进行恢复。 
 
- 在实例备份下载对话框,根据实际情况,选择并复制内网地址或外网地址。 重要- 使用内网地址下载时,需要在同地域的VPC网络中才可下载,在跨地域VPC以及经典网络的服务器端无法下载。 
- 使用外网地址下载时,超出外网下载免费额度后需要支付外网流量费用。更多信息,请参见费用说明。 
- 备份下载地址有效时间为一个小时,超过有效时间后可刷新页面获取最新链接。 
- 请勿修改或删减已备份的文件内容,可能造成备份文件损坏,无法恢复。如需修改,请恢复到自建数据库后再进行修改操作。 
 
- 登录本地自建MySQL所在的Linux服务器,执行如下命令下载物理备份。 - wget -c 'https://****.bak.rds.aliyuncs.com/****_xb.qp?****' -O test_xb.qp说明- 请将上述命令中的 - https://****.bak.rds.aliyuncs.com/****_xb.qp?****替换为实际复制的备份下载地址。备份文件下载后请您及时保存,避免泄露。
- 本文示例将 - test_xb.qp作为另存的文件名,您可以自定义该文件名,但文件名后缀必须与下载地址里的后缀保持一致。- 目前RDS MySQL备份下载地址的后缀名存在两种格式 - _xb.qp或- _qp.xb,您可以在下载链接中查看备份文件后缀格式。
- RDS MySQL 5.5的物理备份格式为 - tar.gz。
 
常见下载问题
2. 解压备份文件
请根据备份文件的实际后缀,选择相关命令解压备份压缩包。
请参考准备工作章节,先安装Percona XtraBackup和qpress,然后执行以下命令。
常见解压问题
3. 恢复数据
恢复数据库前,请先停止自建数据库服务。
您可以使用ps -ef | grep '[m]ysql'命令查看是否存在mysql相关进程,并使用sudo kill -9 <PID>将进程结束。
MySQL 8.0恢复
- 恢复前准备。 - /u01/xtrabackup80/bin/xtrabackup --defaults-file=/var/mysql_bkdata/backup-my.cnf --prepare --target-dir=/var/mysql_bkdata/- 参数解释: - 参数 - 含义 - --defaults-file - 通过传入配置文件设置MySQL默认选项。 - RDS MySQL备份文件中,提供名为 - backup-my.cnf的配置文件,该文件位于备份解压目录,即- /var/mysql_bkdata/。- --prepare - XtraBackup工具的准备命令。 - --target-dir - 备份解压目录 - /var/mysql_bkdata/。
- 修改自建数据库的数据目录(datadir)。 
- 恢复数据。 - sudo xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/var/mysql_bkdata/- 参数解释: - 参数 - 含义 - --defaults-file - 自建数据库的 - my.cnf文件,根据此配置文件中设置的数据目录(datadir),获取恢复数据的目标路径。- --copy-back - XtraBackup工具的恢复命令。 - --target-dir - 备份解压目录 - /var/mysql_bkdata/,XtraBackup工具将此目录数据恢复到自建数据库的数据目录中。
MySQL 5.7恢复
- 恢复前准备。 - innobackupex --defaults-file=/var/mysql_bkdata/backup-my.cnf --apply-log /var/mysql_bkdata/- 参数解释: - 参数 - 含义 - --defaults-file - 通过传入配置文件设置MySQL默认选项。 - RDS MySQL备份文件中,提供名为 - backup-my.cnf的配置文件,该文件位于备份解压目录,即- /var/mysql_bkdata/。- --apply-log - XtraBackup工具的准备命令。 - 该命令后配置存放备份文件的目录,即备份解压目录 - /var/mysql_bkdata/。
- 修改自建数据库配置文件 - my.cnf。- 编辑数据库配置文件。 - sudo vim /etc/my.cnf- 查询数据库配置文件路径,请参见准备工作。 
- 按 - i键进入编辑模式,修改datadir的参数取值为- /var/mysql_newdata。- datadir = /var/mysql_newdata- mysql_newdata为自建数据库的新数据目录,已在准备工作中创建。
- 在 - my.cnf中添加如下内容。- innodb_undo_tablespaces=2 innodb_undo_directory=/var/mysql_newdata重要- 参数innodb_undo_tablespaces的取值需要与 - /var/mysql_bkdata/backup-my.cnf中的取值相同,您可以使用- cat /var/mysql_bkdata/backup-my.cnf | grep innodb_undo_tablespaces查询。
- 按 - Esc键退出编辑模式,输入- :wq!保存并退出。
 
- 恢复数据。 - sudo innobackupex --defaults-file=/etc/my.cnf --copy-back /var/mysql_bkdata/- 参数解释: - 参数 - 含义 - --defaults-file - 自建数据库的 - my.cnf文件,根据此配置文件中设置的数据目录(datadir),获取恢复数据的目标路径。- --copy-back - XtraBackup工具的恢复命令。 - 该命令后配置存放备份文件的目录,即备份解压目录 - /var/mysql_bkdata/,XtraBackup工具将此目录数据恢复到自建数据库的数据目录中。
MySQL 5.6恢复
- 恢复前准备。 - innobackupex --defaults-file=/var/mysql_bkdata/backup-my.cnf --apply-log /var/mysql_bkdata/- 参数解释: - 参数 - 含义 - --defaults-file - 通过传入配置文件设置MySQL默认选项。 - RDS MySQL备份文件中,提供名为 - backup-my.cnf的配置文件,该文件位于备份解压目录,即- /var/mysql_bkdata/。- --apply-log - XtraBackup工具的准备命令。 - 该命令后配置存放备份文件的目录,即备份解压目录 - /var/mysql_bkdata/。
- 修改自建数据库的数据目录(datadir)。 
- 恢复数据。 - sudo innobackupex --defaults-file=/usr/my.cnf --copy-back /var/mysql_bkdata/- 参数解释: - 参数 - 含义 - --defaults-file - 自建数据库的 - my.cnf文件,根据此配置文件中设置的数据目录(datadir),获取恢复数据的目标路径。- --copy-back - XtraBackup工具的恢复命令。 - 该命令后配置存放备份文件的目录,即备份解压目录 - /var/mysql_bkdata/,XtraBackup工具将此目录数据恢复到自建数据库的数据目录中。
MySQL 5.5恢复
- 恢复前准备。 - innobackupex --defaults-file=/var/mysql_bkdata/backup-my.cnf --apply-log /var/mysql_bkdata/- 参数解释: - 参数 - 含义 - --defaults-file - 通过传入配置文件设置MySQL默认选项。 - RDS MySQL备份文件中,提供名为 - backup-my.cnf的配置文件,该文件位于备份解压目录,即- /var/mysql_bkdata/。- --apply-log - XtraBackup工具的准备命令。 - 该命令后配置存放备份文件的目录,即备份解压目录 - /var/mysql_bkdata/。
- 修改自建数据库配置文件 - my.cnf。- 编辑数据库配置文件。 - sudo vim /etc/my.cnf- 查询数据库配置文件路径,请参见准备工作。 
- 按 - i键进入编辑模式,添加datadir参数。- datadir = /var/mysql_newdata- mysql_newdata为自建数据库的新数据目录,已在准备工作中创建。
- 在 - my.cnf中添加如下内容。- innodb_log_file_size=1048576000重要- 参数innodb_log_file_size的取值需要与 - /var/mysql_bkdata/backup-my.cnf中的取值相同,您可以使用- cat /var/mysql_bkdata/backup-my.cnf | grep innodb_log_file_size查询。
- 按 - Esc键退出编辑模式,输入- :wq!保存并退出。
 
- 恢复数据。 - sudo innobackupex --defaults-file=/etc/my.cnf --copy-back /var/mysql_bkdata/- 参数解释: - 参数 - 含义 - --defaults-file - 自建数据库的 - my.cnf文件,根据此配置文件中设置的数据目录(datadir),获取恢复数据的目标路径。- --copy-back - XtraBackup工具的恢复命令。 - 该命令后配置存放备份文件的目录,即备份解压目录 - /var/mysql_bkdata/,XtraBackup工具将此目录数据恢复到自建数据库的数据目录中。
常见恢复问题
4. 启动数据库
MySQL 8.0、5.7启动
- (可选)在RDS MySQL管理控制台中查看实例参数lower_case_table_names的取值,如果取值为 - 1,则需要修改自建数据库配置文件- my.cnf。- 编辑数据库配置文件。 - sudo vim /etc/my.cnf- 查询数据库配置文件路径,请参见准备工作。 
- 按 - i进入编辑模式,添加如下内容。- lower_case_table_names=1
- 按 - Esc键退出编辑模式,输入- :wq!保存并退出。
 
- 为数据目录授权。 - sudo chown -R mysql:mysql /var/mysql_newdata
- 执行如下命令,启动MySQL进程。 - sudo mysqld --defaults-file=/etc/my.cnf --user=mysql --datadir=/var/mysql_newdata &- 参数解释: - 参数 - 含义 - --defaults-file - 自建数据库的配置文件路径。本文以 - /etc/my.cnf为例,您可以参考准备工作,确认数据库的配置文件路径。- --user - 启动数据库的用户。固定为mysql,无需修改。 - --datadir - 启动数据库使用的数据目录。本文以 - /var/mysql_newdata为例,您可以参考准备工作,确认数据库的数据目录。
MySQL 5.6启动
- (可选)在RDS MySQL管理控制台中查看实例参数lower_case_table_names的取值,如果取值为 - 1,则需要修改自建数据库配置文件- my.cnf。- 编辑数据库配置文件。 - sudo vim /usr/my.cnf- 查询数据库配置文件路径,请参见准备工作。 
- 按 - i进入编辑模式,添加如下内容。- lower_case_table_names=1
- 按 - Esc键退出编辑模式,输入- :wq!保存并退出。
 
- 为数据目录授权。 - sudo chown -R mysql:mysql /var/mysql_newdata
- 执行如下命令,启动MySQL进程。 - sudo mysqld --defaults-file=/usr/my.cnf --user=mysql --datadir=/var/mysql_newdata &- 参数 - 含义 - --defaults-file - 自建数据库的配置文件路径。本文以 - /usr/my.cnf为例,您可以参考准备工作,确认数据库的配置文件路径。- --user - 启动数据库的用户。固定为mysql,无需修改。 - --datadir - 启动数据库使用的数据目录。本文以 - /var/mysql_newdata为例,您可以参考准备工作,确认数据库的数据目录。
MySQL 5.5启动
- 为数据目录授权。 - sudo chown -R mysql:mysql /var/mysql_newdata
- 执行如下命令,启动MySQL进程。 - sudo mysqld --defaults-file=/etc/my.cnf --user=mysql --datadir=/var/mysql_newdata &- 参数 - 含义 - --defaults-file - 自建数据库的配置文件路径。本文以 - /etc/my.cnf为例,您可以参考准备工作,确认数据库的配置文件路径。- --user - 启动数据库的用户。固定为mysql,无需修改。 - --datadir - 启动数据库使用的数据目录。本文以 - /var/mysql_newdata为例,您可以参考准备工作,确认数据库的数据目录。
常见启动问题
5. 连接数据库并验证
- 执行如下命令,登录MySQL数据库以验证进程启动成功。 - mysql -u<源RDS MySQL实例账号> -p<对应密码>说明- 该登录命令用于验证恢复成功。若仅需查看表数据,确保账号有查询权限即可。 
- 若忘记账号或密码,请在执行启动MySQL进程命令时,传入 - --skip-grant-tables参数,进程启动后会忽略权限检查,允许无需账户密码登录数据库。登录成功后,您可以重新设置账号和密码。
 
- 执行如下命令,查看是否有RDS MySQL实例中的数据库。 - SHOW DATABASES;