由于意外。。阿里云mysql中有一张表被全部删除了,深吸三口气候,开始解决。
首先用凌晨的自动备份的,进行全量恢复,然后找binlog日志(见下文),查找从全量备份到数据删除之间的记录
这导致了一个问题,为了恢复那一张表,其他的表的数据也回滚到了凌晨备份的事后。。。
由于当时比较紧张,而且时间有限,所以考虑不周,事后总结:
应该在数据库实例中新建一个新的临时库,将备份恢复到临时库中,然后在临时库导出被误删的表的数据,然后再将数据导入到正式的数据库中对应表中。
最后再从binlog日志文件中只寻找删除的表,从凌晨到删除这几个小时之间的数据。
数据丢失对任意一个网站来说都是灾难性的,在开发过程中,update和delete操作一定要跟上条件,而且条件中坚决杜绝出现类似where 1=1 恒等的情况,以免后面的and条件因为逻辑或者外星人入侵等问题没有组装上,从而导致悲剧产生。
mysql binlog3种格式,row,mixed,statement. 解析工作
mysqlbinlog --base64-output=DECODE-ROWS -v mysql-bin.000144 |more
--base64-output=DECODE-ROWS: 会显示出row模式带来的sql变更。
-v :显示statement模式带来的sql语句
outous-MacBook-Pro:bin user$ ./mysqlbinlog --base64-output=DECODE-ROWS -v /Users/dir/mysql-bin. > /Users/dir/log.txt
outous-MacBook-Pro:bin user$ pwd /usr/local/mysql/bin