mysql使用binlog恢復使用delete誤刪的資料
在我們平時使用MySQL資料庫的時候,可能會出現delete from table_name 忘記寫條件語句而導致刪除了整個表的資料。
這個時候就很棘手了。如果公司的資料庫都有開啟資料備份那自然是沒有問題。source 一下備份下來的sql檔案就好。
但是如果沒有備份資料呢?
辦法還是有的。
答案就是bin log。
MySQL帶了一個 bin log 的功能,
但是預設是沒有開啟的。
我們可以敲入
show VARIABLES
命令。
我們會發現log_bin的值是OFF,所以我們需要開啟bin log的功能。
如何開啟呢?也是很簡單的。
我們在my.ini檔案配置下即可。就是以前安裝MySQL的那個配置檔案。
[mysql]
# 設定mysql客戶端預設字符集
default-character-set=utf8
[mysqld]
log-bin=mysql-bin
#設定3306埠
port = 3306
# 設定mysql的安裝目錄
basedir=F:\mysql\mysql-5.6.21-winx64\mysql-5.6.21-winx64
# 設定mysql資料庫的資料的存放目錄
datadir=F:\mysql\mysql-5.6.21-winx64\mysql-5.6.21-winx64\data
# 允許最大連線數
max_connections=200
# 服務端使用的字符集預設為8位元編碼的latin1字符集
character-set-server=utf8
# 建立新表時將使用的預設儲存引擎
default-storage-engine=INNODB
紅色的字是筆者特意標紅的。在原有的配置上新增即可。
重啟下MySQL服務,bin log就是起起來了。
現在筆者的test資料庫下的user表中有這麼多資料
我們先用命令將記錄刷到log bin中
FLUSH LOGS ;
我們可以看到在MySQL的安裝目錄下的data目錄下多了mysql-bin.000001和mysql-bin.000002這兩個檔案
現在我們模擬一個誤操作。
將資料全部刪除掉。
我們可以使用
mysqlbinlog --start-date="2012-10-15 16:30:00" --stop-date="2017-6-11 17:16:00" F:\mysql\mysql-5.6.21-winx64\mysql-5.6.21-winx64\data\mysql-bin.000001 |mysql -uroot -p
來進行恢復。