本文介绍如何将RDS MySQL的物理备份文件恢复到自建数据库。
说明
- 通过逻辑备份文件恢复到自建数据库请参见RDS MySQL逻辑备份文件恢复到自建数据库。
- 由于软件限制,目前只支持将云数据库MySQL的备份文件恢复到安装在Linux系统中的自建MySQL数据库中。Windows系统下的备份恢复请参见使用mysqldump迁移MySQL数据。
一、准备环境
-
确认RDS实例是MySQL 8.0、5.7、5.6、5.5高可用版(本地盘)。
说明 只有这些类型的实例支持下载物理备份。对于基础版,请参见基础版实例的备份怎么恢复或迁移。
- 确认RDS实例中的表没有通过TDE加密,实例中如果存在加密过的表,会导致恢复过程出错,请先对已加密的表执行解密操作。
-
准备一台Linux 64位系统的电脑或服务器。确认Linux服务器上已安装MySQL服务,且MySQL版本与RDS MySQL版本相同(例如都是5.7)。
说明 请确保该MySQL服务上没有运行其他业务。
-
在Linux服务器上,安装Percona XtraBackup。
- 对于MySQL 5.7、5.6或5.5实例:安装Percona XtraBackup 2.4。
- 对于MySQL 8.0实例,安装Percona XtraBackup 8.0。
-
在Linux服务器上,安装解压工具qpress。
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
二、下载备份
- 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
- 进入备份恢复页面的数据备份标签页。
- 如需查看8天前的备份,请修改时间范围。默认时间范围是近8天。
-
在操作列,单击目标备份的实例备份下载。如果没有实例备份下载按钮,原因如下:
-
实例是云盘实例。云盘实例不支持直接下载数据备份。说明 对于云盘实例:
- 如果较少库需要下载数据备份,可使用mysqldump进行备份恢复或用DMS导出。
- 如果有大量库需要下载数据备份,可迁移数据至本地盘实例,然后进行备份和下载备份。
- 可以使用DBS进行逻辑备份,然后下载备份。
- 实例是本地盘实例,但当前账号是子账号且没有下载备份的权限,您需要给子账号授权。
-
实例是云盘实例。云盘实例不支持直接下载数据备份。说明 对于云盘实例:
-
在弹出的对话框中,复制外网下载地址。说明
- 外网下载备份在超过免费额度的情况下会额外收取外网流量费用。更多信息,请参见费用说明。
- 如果是相同VPC内的ECS和RDS实例,可以使用内网地址,速度更快更稳定。
-
在Linux服务器上,执行如下命令下载物理备份。
wget -c 'http://...' -O test1_qp.xb
说明
- 请将上述命令中的http://...替换为备份的下载地址。
- test1_qp.xb是另存为的文件名。您可以自定义该文件名,但后缀必须与下载地址里的后缀相同。
三、解压和恢复备份
-
在Linux服务器上,创建一个目录(例如/home/mysql/data)用于存放解压后的文件。
mkdir /home/mysql/data
-
解压压缩包。根据压缩包的后缀选择解压命令。
备份文件类型 解压命令 tar 压缩包 (.tar.gz 后缀) tar -izxvf test1.tar.gz -C /home/mysql/data
xbstream 压缩包 (.xb.gz 后缀) gzip -d -c test1.xb.gz | xbstream -x -v -C /home/mysql/data
xbstream 文件包(_qp.xb 后缀) ## 先解包 cat test1_qp.xb | 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 test1_xb.qp | xbstream -x -v -C /home/mysql/data
说明 您可以把test1和/home/mysql/data替换为实际的文件名和路径。
-
执行如下命令,查询解压后生成的文件。
ls -l /home/mysql/data
系统会返回如下结果,其中蓝色字体为备份文件包含的数据库。
-
执行如下命令,恢复解压好的备份文件。
## 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
- 恢复时请耐心等待,若系统返回如下类似结果,则说明备份文件已成功恢复到自建数据库。
-
若系统返回如下报错,可以用
rm -rf /var/lib/mysql
命令清空文件夹内文件,然后用chown -R mysql:mysql /var/lib/mysql
修改权限。 - 若系统返回如下报错,请参见一、准备环境中的第2项说明。
说明 请确保您的Percona XtraBackup版本正确:
- MySQL 5.7、5.6以及之前的版本需要安装 Percona XtraBackup 2.4,安装指导请参见官方文档Percona XtraBackup 2.4。
- MySQL 8.0版本需要安装 Percona XtraBackup 8.0,安装指导请参见官方文档Percona XtraBackup 8.0。
四、启动MySQL
-
为避免版本问题,需修改backup-my.cnf文件,具体操作步骤如下。
-
执行如下命令,以文本方式编辑backup-my.cnf文件。
vi /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
说明 如果自建数据库使用的是MyISAM引擎,与阿里云的InnoDB不兼容,则需要多注释掉如下参数并增加skip-grant-tables参数:
#innodb_log_checksum_algorithm=strict_crc32 #redo_log_version=1 skip-grant-tables
-
按Esc键,然后输入
:wq
并回车进行保存。
-
执行如下命令,以文本方式编辑backup-my.cnf文件。
-
执行如下命令,修改文件属主,并确定文件所属为MySQL用户。
chown -R mysql:mysql /home/mysql/data
-
执行如下命令,启动MySQL进程。
mysqld --defaults-file=/home/mysql/data/backup-my.cnf --user=mysql --datadir=/home/mysql/data &
说明 root密码问题:
- 如果您的实例版本为MySQL 5.5或5.6,需要重置root密码方可正常使用。更多信息,请参见官方文档。
- 如果您的实例版本为MySQL 5.7或8.0,则root密码即自建库的root密码。
常见错误
如果Ubuntu操作系统报如下错误,是Ubuntu自带安全程序AppArmor导致的,请使用
apt install -y apparmor-utils
和aa-complain /usr/sbin/mysqld
命令修改AppArmor设置。 -
执行如下命令,登录MySQL数据库以验证进程启动成功。
mysql -u<源RDS实例账号> -p<对应密码>
您可以使用
show databases;
查看数据库,确认是否恢复成功。
常见问题
-
如何恢复指定时间段的数据到自建库:
可以在控制台下载指定时间段的日志备份数据恢复到自建库。如何下载日志备份,请参见下载备份。
-
恢复完成后,在使用自建库的过程中遇到
error 1105 Unknown error
错误怎么办?执行如下SQL语句转换数据库存储引擎即可:
use mysql; alter table proc engine=myisam; alter table event engine=myisam; alter table func engine=myisam;
-
除了下载备份文件恢复之外,还有其他方法可以将实例的数据快速恢复到自建数据库吗?
您可以使用DTS将RDS MySQL迁移至自建MySQL。
-
为什么下载数据备份文件会报错?
使用
wget -c '<数据备份文件外网下载地址>' -O <自定义文件名>.tar.gz
命令下载时用2个英文单引号(')将下载地址包含起来,便于程序识别具体的地址,防止出错。 -
下载的备份文件解压缩报错怎么办?
- 确认您下载的文件是否为物理备份文件。
- 压缩文件保存的名称后缀是否正确(使用URL中包含的文件名后缀 .tar.gz 、.xb.gz 或 _qp.xb)。
- 针对不同格式的压缩文件,使用正确的解压命令。详情请参见本文操作步骤第11步。
-
基础版实例的备份怎么恢复或迁移呢?
基础版实例仅支持快照备份,您可以使用以下方法:
- 使用mysqldump迁移MySQL数据
- 用DTS将数据从RDS导出到本地
-
下载的备份能恢复到另一个RDS MySQL实例上吗?
暂不支持此操作。建议您使用DTS迁移RDS实例数据到另一个RDS实例上。
原文:https://help.aliyun.com/document_detail/41817.html?spm=5176.19908310.help.dexternal.14231450jocIoW#concept-41817-zh
没有评论