您可以参考本文示例,在本地或ECS实例的自建MySQL数据库上进行RDS MySQL的增量恢复,以恢复到指定的时间点。
本方案适用于增量级别的恢复,实例级别的恢复方案,请参见RDS 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社区版为示例。
准备工作,创建并授权可以远程登录本地自建MySQL的用户。
在本地自建MySQL上创建一个可以远程登录的用户,并赋予该用户相应的操作权限。权限设置的详细操作,请参见权限设置。
执行以下命令,查看由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)。
从RDS控制台获取与备份文件所在实例编号一致的Binlog日志文件,执行以下命令下载备份文件:
wget -c "日志备份下载链接" -O <日志文件名>
以
mysql-bin.000688
和mysql-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
说明日志备份文件下载链接获取方法,请参见下载备份。
通过mysqlbinlog命令分析文件内容,确定增量恢复到的时间点。
mysqlbinlog -v --base64-output=decode-rows mysql-bin.0006XX > 689.log
执行以下命令,查看689.log文件,确认想要恢复的时间点。
vi 689.log
执行以下命令,执行增量恢复,恢复到指定的时间点。
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版