2011-06-03 74 views
4

我在MySQL表有一個嚴重的問題不計,一旦有這都在使用InnoDB表,現在在某種程度上隱藏MySQL的InnoDB表丟失,並在數據庫結構

看看這個[圖] *鏈接刪除 - 在標題表的數量爲79和實際計數量是74

這些表是那些正在使用

我沒有任何最近我的數據庫備份,因此這將爲我而生的遊戲

我檢查了我的VPS,發現他們在/ etc/lib/mysql/db_name /。

編輯:

我搜查各地的互聯網,我發現,每個表應該有3個與之相關的文件。

例如,表table_users有:

-- table_users.frm 
-- table_users.MYD 
-- table_users.MYI 

,併爲那些隱藏的表,也僅是.FRM文件和一張桌子的另兩個文件丟失。

我應該改變我的問題:如何從.frm文件恢復innodb表?

+0

你可以手動運行「SHOW TABLES」並檢查你的表是否在那裏? – sanmai 2011-06-03 08:34:53

+0

是的,我做到了這一點,它列出了所有的表格,包括那些丟失 – 2011-06-03 08:43:05

+0

當你嘗試查詢缺失的表格。 – 2011-06-03 13:37:45

回答

1

修訂

首先,有關文件:

  • .FRM - 表結構;
  • .myd - 表格數據;
  • .myi - 索引。

要恢復的表,你可以試着(讓先備份):

1)運行check table tablename - 對所有數據庫表;
2)運行repair table tablename - 用於必要的表格。


更新一次AGAIN

另一個想法...試試這個:

  1. 創建一個新的數據庫,以恢復和創建具有相同的名稱,.FRM文件表(用一個字段 - 僅用於創建新的.frm文件);
  2. 停止mysql服務並將你創建的.frm文件替換爲你的;
  3. 啓動mysql服務並檢查。

我期待正確的表格(當然沒有數據)。對不起,現在我沒有電腦檢查,建議...

+0

這是爲了隱藏表格,而我的表格是隱藏的,我更新了我的主題,請再次閱讀。 – 2011-06-03 08:20:57

+0

好,我知道它,但這是我得到作爲運行檢查和修復命令的結果:無法找到文件:'./database/table_users.frm'(錯誤:13 – 2011-06-03 10:07:48

+0

而且是'table_users '正確( /database/table_users.frm)?也許,有權限問題嗎? – kpower 2011-06-03 10:58:49

6

InnoDB中沒有這三個文件

InnoDB的數據存儲在「ibdata1中」所有數據庫和表。 表定義存儲在「tablename.frm」

我要說的是你的InnoDB的文件已損壞,您可能想看看這些工具: https://launchpad.net/percona-innodb-recovery-tool

+0

這是非常技術性的,我不知道如何安裝恢復工具,但我已閱讀所有文檔。這個網頁是我確切的問題:http://www.mysqlperformanceblog.com/2008/12/17/recovering-create-table-statement-from-frm-file/comment-page-1/#comment-809748他給了一個解決方案,但是當我使用該指令時,它返回在查詢期間丟失連接到MySQL服務器 – 2011-06-03 15:21:47

+0

是的,這是因爲您的ibdata1文件已損壞,並且MySQL正在嘗試讀取它。我會考慮僱用Percona的服務來恢復表(http://www.percona.com/mysql-consulting/data-recovery/) – Geoffrey 2011-06-03 22:59:48

1

其實我也被具有與缺少的兩個文件相同的問題。後來我發現,當表的類型是innodb時,數據庫文件夾將只有一個關聯文件。

但您可以將表類型更改爲myisam以獲取該表的所有三個文件。

現在按備份,可以導出數據庫,隨時隨地爲您想要:)

PHP是偉大的:)

1

![InnoDB的圖像] [1] INNODB SYSTEM表空間

INNODB系統表是包含在MySQL數據目錄---

INNODB是系統表空間divde成兩部分

1> .FRM 它可以描述表的格式,或者你可以說這是一個表* 定義 *

2>的.ibd 它包含所有系統(InnoDB主表空間包含 - ibdata1 - 和重做日誌 - ib_logfile *)。 ibdata1包含您的InnoDB數據庫,ib_logfile0和ib_logfile1是InnoDB的日誌文件。

如果您刪除了ibdata1文件,那麼您的所有InnoDB表都將丟失。

默認情況下,InnDB使用共享「表空間」,這是來自單個邏輯存儲區域的一個或多個文件。所有InnoDB表都一起存儲在tabespace(來自所有數據庫)中。默認情況下,InnoDB在數據目錄中創建兩個5MB日誌文件:iblogfile0和iblogfile1。信息以循環方式記錄,當日志填滿時,日誌前面的舊信息被覆蓋。因此,較大的日誌允許InnoDB運行更長時間,而不必強制記錄在日誌中的更改應用於磁盤上的表空間。