朋友公司的数据库坏了,幸运的是mysql开启了binlog日志,详细的记录了从建库以来的所有操作,最后有惊无险的使用binlog日志恢复了。
以下为处理过程:
事发原因:
使用delete语句误删了一个用户的所有数据记录,大概联合有十多张表吧。
恢复过程:
1.先咨询了一些数据恢复的网站和业内人士,说是可以恢复,造价从几千到上万不等(PS,还是自己来吧)
2.第一条路走不通,多复杂多难巴拉巴拉的唬谁啊,干脆自己动手,自己试验。
3.百度科普了一下基础知识,使用mysql提供的binlog恢复工具可以使用。
这里有一个坑:
恢复的时候,stop-position需要设置成最早执行delete语句之前的最后一个position,否则会重复执行delete语句(希望我已经解释的很明白了)
4.(这个很重要)修改mysql的innodb_flush_log_at_trx_commit的值为0, sync_binlog的值为0, 因为这样会显著的提高你恢复的速度。
至于为什么,推荐阅读http://blog.csdn.net/codepen/article/details/52160715
5. 数据库恢复后,记得将第4步中的两个参数修改成合适的值,推荐innodb_flush_log_at_trx_commit=2, sync_binlog=500(主要是根据数据的安全性和使用性能上)
删除数据须谨慎!
另外,注意修改一下binlog的单文件大小上限,因为恢复的时候,一个文件太大不好查找。