2009-05-18 229 views
154

如何從.myd.myi,.frm文件恢復我的一個MySQL數據庫?如何從.myd,.myi,.frm文件中恢復MySQL數據庫

+9

雖然我回答了這一點,它確實屬於對Serverfault其導入到另一臺服務器通過phpmyadmin。 – derobert 2009-05-18 19:11:01

+26

@chandrajeet你應該真的接受最投票的答案。 – Tower 2011-10-16 10:07:36

+2

嘿chandrajeet,你爲什麼不接受derobert的回答?我確認它也適用於我。這不適合你嗎? http://stackoverflow.com/help/someone-answers – bostaf 2015-03-17 17:12:47

回答

5

可以,只要將文件複製到數據文件夾的適當命名的子目錄的目錄,因爲它是MySQL的完全相同的版本,並且保留了所有相關文件在該目錄中。如果你沒有所有的文件,我敢肯定你會遇到問題。

+0

如果我沒有相同版本的MySQL,我該怎麼辦? – 2013-09-07 19:37:12

153

如果這些是MyISAM表,然後將.FRM,.MYD和.MYI文件放入數據庫目錄(例如,/var/lib/mysql/dbname)將使該表可用。它不必與它們來自相同的數據庫,相同的服務器,相同的MySQL版本或相同的體系結構。您可能還需要更改該文件夾的所有權(例如,chown -R mysql:mysql /var/lib/mysql/dbname

請注意,權限(GRANT等)是mysql數據庫的一部分。所以他們不會隨着桌子一起恢復;您可能需要運行相應的GRANT語句來創建用戶,授予訪問權限等。(恢復mysql數據庫是可能的,但你必須要小心的MySQL版本和mysql_upgrade實用的任何需要的運行。)

其實,你可能只需要.FRM(表結構)和.MYD(表數據),但是你必須修復表來重建.MYI(索引)。

唯一的限制是,如果你是降級,你最好檢查發行說明(可能運行修表)。當然,較新的MySQL版本增加了功能。

[雖然這應該是顯而易見的,如果你混搭表,這些表之間關係的完整性是你的問題; MySQL不會在意,但你的應用程序和你的用戶可能會。另外,這種方法根本不適用於InnoDB表。只有MyISAM數據,但考慮到你有文件,你的MyISAM]

+0

如果沒有在information_schema表中添加適當的條目,這真的會起作用嗎?我的意思是MySQL需要知道查找這些文件的權利? – Zenshai 2009-05-18 19:17:31

+3

information_schema表格實際上並不存在,它們只是進入內部數據庫狀態的視圖。請參閱http://dev.mysql.com/doc/refman/5.0/en/information-schema.html – 2009-05-18 19:41:08

+4

哇,我覺得很骯髒,但從我認爲是安裝MySQL4的整個目錄中刪除我的MySQL5.1只是奇蹟般地重新創建了桌子。沒有重新啓動或任何東西(在Windows上)。 – Dave 2010-08-24 17:46:20

7

我覺得.MYI你可以從MySQL中修復。

如果您看到這些類型的MySQL錯誤消息: 數據庫無法執行查詢(查詢)1016:無法打開文件:'sometable.MYI'。 (錯誤:145) 錯誤消息:1034:表的錯誤密鑰文件:'sometable'。嘗試修復它 然後你可能有一個墜毀或損壞的表。

您可以檢查並從MySQL提示這樣的修表:

check table sometable; 
+------------------+-------+----------+----------------------------+ 
| Table | Op | Msg_type | Msg_text | 
+------------------+-------+----------+----------------------------+ 
| yourdb.sometable | check | warning | Table is marked as crashed | 
| yourdb.sometable | check | status | OK | 
+------------------+-------+----------+----------------------------+ 

repair table sometable; 
+------------------+--------+----------+----------+ 
| Table | Op | Msg_type | Msg_text | 
+------------------+--------+----------+----------+ 
| yourdb.sometable | repair | status | OK | 
+------------------+--------+----------+----------+ 

,現在你的表應該是罰款:

check table sometable; 
+------------------+-------+----------+----------+ 
| Table | Op | Msg_type | Msg_text | 
+------------------+-------+----------+----------+ 
| yourdb.sometable | check | status | OK | 
+------------------+-------+----------+----------+ 
13

有一點需要注意:

的.FRM文件具有您的表格結構,並且特定於您的MySQL版本。

.MYD文件不是特定於版本的,至少不是次要版本。

的.MYI文件是具體的,但可以被排除在外,並與REPAIR TABLE再生像其他的答案說。

這個答案的要點是讓你知道,如果你有一個表的模式轉儲,那麼你可以使用它來生成表結構,然後用你的備份替換這些.MYD文件,刪除MYI文件並修復它們。這樣,您可以將備份恢復到其他MySQL版本,或者在不使用mysqldump的情況下完全移動數據庫。移動大型數據庫時,我發現這非常有用。

23

注意,如果你要重建MYI文件,然後正確使用REPAIR TABLE的是:

REPAIR TABLE sometable USE_FRM;

否則,你可能會得到另一個錯誤。

10

簡單!創建一個虛擬數據庫(比如abc)

將所有這些.myd,.myi,.frm文件複製到mysql \ data \ abc其中mysql \ data \是所有數據庫中.myd,.myi,.frm的地方被存儲。

然後去phpMyadmin,去數據庫abc,你會發現你的數據庫。

+0

最簡短的答案 – 2017-03-31 08:33:17

-2

對於那些安裝了Windows XP並安裝了MySQL服務器5.5的應用程序,數據庫的位置是C:\ Documents and Settings \ All Users \ Application Data \ MySQL \ MySQL Server 5.5 \ data,除非您更改了位置MySql Workbench安裝GUI。

+2

問題是關於從特定文件類型中恢復,而不是在Windows XP MySQL 5.5中可以找到這些文件的地方。 – Danpe 2012-10-20 12:43:20

20

我剛剛發現解決這個問題。我在Windows上使用MySQL 5.1或5.6 7.

  1. 複製從舊的文件,該文件是位於「C的.FRM文件和ibdata1中:\程序數據\的MySQL \ MSQLServer5.1 \數據「
  2. 停止在當前的SQL實例
  3. 轉到位於datafolder的SQL Server實例 」C:\程序數據\的MySQL \ MSQLServer5.1 \數據「
  4. 粘貼ibdata1中文件夾你的數據庫包含哪些內容從您要恢復的文件中找到.frm文件
  5. 啓動MySQL實例。

無需爲此恢復找到.MYI和.MYD文件。

+0

遵循這些步驟(在其他一切失敗後)並使用'innodb_force_recovery = 4'級別(在這種情況下不確定是否需要)。謝天謝地! – 2013-12-17 15:34:03

+6

供參考:'ibdata1'是InnoDB,而不是MyISAM。 – derobert 2015-04-22 16:14:31

2

上面的描述不足以讓事情對我有用(可能是密集或懶惰),所以一旦我找到答案來幫助我將來創建此腳本。希望它可以幫助別人

vim fixperms.sh 

#!/bin/sh 
for D in `find . -type d` 
do 
     echo $D; 
     chown -R mysql:mysql $D; 
     chmod -R 660 $D; 
     chown mysql:mysql $D; 
     chmod 700 $D; 
done 
echo Dont forget to restart mysql: /etc/init.d/mysqld restart; 
3

我找到了一個解決方案,將文件轉換爲.sql文件(然後可以導入.sql文件到服務器並恢復數據庫),而無需訪問/var目錄中,因此你不需要成爲服務器管理員來執行此操作。

它要求您的計算機上安裝XAMPP或甲基苯丙胺。

  • 您已經安裝了XAMPP後,瀏覽到安裝目錄下(通常C:\XAMPP)和子目錄mysql\data。完整路徑應該是C:\XAMPP\mysql\data
  • 裏面你會看到你所創建的任何其他數據庫的文件夾。複製&將文件夾全部粘貼.myd.myi.frm文件。該文件夾的路徑應該是

    C:\XAMPP\mysql\data\foldername\.mydfiles

  • 然後在瀏覽器中訪問localhost/phpmyadmin。選擇剛剛粘貼到mysql\data文件夾中的數據庫,然後單擊導航欄中的導出。選擇將其導出爲.sql文件。然後它會彈出詢問保存文件的位置

就是這樣!您(應該)現在有一個.sql文件,其中包含最初爲.myd,.myi.frm文件的數據庫。然後,您可以通過創建一個新的數據庫,然後按「導入」的導航欄,然後按照步驟將其導入

相關問題