背景:我把庫刪了!!還沒有備份!!!!!!!
以下的所有操作,需要基於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從入門到刪庫跑路 各種能人異士。所以掌握如何在資料庫被刪之後進行恢復,...