今天早晨,打開資料庫一看,保存的數據全不見了,只剩下一個叫PLEASE_READ_ME_VVV的資料庫。

裡面寫著

To recover your lost Database and avoid leaking it: Send us 0.045 Bitcoin (BTC) to our Bitcoin address 1McksxpysJGSG9a9zHvan5f8Y1nfpDbVYF and contact us by Email with your Server IP or Domain name and a Proof of Payment. Your Database is downloaded and backed up on our servers. Backups that we have right now: *. Any email without your server IP Address or Domain Name and a Proof of Payment together will be ignored. If we dont receive your payment in the next 10 Days, we will make your database public or use them otherwise.

翻譯過來就是:

要恢復丟失的資料庫並避免泄漏:請將0.045比特幣

(BTC)發送到我們的比特幣地址1Mcksxpysjgsg9a9zhvan5f8y1nfpdbvyf,並通過電子郵件與您的伺服器IP或域名和付款證明聯繫。您的資料庫已下載並備份到我們的伺服器上。我們現在擁有的備份:*。任何沒有您的伺服器IP地址或域名和付款證明一起的電子郵件都將被忽略。如果我們在未來10天內沒有收到您的付款,我們將公開您的資料庫或使用它們。

被勒索了。

第一步,打開谷歌尋找解決辦法。看到這篇博文,遇到了同樣的問題。

資料庫被人勒索比特幣慘遭刪庫 printf520.com/single.ht

以下內容,針對具體情況進行進一步處理。

第二步,查看自已是否打開了mysql的binlog

SHOW VARIABLES LIKE log_bin%;
+---------------------------------+---------------------------------------+
| Variable_name | Value |
+---------------------------------+---------------------------------------+
| log_bin | ON |
| log_bin_basename | /usr/local/var/mysql/mysql-bin |
| log_bin_index | /usr/local/var/mysql/mysql-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+---------------------------------------+
6 rows in set (0.00 sec)

log_bin是ON說明mysql是開啟了binlog的,找到了binlog的位置,在

/usr/local/var/mysql/mysql-bin

於是

cd var/lib/mysql

其中的mysql-bin.00000*就是binlog文件。

binlog是Mysql sever層維護的一種二進位日誌,與innodb引擎中的redo/undo log是完全不同的日誌;其主要是用來記錄對mysql數據更新或潛在發生更新的SQL語句,並以"事務"的形式保存在磁碟中;

作用主要有:

  • 複製:MySQL Replication在Master端開啟binlog,Master把它的二進位日誌傳遞給slaves並回放來達到master-slave數據一致的目的
  • 數據恢復:通過mysqlbinlog工具恢複數據
  • 增量備份

然後我們打開最新的binlog文件,在文件的最後幾行,你會發現令人窒息的操作

好了,這下我明白了,人家直接drop了。

第三步:使用binlog恢復文件

原理就是binlog保存了你所有的資料庫操作,相當於你重新執行了在執行drop之前所有的增刪改查。

那麼我們就需要找到發生刪除的時間點。如上圖所示,# 190622 9:32:19

所以使用mysqlbinlog恢復資料庫

在/usr/local/var/mysql 目錄下執行

mysqlbinlog --start-datetime=2019-01-01 00:00:00 --stop-datetime=2019-06-24 10:30:00 mysql-bin.000001 | mysql -h 123.45.678.9 -u root -p -P 3306

其中

start-datetime=為你想恢復的起始位置,一般為剛創建資料庫的時候

stop-datetime=為被刪庫之前的時間,只要是被刪庫之前就可以

mysql-bin.000001為要恢復的binlog文件,將所有相關的mysql-bin都寫上,以逗號隔開

mysql -h 123.45.678.9 -u root -p -P 3306 為你的遠程資料庫地址

123.45.678.9為遠程ip

root為用戶名

3306為埠號

第四步:恢復完成

如果第三步出錯,一般都在於沒有選擇合適的起始和終止時間,這個需要自己去尋找

恢復過程視資料庫大小時間長短不定

參考資料:

Printf & 520?

www.printf520.com圖標
推薦閱讀:

相关文章