
我不小心掉落了所有桌子。我可以恢復回來嗎?我沒有備份副本。
答案1
如果你確實沒有備份,那麼我 99% 確定你運氣不好。
如果您確實有任何形式的備份,無論有多舊,那麼您是否透過 log-bin 選項開啟了二進位日誌記錄到 MySQL 設定檔 (my.ini) 中?如果是這樣,您可能能夠恢復自上次備份以來的狀態。
抱歉,以糟糕的方式開始新的一周。
答案2
這個問題相當老了,但沒有一個肯定的答案,所以我會添加一個。
MySQL 刪除表後,資料仍會在媒體上保留一段時間。因此您可以獲得記錄並重建表。稍後我將在部落格中介紹它,但現在先快速繪製草圖。
您需要有表格的結構(CREATE TABLE 語句)。
如果 innodb_file_per_table 為 ON,則刪除的資料表位於磁碟分割區上。停止 MySQL 並儘快將其重新掛載為唯讀。如果 MySQL 位於根分割區上(順便說一句,這不是一個好主意),則取得映像或取出磁碟並將其插入另一台伺服器。換句話說,停止所有寫入。
如果 innodb_file_per_table OFF 那就停止 MySQL。
然後下載並編譯InnoDB的un-drop工具https://github.com/twindb/undrop-for-innodb/。有關詳細信息,請查看“[編譯 TwinDB 恢復工具包][1]”帖子。
然後使用stream_parser解析磁碟分割或ibdata1(取決於innodb_file_per_table設定):
./stream_parser -f /path/to/diskimage_or_ibdata1
然後恢復InnoDB字典以了解刪除的表在哪個index_id中。
然後取得表結構並取得記錄
./c_parser -f pages-diskimage_or_ibdata1/FIL_PAGE_INDEX/00000<index_id>.page
它將記錄輸出到 stdout,並將 LOAD DATA 命令輸出到 stderr。 [1]:https://twindb.com/how-to-recover-innodb-dictionary/
Undrop For InnoDB 的 PS 影片教學 - Undrop for InnoDB 概述https://youtu.be/-1LeLhGjAWM
答案3
這就是我所做的。在 mysql 目錄中(對於 Ubuntu,這是 /var/lib/mysql,對於使用 Homebrew 的 Mac,這是 /usr/local/var/mysql),我找到了一些檔案。首先,我將包含特定模式的 myapp_development/ 目錄複製到我的本機 mysql 目錄中。然後我備份了本地的ibdata1,並將伺服器的ibdata1複製到mysql目錄中。殺死了 mysqld。 (ps aux
找到 PID,然後kill PID
)。重新啟動mysql,它以崩潰恢復模式啟動。然後啟動我的本機 mysql 客戶端並產生我需要的表的完整轉儲。
而且,代表我們以為永遠消失的元資料輸入數週的工作的 15,000 行被保存了!
希望這對某人有幫助。
答案4
您無法「撤銷」DROP TABLE
.
你可以看看MySQL有沒有二進位日誌記錄啟用後,也許您可以從那裡提取一些數據。
除此之外,您可以忘記 MySQL,並遇到「我不小心從檔案系統中刪除了一些檔案」的相同類別問題。有一些工具可以嘗試恢復文件,也有一些公司在專業的基礎上這樣做。