MySQL自带的mysqldump工具可以实现将RDS MySQL逻辑备份文件恢复到自建数据库。本文介绍详细的逻辑备份恢复数据库操作步骤。
-
关于如何选择数据恢复方案,请参见数据恢复方案概览。
-
通过物理备份文件恢复到自建数据库请参见RDS MySQL物理备份文件恢复到自建数据库。
-
关于云数据库MySQL版如何备份数据,请参见备份RDS数据。
前提条件
-
RDS MySQL实例需满足以下条件:
-
大版本:8.0、5.7、5.6、5.5
-
系列:高可用系列
-
存储类型:本地SSD盘
说明
您可以前往实例基本信息页面查看以上信息。
-
-
已有逻辑备份。具体操作,请参见自动备份。
-
RDS实例中的表没有通过TDE加密。实例中如果存在加密过的表,会导致恢复过程出错,请先对已加密的表执行解密操作。
演示环境
本地MySQL数据库安装在64位的Linux系统中,且与云数据库MySQL版的版本相同。本文使用CentOS 7的操作系统以及MySQL5.7版本为例进行演示。
逻辑备份恢复操作步骤
- 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
-
在左侧导航栏中,单击备份恢复。
-
在基础备份列表 > 数据备份列表中,找到要下载的逻辑备份,并单击其右侧的实例备份下载。
说明
-
逻辑备份需要您手动发起备份操作,具体操作,请参见手动备份。
-
如果没有实例备份下载按钮,请确认您的实例版本是否支持下载备份。
-
-
在实例备份文件下载窗口,单击复制外网地址最右侧的
,获取数据备份文件外网下载地址。
重要
-
外网下载备份在超过免费额度的情况下会额外收取外网流量费用。更多信息,请参见费用说明。
-
如果是相同VPC内的ECS和RDS实例,可以使用内网地址,速度更快更稳定。
-
-
登录自建数据库所在Linux系统,执行如下命令下载逻辑备份文件。
wget -c '' -O .tar
说明
-
-c:启用断点续传模式。
-
-O:将下载的结果保存为指定的文件。
-
-
执行如下命令解压逻辑备份文件,包括系统默认的数据库压缩文件以及自行创建的数据库压缩文件。
tar xvf .tar -C /tmp
示例如下:
tar xvf hins123456.tar -C /tmp
说明
如果解压过程中出现类似
This does not look like a tar archive
的错误提示,请确认您下载的是否为RDS逻辑备份文件。 -
解压缩需要恢复的目标数据库压缩文件(
.sql.gz
结尾),命令如下:gzip -d /tmp/目标数据库压缩文件名称
示例如下:
gzip -d /tmp/testdata_datafull_202012101615_160xxxxxx.sql.gz
说明
解压缩后的.sql文件用于在第10步进行导入。
-
登录数据库创建对应的空数据库。命令如下:
说明
下文中的user用户需要具备能够执行.sql文件中所有SQL的权限。
mysql -u user -p create database ; exit
-
使用如下命令将.sql文件导入对应数据库。
mysql -u user -p < /tmp/解压缩的数据库文件
示例如下:
mysql -u user -p testdb < /tmp/testdata_datafull_202012101615_160xxxxxx.sql
说明
-
执行整行命令后会提示您输入密码,输入后按回车即可。
-
如果提示Can’t find master key from keyring错误,请确认是否满足本文开头的前提条件。
-
-
登录数据库后查看表,若已经显示有了数据,说明已经迁移成功。
常见问题
为什么实例没有逻辑备份?
系统发起的备份默认为物理备份,如果需要逻辑备份,需要手动发起备份。详情请参见自动备份。
-
为什么下载逻辑备份时,显示的备份集恢复时间点为0?
RDS MySQL的物理备份结合日志备份可以实现按时间点恢复功能,所以会显示具体的备份集恢复时间点(时间戳),而逻辑备份不是用来按时间点恢复的,所以显示为0。
-
报错
ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.
如何解决?这是由于GTID导致的问题,您可以参考如下几种方案:
-
开启GTID后重新执行恢复操作。
-
不开启GTID,可以将导入文件(
.sql
结尾)中的GTID_PURGED内容都注释掉,然后重新执行恢复操作。 -
在没有主从同步复制的情况下,可以登录数据库后执行
reset master
命令,然后重新执行恢复操作。
-
-
报错
ERROR 3546 (HY000) at line 26: @@GLOBAL.GTID_PURGED cannot be changed: the added gtid set must not overlap with @@GLOBAL.GTID_EXECUTED
如何解决?带有GTID信息的导入文件(
.sql
结尾), 要求当前数据库中无其他GTID信息,请登录数据库后执行reset master
进行重置,然后重新执行恢复操作。 为什么恢复的数据只在主库中,从库的数据没有自动同步?
您可以检查下导入文件(
.sql
结尾)中是否有SESSION.SQL_LOG_BIN= 0
,该设置会导致主库的操作不会同步到从库中。
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:https://www.yunxiaoer.com/166959.html