刪庫不必跑路,自己動手MySQL資料恢復,真香

2022-06-22 22:36:17 字數 2202 閱讀 7420

今天專案上需要對mysql進行資料修復,通過比較各種方案和工具,準備使用binlog2sql工具進行「資料閃回」,具體怎麼使用呢,安排。

以恢復某個庫的某個表為例,

準備兩個一模一樣地mysql,安裝上,推薦用yum+rpm方式安裝,否則,配置起來能否一次性安裝成功,看運氣了。

源庫:mysql 5.7.30

目標庫:mysql 5.7.30

修改my.cnf配置檔案,新增以下內容:

server_id=1

# 標識,集群時必須且不能重複

log_bin = mysql-bin #必須開啟

binlog_format =row#必須

expire_logs_days = 0 #日誌儲存天數,按需,0代表永久

binlog2sql需要python執行環境,首先安裝pip。

pip 是乙個 python 包安裝與管理工具,檢視本機是否安裝了pip,命令如下:

再次檢視命令

pip -v
看到如下內容,代表安裝成功了

通過yum進行安裝,命令如下:

pip install -r requirements.txt
安裝過程中看到方塊亂碼別慌,最後出現success,代表ok了

至此,binglog2sql工具安裝就緒。

檢視當前的binlog主檔案,命令如下:

可以看到,源庫當前正在寫入的主log是mysql-bin.000003,將該檔案通過ssh等方式,拷貝到目標庫任意目錄,備用。

同樣執行show master status\g;命令,檢視目標庫當前binlog主檔案,如果檔案序號小於源庫的序號,例如,目標庫目前是mysql-bin.000002,則手工刷出乙個或若干個binlog檔案,直至可以覆蓋源庫的binlog序號(檔名)。

至此,菜都備齊了,開炒

進入你的binlog2sql的主目錄下的binlog2sql目錄,執行以下命令:

python binlog2sql.py -h127.0.0.1 -p你的資料庫埠 -u資料庫使用者 -p'

資料庫密碼

' --flashback -d '

資料庫名稱

' -t '

表名 --start-file=

'mysql-bin.000003

'--start-datetime=

'開始時間'

--stop-datetime=

'結束時間'

> flashback-test(名字隨便起).sql

命令執行後,就是等待,時間視你的過濾條件多少,binlog檔案資料大小,時間區間大小等條件制約,根據你伺服器資源情況設定過濾條件。如果資料量過大,可能等不出結果。

沒有訊息就是好訊息,如果經過一段時間的等待,最後成功地看到命令提示符,且生成的檔案大小 > 0,恭喜,成功了!

這個sql檔案,就是針對指定時間區間(如果你輸入了)等過濾條件內的執行的sql的反向sql,在目標表中執行一下,資料就回到你期望的時間點了。

這個在網上有很多文章都是提示你輸入格式有問題,如果你不屬於這種情況,那麼以下的辦法會終極解決

你的mysql使用的caching_sha2_password認證方式,換成mysql_native_password就可以了,具體操作如下:

alter user 『root』@『localhost』 identified with mysql_native_password by 『你的密碼』;

刪庫不必跑路,談資料庫刪除設計

凡是做業務邏輯系統,總是離不開對刪除邏輯的處理.本文論述重點是偽刪除,即欄位標示狀態,這是在一些中小型系統開發中的單據等較重要資料的主流做法.但在此之前,不妨先將常見刪除策略列舉一下 1 資料庫設定級聯 這個我沒太懂是怎麼回事,不過網上也說缺點較多,很少用到,在此就不考慮了 2 觸發器控制 本文所寫...

刪庫刪目錄 跑路

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

MySQL,從刪庫到跑路

1 刪除表中指定記錄 mariadb vincen delete from 資料表名 where 指定條件 2 同時刪除表中的記錄 mariadb vincen delete from 資料表名 where 欄位名 between 條件1 and 條件2 3 刪除表中所有的記錄 mariadb vi...