本文介绍如何使用Percona XtraBackup工具,将RDS MySQL的物理备份文件恢复到自建数据库。
背景
RDS MySQL支持将实例备份文件恢复到自建数据库,当前支持物理备份文件恢复、逻辑备份文件恢复等多种方式。如何选择数据恢复方案,请参见数据恢复方案概览。
您可以前往RDS管理控制台,在左侧导航栏选择备份恢复,然后在基础备份列表 > 数据备份中查看实例备份的类型。
如果没有物理备份,可以手动创建备份后,再进行本文操作。创建方法,请参见手动备份。
应用场景
如果您未来一段时间不再使用RDS MySQL,可以使用本方案,将RDS MySQL数据库的物理备份恢复到本地自建数据库,从而保留RDS MySQL中的数据。
如果您的实例已释放无法找回,而您又保存有下载好的物理备份文件,可使用本方案,将RDS MySQL数据库的物理备份恢复到本地自建数据库。
前提条件
RDS MySQL实例基础配置需满足以下条件:
大版本:8.0、5.7、5.6、5.5
系列:高可用系列
存储类型:本地SSD盘
说明您可以前往实例基本信息页面查看以上信息。
仅如上版本的实例支持下载物理备份。如果您的实例是基础系列实例,请参见本文常见问题。
RDS实例中的表未通过TDE加密。
重要实例中如果存在加密过的表,会导致恢复过程出错,请先在下载备份文件前,对已加密的表执行解密操作。
您可在RDS控制台目标实例数据安全性TDE页面查看TDE开启状况。
RAM账号需要具备下载备份文件的权限。如需为RAM账号授权,请参见添加下载备份文件权限给只读子账号。
使用限制
本方案仅适用于本地盘实例的物理备份文件恢复,如果您需要恢复云盘实例的快照备份,请参见RDS MySQL快照备份文件恢复到自建数据库。
本方案用于恢复备份文件中的全部数据。如仅需恢复部分库表,请参见RDS MySQL逻辑备份文件恢复到自建数据库。
目前仅支持将RDS MySQL的物理备份文件恢复到安装在Linux系统中的自建MySQL数据库中。
本方案暂不支持MGR(MySQL Group Replication)集群的数据恢复。
影响
如果您当前的自建数据库正在运行其他业务,将RDS MySQL物理备份恢复到此数据库后,原有业务将不可用。
本文介绍的恢复方案中,是将数据恢复到一个新建的数据库数据目录中,对自建数据库中原数据无影响。
技术实现
本文介绍的物理备份恢复方式主要是通过如下流程实现的:
在RDS MySQL的管理控制台中,对数据库进行全量物理备份。
将物理备份文件下载到本地,然后通过
qpress
工具进行解压。使用
Percona XtraBackup
工具,将解压后的备份文件恢复到自建数据库的数据目录中。重启数据库后,即可在自建数据库中查看到原先位于RDS MySQL中的数据。
注意事项
备份下载地址链接获取后有效时间仅有一个小时。超过有效时间后您可刷新页面获取最新链接下载即可。
请勿修改或删减备份文件中的内容,修改或删减操作可能会导致备份文件损坏且无法恢复,如需修改,请恢复到自建数据库后,再进行修改操作。
费用说明
准备工作
环境准备
工具准备
步骤一:下载备份文件
- 访问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
为另存为的文件名,您可以自定义该文件名,但后缀必须与下载地址里的后缀相同。2021年01月20日起,RDS MySQL的物理备份格式逐步替换为
_xb.qp
,如果您的备份文件后缀为_qp.xb
,本步骤另存的文件名后缀也需要使用_qp.xb
。您可以在下载链接中查看备份文件后缀格式。更多信息,请参见【产品/功能变更】部分RDS MySQL将采用新的物理备份格式。RDS MySQL 5.5的物理备份格式为
tar.gz
。
常见下载问题
步骤二:解压备份文件
使用如下命令解压备份压缩包。
请先参考准备工作章节,在自建库所在服务器中安装
Percona XtraBackup
和qpress
后,再执行以下解压命令。若不安装,后续执行如下命令将失败。执行以下解压命令时,请将
test_xb.qp
替换为您另存为的备份文件名,/var/mysql_bkdata/
替换为你创建的备份解压路径。
### MySQL 8.0
qpress -do test_xb.qp | /u01/xtrabackup80/bin/xbstream -x -v -C /var/mysql_bkdata/
### MySQL 5.5/5.6/5.7
qpress -do test_xb.qp | xbstream -x -v -C /var/mysql_bkdata/
如果您的备份文件后缀不是_xb.qp,请参考如下方式进行解压:
常见解压问题
步骤三:恢复数据
恢复数据库前,请先停止自建数据库服务。
您可以使用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工具将此目录数据恢复到自建数据库的数据目录中。
常见恢复问题
步骤四:启动数据库
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
为例,您可以参考准备工作,确认数据库的数据目录。
常见启动问题
步骤五:连接数据库并验证
执行如下命令,登录MySQL数据库以验证进程启动成功。
mysql -u<源RDS MySQL实例账号> -p<对应密码>
说明该登录命令仅为了验证恢复成功。若仅需查看某些表数据,则登录账号及密码无需为高权限,仅确认有查询对应表的权限即可。
您也可以通过外部第三方工具或客户端、命令行连接数据库。
执行如下命令,查看是否有RDS MySQL实例中的数据库。
SHOW DATABASES;