windows恢復下誤刪MySQL的數據
1、遇到問題
最近在本地開發的時候,一不小心把一個數據表當成廢棄表給刪掉了,其中有很多比較重要的數據,懊惱的同時想到我開啓了binlog日誌,依稀記得可以根據這個可以恢復數據,於是開始一頓搜索資料…
2、解決問題
(1)首先確認是否開啓binlog,如果開啓了就可以此恢復刪除的數據
show VARIABLES like '%log_bin%';
結果如下圖所示:
可以看到log_bin對應的那行爲ON,表示已經開啓日誌記錄(日誌怎麼開啓不再贅述)
(2)查看日誌,找到刪除數據的記錄
上圖的log_bin_basename對應的地址就是記錄日誌的位置,我本機的位置是D:\program\mysql\mysql-8.0.17-winx64\data,
這裏有記錄所有操作數據庫的日誌文件,但是這些都是二進制文件,普通文本編輯器是沒法查看的,索性MySQL自帶查看工具
一、查看最早binlog的日誌:
show binlog events;
二、查看指定的binlog日誌:
show binlog events in 'binlog.000047';
三、指定查看 binlog.000047 這個文件,從pos點:20開始查起:
show binlog events in 'binlog.000047' from 20;
四、指定查看 binlog.000047 這個文件,從pos點:20開始查起,查詢10條
show binlog events in 'binlog.000047' from 20 limit 10;
五、指定查看 binlog.000047 這個文件,從pos點:20開始查起,偏移5行,查詢10條
show binlog events in 'binlog.000047' from 20 limit 5,10;
在sql後面加上“\G”,不會顯示詳情,便於查找操作的節點,每一小塊都是一個操作,server_id 記錄是在哪臺機器上操作的,
event_type 記錄操作類型,如下圖:
由於寫這篇文章的時候,已經放棄處理那部分日誌以及恢復那部分數據了(主要沒有設置單個日誌大小,導致日誌文件太大,已經達到GB級別,普通文本編輯器已經打不開了,chrome瀏覽器異步加載文件比較好,可以查看一部分信息,但最終會崩潰,可能是內存問題沒有繼續深入,想到過文件分割,但沒有嘗試),這裏僅模擬當時的操作
(3)日誌導出sql
到日誌所在的位置,執行以下命令,成功導出到d盤
mysqlbinlog --nodefaults binlog.000048 > d:/my.sql
注意查看下大小,如果命令報錯也可能生成空腳本
(4)恢復數據
新開一個cmd窗口,然後執行以下命令
mysql -uroot -p -v plist < my.sql // plist是數據庫名,需要和腳本中操作的數據庫名一致
至此,成功恢復數據。