全部产品
云市场

自建数据库使用RDS for MySQL备份按时间点恢复数据

更新时间:2019-09-25 18:38:20

免责声明: 本文档可能包含第三方产品信息,该信息仅供参考。阿里云对第三方产品的性能、可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺。

 

概述

在某些情况下,用户需要在本地或者ECS实例自建数据库上进行RDS for MySQL实例数据增量恢复(恢复到某一时间点),下面通过一个具体的例子说明步骤。

 

详细信息

时间点恢复注意事项如下。

  • 本地或ECS 服务器恢复具体步骤以及是否成功取决于用户本地MySQL环境配置。
  • 本文档仅用于说明本地增量恢复的步骤,用户需要根据自建环境的具体配置来调整命令。
  • 自建环境需用户自行配置搭建。
  • 本文以tar.gz格式的MySQL 5.6.20社区版为示例。
  • 用户本地环境MySQL版本需大于等于RDS MySQL版本,RDS for MySQL 5.6要求自建本地版本大于MySQL 5.6.16,RDS for MySQL 5.5要求自建本地版本大于MySQL 5.5.18。
  • MySQL 5.5和5.6是不同的版本,不能在本地使用MySQL 5.6版本对RDS for MySQL 5.5进行恢复。

 

下载备份

备份下载请参考Linux系统使用wget工具下载备份与日志文件

 

本地实例恢复

本地实例恢复请参考RDS备份文件恢复到自建数据库

 

增量恢复

  1. 在本地实例恢复完成后,登录数据库,依次执行如下SQL语句,创建可以远程登录的root账号。
    grant all privileges on *.* to root@'%' identified by 'your_password';
    flush privileges;
    注:[$Password]为账号的密码。
  2. 执行如下命令,确定需要开始增量应用Binlog的位置点。
    cat xtrabackup_binlog_info
    系统显示类似如下。
    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. 从控制台下载相同“备份所在实例编号”恢复所需Binlog文件。本文以mysql-bin.000688和mysql-bin.000689文件为例。
  4. 依次执行如下命令,使用tar命令解压下载的备份文件。
    tar xvpf mysql-bin.000688.tar
    tar xvpf mysql-bin.000689.tar
  5. 通过mysqlbinlog命令分析文件内容,确定增量恢复到的时间点。
    mysqlbinlog -v --base64-output=decode-rows mysql-bin.000689 > 689.log
  6. 执行如下命令,查看689.log文件,确认时间点。
    vi 689.log
  7. 执行如下命令,进行增量恢复,待命令执行完毕后,增量恢复完成。
    mysqlbinlog mysql-bin.000688 mysql-bin.000689 --start-position=531167 --stop-datetime="16-05-16 18:05:03" | mysql -uroot -p[$Password] -P[$Port] -h[$Host_IP]
    注:
    • -p参数和[$Password]间不要有空格,[$Password]请自行替换为实际密码。
    • [$Host_IP]参数请指定非127.0.0.1的主机IP。
    • [$Port]为数据库端口。
    • mysqlbinlog命令格式如下所示。
      mysqlbinlog binlog_file1 binlog_file2 ... binlog_filen --start-position=xxxx  --stop-datetime="YY-mm-dd hh:mm:ss" | mysql -uroot -pyour_password -Pmysql_port -hyour_host_ip
    • mysqlbinlog 其他可以使用的参数如下所示。
      • --database db_name指定仅增量恢复指定数据库db_name的数据。
      • --start-position指定开始恢复的Binlog位置点,该位置点应存在于指定的第一个binlog文件。
      • --stop-position指定恢复到的Binlog位置点,该位点应存在于指定的最后一个binlog文件。
      • --start-datetime指定开始恢复的时间点(从第一个等于或大于该时间点的Binlog事件开始)。
        以本地时间时区为准,格式为MySQL可以接受的时间格式,比如"2016-05-16 08:01:05"或"16-05-16 08:01:05"。
      • --stop-datetime指定停止恢复的时间点(在第一个等于或大于该时间点的Binlog事件停止)。
        以本地时间时区为准,格式为 MySQL 可以接受的时间格式,比如"2016-05-16 08:01:05" 或 "16-05-16 08:01:05"。

 

适用于

  • 云数据库 RDS MySQL 版