今天我很震驚,我在 mysql 資料庫中的一個非常有價值的表幾乎被消滅了,我還不明白這是我的錯誤還是其他人由于一些安全漏洞而做的。
無論如何,我有一個腳本可以每天將整個 mysql 資料庫備份到一個.sql.gz檔案中,通過mysqldump. 我有數百個這樣的檔案,我想檢查該表被清除的確切日期。
我可以對COUNT表格進行某種操作,但可以從.sql檔案中進行操作嗎?
uj5u.com熱心網友回復:
不,沒有工具可以.sql像查詢資料庫一樣查詢檔案。您必須恢復該轉儲檔案,然后才能查詢其資料。
上面的評論建議計算轉儲檔案中的 INSERT 陳述句,但這并不可靠,因為默認情況下 mysqldump 會為每個 INSERT 陳述句輸出多行(--extended-insert 選項,默認情況下啟用)。每個 INSERT 的行數會有所不同,具體取決于資料的長度。
我曾經不得不解決一個和你一模一樣的問題。我的應用程式中的一個錯誤導致一些行消失,但我們不知道確切的時間,因為直到它發生幾天后我們才注意到差異。我們想確切地知道它何時發生,以便我們可以將其與其他日志相關聯并找出導致錯誤的原因。我有每日備份,但沒有比較它們的好方法。
這是我解決它的方法:
我不得不在我的開發環境中將每天的備份恢復到一個臨時的 MySQL 實體。然后我撰寫了一個 Perl 腳本來轉儲受影響表中的所有整數主鍵值,因此每個 id 值對應于 GIF 影像中的一個像素。如果在表中找到主鍵值,我會在影像中繪制一個白色像素。如果缺少主鍵值,我會在該整數值的位置繪制一個黑色像素。
映像檔案名以其所代表的備份日期命名。我為每天的備份重復了這個程序,寫入了一個新影像。
然后,我使用影像預覽應用程式使用滑鼠滾輪慢慢滾動瀏覽我的影像集合。正如預期的那樣,每張影像的像素都比之前的影像多一些,表示每天都會將記錄添加到資料庫中。然后在某個時候,資料丟失事件發生了,下一張影像有一行黑色像素,而前一天有白色像素。因此,我可以確定資料丟失發生在哪一天。
在確定包含洗掉前的資料的最后一個備份后,我將需要恢復的行匯出到生產系統。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/450591.html
標籤:mysql
上一篇:估計行數SQL
