Can’t open file:'[Table]mytable.MYI'。本站提示廣大學習愛好者:(Can’t open file:'[Table]mytable.MYI')文章只能為提供參考,不一定能成為您想要的結果。以下是Can’t open file:'[Table]mytable.MYI'正文
多半情形下,數據庫被損壞只是指索引文件遭到了損壞,真實的數據被損壞失落的情形異常少。年夜多半情勢的數據庫損壞的的修復相當簡略。
和後面的校驗一樣,修復的方法也有三種。
上面講的辦法只對MyISAM格局的表有用。其他類型的破壞須要從備份中恢復。
1,REPAIR TABLE SQL statement(mysql辦事必需處於運轉狀況)。
2,敕令mysqlcheck(mysql辦事可以處於運轉狀況)。
3,敕令myisamchk(必需停失落mysql辦事,或許所操作的表處於不運動狀況)。
在修復表的時刻,最好先作一下備份。所以你須要兩倍於原始表年夜小的硬盤空間。請確保在停止修復前你的硬盤空間還沒有效完。
1>用”repair table”方法修復
語法:repair table 表名 [選項]
選項以下:
QUICK 用在數據表還沒被修正的情形下,速度最快
EXTENDED 試圖去恢復每一個數據行,會發生一些渣滓數據行,萬般無法的情形下用
USE_FRM 用在.MYI文件喪失或許頭部遭到損壞的情形下。應用.frm的界說來重建索引
多半情形下,簡略得用”repair table tablename”不加選項便可以弄定成績。然則當.MYI文件喪失或許頭部遭到損壞時,如許的方法不論用,例如:
mysql> REPAIR TABLE mytable;
+————————-+——–+———-+———————————————+
| Table | Op | Msg_type | Msg_text |
+————————-+——–+———-+———————————————+
| sports_results.mytable | repair | error | Can't find file: ‘mytable.MYI' (errno: 2) |
+————————-+——–+———-+———————————————+修復掉敗的緣由時索引文件喪失或許其頭部遭到了損壞,為了應用相干界說文件來修復,須要用USE_FRM選項。例如:
mysql> REPAIR TABLE mytable USE_FRM;
+————————-+——–+———-+————————————+
| Table | Op | Msg_type | Msg_text |
+————————-+——–+———-+————————————+
| sports_results.mytable | repair | warning | Number of rows changed from 0 to 2 |
| sports_results.mytable | repair | status | OK |
+————————-+——–+———-+————————————+
我們可以看到Msg_test表項的輸入信息”ok”,表名曾經勝利修復受損表。
2>用mysql內建敕令mysqlcheck來修復
當mysql辦事在運轉時,也能夠用mysql內建敕令mysqlcheck來修復。
語法:mysqlcheck -r 數據庫名 表名 -uuser -ppass
%mysqlcheck -r sports_results mytable -uuser -ppass
sports_results.mytable OK應用mysqlcheck可以一次性修復多個表。只需在數據庫名後列出響應表名便可(用空格離隔)。或許數據庫名後不加表名,將會修單數據庫中的一切表,例如:
%mysqlcheck -r sports_results mytable events -uuser -ppass
sports_results.mytable OK
sports_results.events OK
%mysqlcheck -r sports_results -uuser -ppass
sports_results.mytable OK
sports_results.events OK3>用myisamchk修復
用這類方法時,mysql辦事必需停失落,或許所操作的表處於不運動狀況(選項skip-external-locking沒被應用)。記住必定要在相干.MYI文件的途徑下或許本身界說其途徑。
語法:myisamchk [選項] [表名]
上面是其選項和描寫
–backup, -B 在停止修復前作相干表得備份
–correct-checksum 改正校驗和
–data-file-length=#, -D # 重建表時,指定命據文件得最年夜長度
–extend-check, -e 試圖去恢復每一個數據行,會發生一些渣滓數據行,萬般無法的情形下用
–force, -f 當碰到文件名雷同的.TMD文件時,將其籠罩失落。
keys-used=#, -k # 指定所用的keys可加速處置速度,每一個二進制位代表一個key.第一個key為0
–recover, -r 最經常使用的選項,年夜多半損壞都可以經由過程它來修復。假如你的內存足夠年夜,可以增年夜參數sort_buffer_size的值來加速恢復的速度。然則碰到獨一鍵因為損壞而不惟一 的表時,這類方法不論用。
–safe-recover -o 最完全的修復方法,然則比-r方法慢,普通在-r修復掉敗後才應用。這類方法讀出 一切的行,並以行動基本來重建索引。它的硬盤空間需求比-r方法略微小一點,因 為它沒創立分類緩存。你可以增長key_buffer_size的值來加速修復的速度。
–sort-recover, -n mysql用它類分類索引,雖然成果是暫時文件會異常年夜
–character-sets-dir=… 包括字符集設置的目次
–set-character-set=name 為索引界說一個新的字符集
–tmpdir=path, -t 假如你不想用情況變量TMPDIR的值的話,可以自界說暫時文件的寄存地位
–quick, -q 最快的修復方法,當數據文件沒有被修正時用,當存在多鍵時,第二個-q將會修正 數據文件
–unpack, -u 解開被myisampack打包的文件
myisamchk運用的一個例子
% myisamchk -r mytable
- recovering (with keycache) MyISAM-table ‘mytable.MYI'
Data records: 0