您可以使用RDS MySQL的备份下载功能,将RDS MySQL云盘实例的快照备份数据转换成CSV或SQL文件导出,并将其恢复至本地或ECS上的自建MySQL数据库中。
前提条件
RDS MySQL实例需满足以下条件:
数据库版本:8.0、5.7(支持Serverless实例)
存储类型:ESSD云盘、高性能云盘
运行状态:运行中
说明您可以前往实例详情页的基本信息页面查看以上信息。
已开启数据归档功能的高性能云盘实例暂不支持高级下载功能,下载任务将执行失败。
RDS实例未开启TDE加密。实例中若存在加密过的表,会导致恢复过程出错,请先对已加密的表执行解密。
请确保自建MySQL数据库已开启
local_infile
参数。说明查看
local_infile
参数状态(ON表示已开启):SHOW GLOBAL VARIABLES LIKE 'local_infile';
开启
local_infile
参数:SET GLOBAL local_infile=1;
功能限制
从下载的备份集(云盘实例的快照备份数据转换成CSV文件或SQL文件)恢复到自建MySQL数据库时,存在以下类型限制:
不支持的二进制字段类型:BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB。
说明如果备份集中包含这些字段类型,它们将会以十六进制格式进行存储。在导入时,MySQL会将二进制字段当作字符串进行处理。此种情况下,需要手动在
load data local infile
命令中使用UNHEX函数将十六进制格式转换为原始的二进制串。BLOB类型的数据可以使用
mysqldump
备份恢复到本地MySQL数据库。备份数据:
mysqldump -h 127.0.0.1 -u user -p --opt --default-character-set=utf8 --hex-blob <自建数据库名> --skip-triggers --skip-lock-tables > /tmp/<自建数据库名>.sql
恢复数据:
mysql -h 127.0.0.1 -u 用户名 -p 数据库名 < 备份文件.sql
不支持的空间字段类型:GEOMETRY、POINT、LINESTRING、POLYGON、MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION。
恢复前须知
Python脚本维护状态说明:本文所提供的
restore_from_downloads.py
脚本仅为参考,当前已停止维护,请谨慎使用并做好兼容性验证。数据库版本一致:建议RDS MySQL数据库和自建MySQL数据库版本保持一致。不同版本的数据库间可能存在不兼容的特性,导致恢复失败。
确保不存在同名的库表:执行恢复命令前,请确保目标自建数据库中没有和备份数据中同名的数据库,否则会导致恢复失败。
任务中断:在进行恢复任务时,如果您因为某些原因中断了恢复任务,可能会导致恢复数据不完整或恢复失败,请谨慎操作。
特殊字符处理:执行本文命令时,若文件路径、数据库账号或密码中包含特殊字符(如
&
、#
、空格
等),必须用英文双引号包裹,否则会报错。例如:# 文件路径中若含特殊字符(&),路径需用英文双引号包裹 python ./restore_from_downloads.py "/path/to/data&test" 127.0.0.1 3306 root zhtpasswordtest # 数据库密码含特殊字符(#、@),密码需用英文双引号包裹 python ./restore_from_downloads.py /data 127.0.0.1 3306 root "#Test@20250821"
操作步骤
本示例以RDS MySQL云盘实例的SQL文件恢复至ECS实例(Alibaba Cloud Linux 3.2104 LTS 64位)的自建MySQL数据库为例,其他环境请使用对应命令。
下载并解压备份文件
登录RDS控制台,使用下载备份功能将RDS MySQL云盘实例的备份文件转换成CSV文件或SQL文件,并下载到本地或ECS实例中。
在本地或ECS实例中解压下载的备份文件,命令如下:
tar -izxvf <压缩包文件名>.tar.gz -C <解压缩后的文件位置> # 本示例将名为backup.tar.gz的压缩文件解压缩到指定目录/home/mysql/data中,具体请以实际文件名和目录为准 tar -izxvf backup.tar.gz -C /home/mysql/data
(可选)查看备份文件是否已解压到指定位置(/home/mysql/data)。
ls -al /home/mysql/data
准备恢复脚本
将MySQL Python脚本文件下载至本地或ECS实例中。本脚本仅供参考,该Python脚本文件当前已停止维护,请谨慎使用。
对
restore_from_downloads.py
脚本执行授权,命令如下:chmod +x ./restore_from_downloads.py
执行恢复命令
重要如果出现类似
Command 'python' not found
的报错,说明系统中没有安装Python或Python命令不在系统的搜索路径中。此时请确认您系统中安装的Python版本以及执行Python的命令是否正确。例如,如果系统中安装了Python3,可以使用python3 ./restore_from_downloads.py /home/mysql/data/test1.sql 127.0.0.1 3306 zhtxxxxx "#txxxxx"
。python ./restore_from_downloads.py <CSV文件或SQL文件目录路径> <数据库主机> <数据库端口> <数据库账号> <数据库密码> # 示例如下 python ./restore_from_downloads.py /home/mysql/data 127.0.0.1 3306 root "#Tes********"
相关文档
本方案仅适用于云盘版实例的快照备份恢复。如果您需要恢复高性能本地盘实例的备份,请参见RDS MySQL物理备份文件恢复到自建数据库或RDS MySQL逻辑备份文件恢复到自建数据库。
阿里云提供的迁移服务也可帮助您将RDS MySQL迁移至自建MySQL数据库。
更多数据恢复方案,请参见数据恢复方案概览。