mysql mysqlbinlog 恢復數據

mysqlbinlog 恢復數據

問題描述

2020年,5月8日,備份了一次某項目的數據庫。
5月29日,該項目的數據庫被覆蓋了。(也就是數據回到了5月8日)
期間沒有任何備份,由於一些原因,需要找回丟失的數據。

解決方法

mysqlbinlog 提取sql記錄 時間節點就是覆蓋數據庫之前的時間
先看看是否開啓了mysql數據庫日誌(如果沒開啓,估計要杯具。)
登錄服務器,進入mysql終端,輸入如下命令

show variables like '%log_bin%';

在這裏插入圖片描述
可以看到,log_bin 是 ON
接下來找一找mysql 的安裝目錄

vi /etc/my.cnf

在這裏插入圖片描述
安裝路徑就是 /usr/local/mysql/var

cd /usr/local/mysql/var

查看一下,標紅的文件可能就是你要操作的文件,
環境不同,文件名後綴也不一樣
在這裏插入圖片描述
爲了更直觀,我用SFTP連到服務器,可以看到文件都是有修改日期的,
一般情況下 mysql-bin 文件
在這裏插入圖片描述
以5月27日的文件爲例,mysql-bin.000062 63.84MG 那個
執行命令

cd /usr/local/mysql/bin/
./mysqlbinlog -d shop_qifenbao --stop-datetime='2020-5-29 6:00:01' /usr/local/mysql/var/mysql-bin.000062 >/recovery_62.sql;

說明,-d shop_qifenbao (-d 後面是數據庫名稱)–stop-datetime 後面是結束的時間節點 /usr/local/mysql/var/mysql-bin.000062 是要提取的文件 最後是導出到哪個文件

文件導出後,再下載到本地,進行數據恢復
去到本地mysql 的bin 目錄,執行如下命令

mysql -uroot -p < d:\recovery\recovery_62.sql

到此數據就恢復到27號的

文件較多,一個一個來比較麻煩,可以合併文件後,再按上門的方法提取

cat mysql-bin.0000* > merge.sql

或者逐個文件合併

cat mysql-bin.000062 mysql-bin.000063 > merge.sql

要合併哪些文件,得看情況了 ,到此結束。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章