RDS MySQL备份文件按时间点恢复到自建数据库

您可以参考本文示例,在本地或ECS实例的自建MySQL数据库上进行RDS MySQL的增量恢复,以恢复到指定的时间点。

说明

注意事项

  • 本文仅提供本地增量恢复的步骤说明,您需要自行配置和搭建自建环境。实际操作时,请根据您自己的环境进行具体的配置和命令调整。

  • 在本地或ECS实例上恢复RDS MySQL备份数据操作是否成功,取决于您本地MySQL环境的配置。

  • 用户本地环境的 MySQL 版本需满足以下要求:

    • 版本兼容性:本地 MySQL 版本必须大于或等于 RDS MySQL 的版本。

      • 对于RDS MySQL5.6,本地MySQL版本需高于5.6.16。

      • 对于RDS MySQL5.5,本地MySQL版本需高于5.5.18。

    • 版本限制:MySQL 5.55.6属于不同的主版本,无法使用高版本(如MySQL 5.6)对低版本(如RDS MySQL 5.5)进行数据恢复或操作。

增量恢复

本文以tar.gz格式的MySQL 5.6.20社区版为示例。

  1. 准备工作:在本地MySQL上创建一个远程登录用户并赋予相应权限。详情请参见权限设置

  2. 执行以下命令,查看由XtraBackup工具生成的备份文件中的Binlog位置信息,确定开始增量恢复的起始位置。

    cat xtrabackup_binlog_info
    说明

    xtrabackup_binlog_info文件目录请以实际环境为准,可以使用find命令查看。

    系统显示类似如下:

    mysql-bin.000688  531167  66ef5f51-94f3-11e5-98cf-40a8f034c4d0:1-405320,
    72fb7cf6-94f3-11e5-98cf-a0d3c1f98c98:1-3082798,
    79f98899-5d2d-11e4-a7c9-ecf4bbc08418:1-365786,
    7e88493e-5d2d-11e4-a7c9-ecf4bbc06cb8:1,
    a9285f36-9d56-11e4-8a2c-d89d672a9530:1-29549875,
    ac2d9725-9d56-11e4-8a2c-d89d672af420:1-4838217
    说明

    mysql-bin.000688为应用的起始Binlog文件,531167为开始位置点(start position)。

  3. RDS控制台获取与备份文件所在实例编号一致的Binlog日志文件,执行以下命令下载备份文件:

    wget -c "日志备份下载链接" -O <日志文件名> 

    mysql-bin.000688mysql-bin.000689文件为例,示例如下:

    wget -c "http://rdslog-hz-v3-3az.oss-cn-hangzhou.aliyuncs.com/custins71349641/hostins26******/mysql-bin.000688?Expires=16951*******" -O mysql-bin.000688 
    说明

    日志备份文件下载链接获取方法,请参见下载备份

  4. 通过mysqlbinlog命令分析文件内容,确定增量恢复到的时间点。

    mysqlbinlog -v --base64-output=decode-rows mysql-bin.0006XX > 689.log
  5. 执行以下命令,查看689.log文件,确认想要恢复的时间点。

    vi 689.log
  6. 执行以下命令,执行增量恢复,恢复到指定的时间点。

    mysqlbinlog binlog_file1 binlog_file2 ... binlog_filen --start-position=xxxx  --stop-datetime="YYYY-mm-dd hh:mm:ss" | mysql -uuser -p<$Password> -P<$Port> -h<$Host_IP>

    示例如下:

    mysqlbinlog mysql-bin.000688 mysql-bin.000689 --start-position=531167 --stop-datetime="2016-05-16 18:05:03" | mysql -uuser -p<$Password> -P<$Port> -h<$Host_IP>

    参数解释如下:

    参数

    含义

    binlog_file1 binlog_file2 ... binlog_filen

    用于指定要恢复的Binlog文件,可以根据需要指定多个文件。请将binlog_file1 binlog_file2 ... binlog_filen替换为实际的Binlog文件名称。

    --start-position=xxxx

    用于指定开始恢复的Binlog位置点,该位置点应存在于指定的第一个Binlog文件中。请将xxxx替换为实际的位置点。

    --stop-position=xxxx

    用于指定恢复到的Binlog位置点,该位置点应该存在于最后一个指定的Binlog文件中。请将xxxx替换为实际的位置点。

    --start-datetime="YYYY-MM-DD HH:MM:SS"

    用于指定开始恢复的时间点,即从第一个等于或大于该时间点的Binlog事件开始恢复。时间点以本地时间时区为准,格式为MySQL可接受的时间格式,例如:"2016-05-16 08:01:05"。请将"YYYY-MM-DD HH:MM:SS"替换为实际的时间点。

    --stop-datetime="YYYY-MM-DD HH:MM:SS"

    用于指定停止恢复的时间点,即在第一个等于或大于该时间点的Binlog事件停止恢复。时间点以本地时间时区为准,格式为MySQL可接受的时间格式,例如:"2016-05-16 08:01:05"。

    请将"YYYY-MM-DD HH:MM:SS"替换为实际的时间点。

    -p<$Password>

    用于指定MySQL密码,请将<$Password>替换为实际的密码,且-p参数和<$Password>间不要有空格。

    -P<$Port>

    用于指定MySQL端口号,请将<$Port>替换为实际的端口号。

    -h<$Host_IP>

    用于指定MySQL主机IP,请将<$Host_IP>替换为实际的主机IP。

    说明

    您可以按需选择使用 --start-position--stop-position 来指定位置点,或使用 --start-datetime--stop-datetime 来指定时间点,来确定需要恢复的Binlog事件的范围。

常见问题

如果您在使用MySQL 5.78.0版本进行增量备份出现ERROR 1227 (42000) at line 7: Access denied; you need (at least one of) the SUPER privilege(s) for this operation报错时,说明MySQL服务器拒绝了访问,当前用户没有足够的权限。您需要联系数据库管理员或使用具有足够权限的用户进行授权操作。

适用于

云数据库RDS MySQL