MySQL 刪庫跑路?誤刪資料庫後恢復資料

2021-10-22 21:17:49 字數 1688 閱讀 3785

背景:我把庫刪了!!還沒有備份!!!!!!!

以下的所有操作,需要基於mysql的binlog檔案。

如果連binlog檔案都沒了,就不用繼續看下去了。

環境:windows 10、mysql 5.7 還是 8.0 好像都可以

總之,一定一定定期備份!!同時開啟binlog檔案!!!

具體思路

0. 冷靜。立即終止所有資料庫的操作。找到binlog檔案。

1. 把binlog檔案,恢復成sql。

2. 執行sql檔案,恢復資料庫。

小技巧(這都是踩了坑以後總結出來的),為了節省時間(不要做無用功)

1. binlog檔案往往很大。如果要恢復特定的庫,只需要從binlog中恢復指定庫名的sql檔案

2. 當你拿到一堆binlog日誌恢復成sql的時候,你會發現資料庫在本次刪除之前可能就有被刪除,所以建議把sql從後往前看,找到最後一次drop的地方,從這裡開始往後恢復

3. 一定不能恢復到你手誤drop庫的那句話!!!

預設開啟了binlog,每次mysql server 重啟,會新建乙個binlog。

binlog恢復sql

在控制台裡執行

-- 整個bin全部恢復成sql

mysqlbinlog.exe d:\mysql\data\binlog\mysql-bin.000001 --start-position=0 --stop-position=9999999999999 | mysql -u使用者名稱 -p密碼

如:mysqlbinlog.exe d:\mysql\data\binlog\mysql-bin.000001 --start-position=0 --stop-position=9999999999999 | mysql -uroot -proot

-- stop-position 似乎需要寫得大一點,以涵蓋整個binlog檔案

-- 從某個位置開始恢復成sql

mysqlbinlog.exe d:\mysql\data\binlog\mysql-bin.000048 --start-position=912903526 --stop-position=9999999999999 | mysql -u使用者名稱 -p密碼

-- binlog恢復sql的時候,選定資料庫

執行mysqlbinlog.exe時,指定資料庫,好像是這個引數 --database=db

mysqlbinlog --no-defaults --database=gildata  --base64-output=decode-rows -v f:/binlog/data/binlog/mysql-bin.000128 > f:/binlog_output/mysql-bin.000128.sql

匯入剛剛恢復的sql

mysql -u使用者名稱 -p密碼 資料庫名 < f:/binlog_output/恢復出來的sql檔案

如:mysql -uroot -proot gildata < f:/binlog_output/mysql-bin.000051.gildata.sql

檢視sql執行進度

如果sql特別大,恢復的過程中還想檢視sql的執行進度。

但這裡我就沒有更新了…

刪庫刪目錄 跑路

刪庫刪目錄 dirdata public web public apk public h5 thinkphp public js public pay vendor dbhost 127.0.0.1 mysql伺服器主機位址 dbuser 資料庫使用者名稱 mysql使用者名稱 dbpass 資料庫...

Mysql如何在刪庫後可以不用跑路

我一直在想,地球上這麼多程式設計師,應該有很多人在團隊做專案的時候,出過很大的錯誤,比如說不小心刪了庫,活動福利欄位多寫了個零導致全伺服器玩家領到數倍獎勵,聽了沙雕群友的話執行rm rf命令。記得有一本專門調侃的書,叫 mysql從入門到刪庫跑路 各種能人異士。所以掌握如何在資料庫被刪之後進行恢復,...

Mysql如何在刪庫後可以不用跑路

我一直在想,地球上這麼多程式設計師,應該有很多人在團隊做專案的時候,出過很大的錯誤,比如說不小心刪了庫,活動福利欄位多寫了個零導致全伺服器玩家領到數倍獎勵,聽了沙雕群友的話執行rm rf命令。記得有一本專門調侃的書,叫 mysql從入門到刪庫跑路 各種能人異士。所以掌握如何在資料庫被刪之後進行恢復,...