一次血的教训,阿里云rds mysql 数据库,本地化并日志恢复已删除的两天数据

参考文献:

https://help.aliyun.com/knowledge_detail/41817.html

https://help.aliyun.com/knowledge_detail/41738.html


案例背景,本人勿删公司线上数据库用户表(阿里去rds mysql),情急之下,将其恢复至最近备份(两天前,阿里云自动备份策略),恢复完后的第二天发现,备份与删库期间有些数据是重要且有用的,于是领导强烈希望能恢复期间数据,以减少公司损失,个人也怀有惭愧之心,于是尽力恢复。

假设数据时间线:1月1日12:30:00(阿里云自动备份最近时间)1月3日14:54:33(删除数据表)大概10分钟内恢复到,1月1日12:30:00数据,数据恢复后第二天(1月4日),希望恢复1月1日12:30:00至1月3日14:54:33时间的增量数据。

一、阿里云备份数据恢复到本地

提交工单并得到回复无法恢复(顺便吐槽下阿里云服务一日不如一日),于是想到虽一照常保存下来的是日志(binlog),而且有印象可以通过日志恢复数据,于是查了相关文章,得知,欲通过日志恢复有几个条件,第一是有开启binlog日志功能,二是有一个开启日志后的备份,很庆幸,这两点阿里云rds都具备。具体下载及本地数据恢复可参考RDS for MySQL 备份文件恢复到自建数据库

恢复数据遇到的问题:

Percona-XtraBackup 工具的安装 官网 其余根据文档将 1月1日12:30:00(阿里云自动备份最近时间)的数据库备份恢复到本地。

二、通过日志恢复增量数据

RDS for MySQL 本地时间点恢复

根据以上文档基本可以,将两天的增量恢复,其中有几点注意的说明下,第一,多个binlog文件可通过通配符载入,比如:

mysqlbinlog mysql-bin.00068* --start-position=531167  --stop-datetime="16-05-16 18:05:03" | mysql -uroot -pyour_password -P3306 -hyour_host_ip
*号可将多个文件导入,当然也可以用[123]这种格式

第二,日志恢复相当于将操作回放一遍,如果出现错误建议将本地库删除,重新恢复一份,避免回放两次,得到不可预期结果。

最后,希望能帮到遇到类似问题的同志们。

最后的最后,千万别心存侥幸,以为群里那些成天喊删库的事离我们很远,其实只是一行代码的距离,最终建议,“任何操作之前先备份,任何线上操作都不做!”。

你可能感兴趣的:(一次血的教训,阿里云rds mysql 数据库,本地化并日志恢复已删除的两天数据)