運維時刻面臨着悲劇。
昨天,公司同事誤刪了一個表的數據,而且還是TRUNCATE。
能恢復的數據的唯一方法就是binlog了。
以前知道這個可以恢復數據,只是這次真的要實踐的時候還是在網上亂搜了一通。
1:找到binlog目錄
2:用mysqlbinlog 命令提取binlog裏的時間段,導出爲sql文件。
mysqlbinlog --start-datetime="2016-08-11 17:19:00" --stop-datetime="2016-09-01 20:00:00" /data/mysql/data/mysql-bin.000003 >./restore_db.sql
3:得到了sql文件之後就可以恢復了。上面的--start-datetime 是開始時間,--stop-datetime是結束時間,也可以用 --start-position - --stop-position,更精準。
4:恢復:操作之前先備份您的數據庫。萬一發生意外可以及時恢復。
mysql -u root -p 登錄數據庫
注意!!!!!!用此文件恢復數據庫跟平時恢復不一樣,binlog裏記錄的是哪個數據庫被修改的記錄,所以,用此文件恢復,目標不可以定義。比如說,裏面有a,b,c三個數據庫,只有a數據出問題。我想單獨恢復a是不行的,裏面包含了對b,c數據的操作。一樣會對b,c數據進行修改。切記。最好的方法是備份一遍,到另外一臺機器操作。
mysql>source /path/restore_db.sql (path代表路徑)
執行的時間視文件大小而定。耐心等待。一會數據恢復完成了。