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

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

说明

注意事项

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

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

  • 在进行恢复操作前,请确保您的本地环境的MySQL版本大于等于RDS MySQL版本要求。例如,RDS MySQL 5.6要求本地环境版本大于MySQL 5.6.16,RDS MySQL 5.5要求本地环境版本大于MySQL 5.5.18。

    说明

    MySQL 5.5和5.6是不同的版本,不能在本地使用MySQL 5.6版本对RDS MySQL 5.5进行恢复。

增量恢复

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

  1. 准备工作,创建并授权可以远程登录本地自建MySQL的用户。

    在本地自建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="YY-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="16-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替换为实际的位置点。

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

    用于指定开始恢复的时间点,即从第一个等于或大于该时间点的Binlog事件开始恢复。时间点以本地时间时区为准,格式为MySQL可接受的时间格式,例如:"2016-05-16 08:01:05" 或 "16-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" 或 "16-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.7或8.0版本进行增量备份出现以下报错时,说明MySQL服务器拒绝了访问,当前用户没有足够的权限。您需要自行使用skip-grant-tables参数关闭MySQL的认证,然后进行授权。

ERROR 1227 (42000) at line 7: Access denied; you need (at least one of) the SUPER privilege(s) for this operation

适用于

云数据库RDS MySQL版