年初和朋友一起做了個項目,到現在還沒收到錢呢,今天中午時候突然聽說之前的資料庫被攻擊了,業務資料庫全部被刪除。看有沒有什麼辦法恢復,要是恢復不了,肯定也別想拿錢了吧? | README FOR RECOVERY DATA | | | | All your databases was backed u ...
年初和朋友一起做了個項目,到現在還沒收到錢呢,今天中午時候突然聽說之前的資料庫被攻擊了,業務資料庫全部被刪除。看有沒有什麼辦法恢復,要是恢復不了,肯定也別想拿錢了吧?
README FOR RECOVERY DATA |
---|
All your databases was backed up. You need to email us at [email protected] to recover your data. If the payment is not received within 48 hours, all your data will be deleted and used for our purposes |
BITCOIN adress for pay bc1q8hsych64d5l79s8sztl3x7xj4u0rerltug9zcu 0,008 BTC |
Bitcoin can be purchased with Alipay from: CoinCola: https://www.coincola.com/?lang=zh-HK BitValve: https://www.bitvalve.com/buy-bitcoin/alipay |
Or another way: MoonPay: https://www.moonpay.com/buy Paybis: https://paybis.com/ Changelly: https://changelly.com/buy |
After paying write to us in the mail with your DB IP: [email protected] and you will receive a link to download your database dump. |
打開資料庫後就看到只剩下mysql和README FOR RECOVERY DATA資料庫,自己創建的資料庫已被刪除,順著打開README資料庫中僅有的一張表README FOR RECOVERY DATA
。大概意思就是您的資料庫已被攻擊者備份了 請48小時內用比特幣支付。如果48小時內沒有付款 數據將被刪除。這不是赤裸裸的上演了互聯網勒索嘛。
觀察BinLog日誌文件
進入mysql數據存放目錄
-rw-r----- 1 polkitd input 56 Jan 5 2023 auto.cnf
-rw-r----- 1 polkitd input 2983124 Jan 5 2023 binlog.000001
-rw-r----- 1 polkitd input 157 Jan 5 2023 binlog.000002
-rw-r----- 1 polkitd input 157 Jan 5 2023 binlog.000003
-rw-r----- 1 polkitd input 2235 Jan 5 2023 binlog.000004
-rw-r----- 1 polkitd input 180 Jan 5 2023 binlog.000005
-rw-r----- 1 polkitd input 153788296 Jul 31 14:40 binlog.000006
-rw-r----- 1 polkitd input 96 Jan 5 2023 binlog.index
能看到binlog最新的一個文件binlog.000006
貌似還沒有被刪除。嘗試用日誌還原試一試
ps:這裡如果binlog文件都被刪除了的話 估計真不好恢復了。
基於mysqbinlog工具恢複數據
mysqlbinlog工具是把二進位的binlog轉換為文本格式,通常情況下就會用到mysqlbinlog 日誌管理工具。
在mysql安裝目錄下 bin目錄中正常會有一個工具命令行叫mysqbinlog
如果是跑在docker中的mysql可能是沒有這個命令的。需要從別的地方複製過來,複製資料庫命令版本需要和當前恢復的資料庫版本一致。比如我這裡就是因為安裝在docker中的資料庫,沒有mysqlbinlog工具。
先從官網下載資料庫包 解壓後 ,把bin中的mysqlbinlog複製到docker中進行執行。 如果有mysqlbinlog工具跳過此步。
Usage: ./mysqlbinlog [options] log-files
-d,-database-name:指定資料庫名稱,只列出指定的資料庫相關操作。
-o,-offset=#:忽略掉日誌中的前n行命令。
-r,--result-file=name:將輸出的文本格式日誌輸出到指定文件。
-s,--short-form:顯示簡單格式,省略掉一些信息。
-set-charset=char-name:在輸出為文本格式時,在文件第一行加上 set names char-name,這個選項在某些情況下裝載數據時非常有用。
--start-datetime=name,--stop-datetime=name: 指定日期間隔內的所有日誌。
--start-position=#, --stop-position=#:指定位置間隔內的所有日誌。
常用就參數項就以上幾個。
這裡假定我們恢復到binlog.000006文件中的內容。
mysqlbinlog binlog.000006 > /root/binlogtxt.sql
執行完成之後 /root/binlogtxt.sql文件中上百兆的語句。我想大概率是妥了。
恢復到資料庫中。
mysql -uroot -p
source /root/binlogtxt.sql
像我這裡的場景是因為資料庫被drop了。恢復的時候需要註意 只需要恢復到drop前一步就行。如果全部日誌恢復後發現還是沒有資料庫,可能是恢復後又自動被日誌中drop語句刪除了。
怎麼知道恢復到哪一步之前呢?
1、可以打開/root/binlogtxt.sql文件 看到drop database語句後就註釋了。
2、./mysqlbinlog 導出文本的時候 設置時間段或者position位置。
打了navicat看了一下 果然恢覆成功了 表結構和數據都恢復的很完美。
轉載請註明出處。
作者:peachyy
出處:http://www.cnblogs.com/peachyy/
出處:https://peachyy.gitee.io/
出處:https://peachyy.github.io/
公眾號: