全部产品
云市场

RDS for MySQL 本地时间点恢复

更新时间:2017-06-07 13:26:11


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

注:

  • 本地(或 ECS 服务器)恢复具体步骤以及是否成功取决于用户本地 MySQL 环境配置。
  • 本文档仅用于说明本地增量恢复的步骤,用户需要根据自建环境的具体配置来调整命令。
  • 自建环境需用户自行配置搭建。
  • 本文档使用 tar.gz 压缩打包格式的 Linux 平台通用 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 进行恢复。

1. 下载备份

备份下载请参考:RDS Linux 平台使用 wget 工具下载备份与日志文件

2. 本地实例恢复

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

3. 增量恢复

在本地实例恢复完成后,通过下面的命令创建可以远程登录的 root 账号。

[mysql@iZ25Z hins996261]$$ mysql -uroot -P3306 -h127.0.0.1

(root@127.0.0.1) [mysql]> grant all privileges on *.* to root@'%' identified by 'your_password';

(root@127.0.0.1) [mysql]> flush privileges;

# 请自行将 your_password 替换为实际密码。

确定需要开始增量应用 binlog 的位点。

# xtrabackup_binlog_info 在备份集解压目录下

[mysql@iZ25Z hins996261]$ 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)

从控制台下载相同 “备份所在实例编号” 的恢复所需 binlog 文件。在本例中,增量恢复涉及到 mysql-bin.000688,mysql-bin.000689 文件。

下载后使用 tar 命令解压

[mysql@iZ25Z slave]$ tar xvpf mysql-bin.000688.tar 

[mysql@iZ25Z slave]$ tar xvpf mysql-bin.000689.tar 

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

mysqlbinlog -v --base64-output=decode-rows mysql-bin.000689 > 689.log

vi 689.log

# 请用户自行根据情况确定要恢复到的时间

确定时间点后,进行增量恢复。

mysqlbinlog mysql-bin.000688 mysql-bin.000689 --start-position=531167  --stop-datetime="16-05-16 18:05:03" | mysql -uroot -pyour_password -P3306 -hyour_host_ip

# -p 参数和 your_password 间不要有空格, your_password 请自行替换为实际密码

# -h 参数后请指定非 127.0.0.1 的主机 IP

# 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"。

待 binlog 应用完毕后,增量恢复完成。

如问题还未解决,请联系售后技术支持