如何:從 MySQL 中拯救資料(僅保留 HDD 上的檔案)

如何:從 MySQL 中拯救資料(僅保留 HDD 上的檔案)

最終設法將我的 Debian 虛擬伺服器從 etch 升級到 lenny。 (閱讀全文:debian:從 etch 升級到 lenny 失敗

我現在丟失了 MySQL 資料庫中的資料(包括所有表)。這些檔案仍然存在於硬碟上,而且 phpMyAdmin(進一步稱為 PMA)仍然顯示所有資料庫名稱,但沒有任何表。 “mysql”和“information_schema”資料庫仍然有它們的表。但是存取例如“mysql.user”會出現以下錯誤:

#1017 - Can't find file: './mysql/user.frm' (errno: 13) 

當然(如任何第1337章是)我沒有 mySQL 轉儲檔案。 (多次使用髒話

有誰知道有一種工具可以從檔案結構中恢復遺失的資料?

預先感謝您對第 8 層問題(即我)的任何幫助

答案1

如果您有文件,您應該能夠查看資料(innodb 表除外)。當您遇到權限問題時,通常會出現此錯誤 - 嘗試將 /var/lib/mysql 檔案變更為 mysql:mysql 並查看是否修復它。
chown -R mysql:mysql /var/lib/mysql

答案2

首先要做的事情是:不要驚慌。很可能一切都沒有丟失,您只需要弄清楚發生了什麼。

  • 升級過程中MySQL資料目錄路徑是否有變化? (我不這麼認為 - 如果我沒記錯的話,Etch 和 Lenny 預設都會從 /var/lib/mysql 提供內容。但是如果您之前手動更改了路徑,那麼可能會發生一些事情)

  • 如果你 cd 到 /var/lib/mysql,你能找到該目錄嗎mysql和文件用戶.frm在它下面?如果不能,是否會find / -iname 'user.frm'返回一些東西?

  • 下面有什麼值得注意的地方/var/日誌,特別是在/var/日誌/mysql

如果其他一切都失敗了,請在其他電腦(或虛擬機器)上設定另一個 Debian 安裝,在那裡安裝 Debian Etch,將 MySQL 資料目錄複製到那裡,看看是否有效。然後運行適當的mysql轉儲並將其恢復到你全新的萊尼身上。

編輯:好吧,這只是權限問題。無論如何,我都會在這裡留下我的回复,以防對其他人有所幫助。

答案3

嗯,有幾件事:

首先,備份您目前擁有的文件。某些操作可能會對它們進行修改,因此您不希望情況比現在更糟。

我假設您目前的資料目錄有一個mysql/user.frm檔案。如果是這樣的話,問題就在於新版本的 MySQL 正在錯誤的位置尋找資料。查看文件關於my.cnf,特別是關於 的部分DATADIR。您可以變更預設資料目錄以指向您的舊檔案集。完成此操作後,您將需要執行命令mysql_upgrade來檢查表並升級任何表結構。 查看文件

如果您的資料目錄中沒有mysql/user.frm文件,則表示出現了問題。您需要再次手動完成安裝(不是重新安裝,只是安裝後步驟)。為此,請運行該程式mysql_install_db。這應該會恢復用戶表。請注意,您將丟失所有身份驗證資訊(因為 user.frm 不存在,因此它已經消失了)。

我暫時就這樣考慮到,在您選擇其中一條路線之前,我無法提供進一步的幫助。讓我知道您選擇哪一個,我將盡力繼續盡我所能提供幫助。

答案4

這是他們可以生成的索引文件mysql修復

備份mysql檔案並在phpmyadmin中輸入查詢:

REPAIR TABLE tbl_name [, tbl_name] USE_FRM;

Mysql會修復它。

相關內容