問題描述
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
要合併哪些文件,得看情況了 ,到此結束。