簡體   English   中英

如何從.myd,.myi,.frm文件中恢復MySQL數據庫

[英]How to recover MySQL database from .myd, .myi, .frm files

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

如果這些是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]

請注意,如果要重建MYI文件,則正確使用REPAIR TABLE是:

修理表可用USE_FRM;

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

我剛剛發現了解決方案。 我在Windows 7上使用MySQL 5.1或5.6。

  1. 從位於“C:\\ Program Data \\ MySQL \\ MSQLServer5.1 \\ Data”上的舊文件中復制.frm文件和ibdata1
  2. 停止當前SQL實例中的SQL Server實例
  3. 轉到位於“C:\\ Program Data \\ MySQL \\ MSQLServer5.1 \\ Data”的數據文件夾
  4. 粘貼ibdata1數據庫文件夾,其中包含要恢復的文件中的.frm文件。
  5. 啟動MySQL實例。

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

有一點需要注意:

.FRM文件中包含您的表結構,並且特定於您的MySQL版本。

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

.MYI文件是特定的,但可以省略並使用REPAIR TABLE重新生成,就像其他答案所說的那樣。

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

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

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

然后轉到phpMyadmin,轉到db abc並找到您的數據庫。

我想.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 |
+------------------+-------+----------+----------+

您可以將文件復制到數據文件夾的相應命名的子目錄目錄中,只要它是完全相同的mySQL版本並且您保留了該目錄中的所有相關文件。 如果您沒有所有文件,我很確定您會遇到問題。

我找到了將文件轉換為.sql文件的解決方案(然后可以將.sql文件導入服務器並恢復數據庫),而無需訪問/var目錄,因此您不需要成為服務器管理員這樣做。

它確實需要在您的計算機上安裝XAMPP或MAMP。

  • 安裝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文件的數據庫。 然后,您可以通過phpMyAdmin將其導入到另一台服務器,方法是創建一個新數據庫,然后在導航欄中按“導入”,然后按照步驟導入它

上面的描述不足以讓我的工作(可能是密集或懶惰)所以我創建了這個腳本,一旦我找到了答案,以幫助我將來。 希望它能幫助別人

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;

http://forums.devshed.com/mysql-help-4/mysql-installation-problems-197509.html

它說要重命名ib_ *文件。 我已經做到了,它讓我回到了數據庫。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM