本文介绍如何使用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加密。
重要实例中如果存在加密过的表,会导致恢复过程出错,请先在下载备份文件前,对已加密的表执行设置透明数据加密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中的数据。
注意事项
备份下载地址链接获取后有效时间仅有一个小时。超过有效时间后您可刷新页面获取最新链接下载即可。
请勿修改或删减备份文件中的内容,修改或删减操作可能会导致备份文件损坏且无法恢复,如需修改,请恢复到自建数据库后,再进行修改操作。
费用说明
准备工作
环境准备
工具准备
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;