軟體下載地址:(如果連接失效,請公眾號內私聊獲取) 鏈接:https://pan.baidu.com/s/10KQ0-N9iYz5PDdaNBWqHVA 提取碼:1234 解壓後如下: 勾選項如下: 破解和漢化操作步驟: 1、軟體已經正確安裝,首次啟動如圖,先點擊試用: 2、啟動會讓你選擇一個主題, ...
前言
今天同事勿刪除了一個測試環境表,因為剛好在跑重要的數據,重新跑又比較麻煩,所以嘗試看能不能通過恢複數據的方式進行數據恢復,如果你也是重要數據一定要切記“不要慌,慌也沒用”。
百度過一些例子,哪些例子比較適合表剛剛創建後被刪除,就能完全恢復,本篇文章適合那種創建很長時間,表在被刪除的。
開始操作
第一步:先連接資料庫
mysql -uroot
第二步:在Mysql執行,看有沒有開發日誌備份
show variables like 'log_bin'
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
這裡返回ON表示開啟了,如果是OFF表示關閉,如果是OFF這篇文章可以不用看了,對你沒有任何幫助
第三步:繼續在MySQL執行,查看日誌備份路徑
show variables like '%datadir%'
+---------------+------------------------+
| Variable_name | Value |
+---------------+------------------------+
| datadir | /usr/local/mysql/data/ |
+---------------+------------------------+
第四步:去/usr/local/mysql/data/
路徑查看列表可以使用ll
命令
這裡可以看到很多,MySQL的日誌文件,命名都是由mysql-bin.0000xx,不過這些文件都是二進位的,需要用mysql的工具才能看出來到底是什麼。
第五步:查看二進位文件具體SQL
mysqlbinlog -v --base64-output=decode-rows /usr/local/mysql/data/mysql-bin.0000xx |grep -i -A 50 -B 50 '誤刪除的表名' >> 0xx.sql
上面這個命令的意思是指定SQL日誌的二級制文件,將二級制文件解析成SQL語句,輸出到0xx目錄,多個自行更改
因為作者這裡表創建的時間比較長,所以我不知道具體是在那個文件,只能全部查看,如果你知道那個時間可以查看指定的就好了。
這個文件有規律,就寫了一個小java實例用來生成
public static void main(String[] args) {
for (int i = 1; i <= 48; i++) {
String format = String.format("%02d", i);
String s = "mysqlbinlog -v --base64-output=decode-rows /usr/local/mysql/data/mysql-bin.0000"+format+" |grep -i -A 50 -B 50 '誤刪除的表名' >> 0"+format+".sql";
System.out.println(s);
}
}
給這些命令複製到shell命令執行,就可以在當前目錄下生成0x.sql文件。將文件下載到本地
第六步:查看生成的SQL文件
如果是一個文件可以肉眼查看,因為作者生成了48個文件,肉眼看比較麻煩,所有又寫了一個java實例,通過io查找命令
public static void main(String[] args) throws Exception {
//這裡輸入你自己的表名稱
String tableName = "表名稱";
//這裡輸入你到處的日誌路徑
File file = new File("C:\\Users\\Lenovo\\Desktop\\數據恢復");
File[] files = file.listFiles();
for (File file1 : files) {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file1)));
String line = null;
System.out.println("<<<<<<<<<<<<<<<< 正在讀取"+file1.getName()+"文件 >>>>>>>>>>>>>>>>");
while ((line = br.readLine()) != null) {
if(line.indexOf(tableName) == -1){
continue;
}
System.out.println(line+";");
}
}
}
這段代碼java執行成功後,控制台會有很多SQL語句,數據無價,最好還是肉眼篩選,看是否有需要的SQL語句數據,將數據複製到資料庫執行
第七步:執行SQL
這個就不多說了,相信你也會了~!