通過二進制日誌恢復數據

二進制日誌會記錄所有更改數據庫狀態的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庫




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章