使用MySQL自带的mysqldump工具可以通过逻辑备份文件恢复数据库,本文将介绍详细的逻辑备份恢复数据库操作步骤。

前提条件

  • 实例版本如下:
    • MySQL 8.0高可用版(本地SSD盘)
    • MySQL 5.7高可用版(本地SSD盘)
    • MySQL 5.6
    • MySQL 5.5
  • 已有逻辑备份。具体操作,请参见自动备份与手动备份
说明

演示环境

本地MySQL数据库安装在64位的Linux系统中,且与云数据库MySQL版的版本相同。本文使用Linux7的操作系统以及MySQL5.7版本为例进行演示。

逻辑备份恢复操作步骤

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
  2. 在左侧导航栏中单击备份恢复
  3. 选择查询的时间范围,然后单击确定
  4. 在数据备份列表中,找到要下载的逻辑备份,并单击其右侧的下载
    说明
  5. 实例备份文件下载窗口,单击复制外网地址最右侧的复制图标,获取数据备份文件外网下载地址。
  6. 登录自建数据库所在Linux系统,执行如下命令下载逻辑备份文件。
    wget -c '<数据备份文件外网下载地址>' -O <自定义文件名>.tar
    说明
    • -c:启用断点续传模式。
    • -O:将下载的结果保存为指定的文件。
  7. 执行如下命令解压缩逻辑备份文件,包括系统默认的数据库压缩文件以及自行创建的数据库压缩文件。
    tar xvf <自定义文件名>.tar -C /tmp

    示例

    tar xvf hins123456.tar -C /tmp
    解压缩
  8. 解压缩需要恢复的目标数据库压缩文件(.sql.gz结尾),命令如下:
    gzip -d /tmp/目标数据库压缩文件名称

    示例

    gzip -d /tmp/testdata_datafull_202012101615_160xxxxxx.sql.gz
    说明 解压缩后的.sql文件用于在第10步进行导入。
  9. 登录数据库创建对应的空数据库。命令如下:
    mysql -u root -p<数据库密码>
    create database <空数据库名>;
    exit
  10. 使用如下命令将.sql文件导入对应数据库。
    mysql -u root -p <空数据库名> < /tmp/解压缩的数据库文件

    示例

    mysql -u root -p testdb < /tmp/testdata_datafull_202012101615_160xxxxxx.sql
    说明 执行整行命令后会提示您输入密码,输入后按回车即可。
  11. 登录数据库后查看表,已经有了数据,说明已经迁移成功。

常见问题

  • 为什么实例没有逻辑备份?

    系统发起的备份默认为物理备份,如果需要逻辑备份,需要手动发起备份。详情请参见自动备份与手动备份

  • 为什么下载逻辑备份时,显示的备份集恢复时间点为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进行重置,然后重新执行恢复操作。

    restmaster
  • 为什么恢复的数据只在主库中,从库的数据没有自动同步?

    您可以检查下导入文件(.sql结尾)中是否有SESSION.SQL_LOG_BIN= 0,该设置会导致主库的操作不会同步到从库中。

    SQL_LOG_BIN