[英]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。
無需為此恢復找到.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。
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.