二進制日誌會記錄所有更改數據庫狀態的sql操作,比如create drop update......
二進制日誌文件存放在我們的數據目錄裏,格式如mysql-bin.000001
準備:
進入mysql命令行做如下操作:
create database a1;
#創建一個a1庫
create database a2;
#創建一個a2庫
drop database a1;
#刪掉a1庫
use a2;
create table aaa (name char(40));
#在a2庫裏創建一個叫aaa的數據表
接下來我們就恢復a1庫
一、通過時間指定還原範圍
cd /data/mysql ls mysqlbinlog mysql-bin.000009 查看創建a1庫的開始時間和創建完成後的時間 /*!*/; # at 1047 #170217 23:37:12 server id 1 end_log_pos 1126 Query thread_id=10 exec_time=0 error_code=0 SET TIMESTAMP=1487345832/*!*/; create database a1 /*!*/; # at 1126 #170217 23:37:18 server id 1 end_log_pos 1205 Query thread_id=10 exec_time=0 error_code=0 SET TIMESTAMP=1487345838/*!*/; create database a2 /*!*/; # at 1205 #170217 23:37:26 server id 1 end_log_pos 1282 Query thread_id=10 exec_time=0 error_code=0 SET TIMESTAMP=1487345846/*!*/; drop database a1 /*!*/; # at 1282 #170217 23:37:53 server id 1 end_log_pos 1375 Query thread_id=10 exec_time=0 error_code=0 use `a2`/*!*/; SET TIMESTAMP=1487345873/*!*/; create table aaa (name char(40)) /*!*/; DELIMITER ; # End of log file ROLLBACK /* added by mysqlbinlog */; /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; #說明一下:每一個sql語句都以# at 開頭,下面一行的#170217 23:37:12就是操作時的時間 找到之後記錄好,開始恢復 mysqlbinlog --start-datetime '2017-02-17 23:37:12' --stop-datetime '2017-02-17 23:37:18' mysql-bin.000009 |mysql #這裏說明一下|mysql因爲我的沒有設密碼所以直接用的,如果你的有密碼mysql -u -p 這樣用 我們在進入mysql命令行,show databases 可以看到a1庫恢復回來了
二、通過大小指定還原範圍
我們這次通過恢復的方法把a1庫刪掉
還是查看二進制日誌文件
通過大小就是所說的# at 後面的數字
mysqlbinlog --start-position 1205 --stop-position 1282 mysql-bin.000009 |mysql
在進入sql命令行show databases;查看一下是不是還有a1庫