MySQL的MyISAM表使用注意事項(xiàng)
一:MySQL中MyISAM表損壞原因總結(jié):
1、 服務(wù)器突然斷電導(dǎo)致數(shù)據(jù)文件損壞;強(qiáng)制關(guān)機(jī),沒有先關(guān)閉mysql 服務(wù);mysqld 進(jìn)程在寫表時(shí)被殺掉。
2、 磁盤損壞。
3、 服務(wù)器死機(jī)。
4、 mysql 本身的bug 。
二:MySQL中MyISAM表損壞的癥狀總結(jié):
1 、查詢數(shù)據(jù)時(shí)報(bào)出錯(cuò)誤:Incorrect key file for table: '...'. Try to repair it
2 、查詢不能在表中找到行或返回不完全的數(shù)據(jù)。
3 、Error: Table '...' is marked as crashed and should be repaired 。
4 、打開表失?。?Can’t open file: ‘×××.MYI’ (errno: 145) 。
三:MySQL中MyISAM表損壞的預(yù)防:
1 、定期檢查MyISAM 表??梢允褂胢yisamchk,也可以使用mysqlcheck,還可以使用check table。
2 、在做過大量的更新或刪除操作后,使用mysqlcheck或者optimize table來優(yōu)化表,這樣既減少了文件碎片,又減少了表損壞的概率。 3 、關(guān)閉服務(wù)器前,先關(guān)閉mysqld (正常關(guān)閉服務(wù),不要使用kill -9 來殺進(jìn)程)。
4 、使用ups 電源,避免出現(xiàn)突然斷電的情況。
5 、使用最新的穩(wěn)定發(fā)布版mysql ,減少mysql 本身的bug 導(dǎo)致表損壞。
6 、對(duì)磁盤做raid ,減少磁盤出錯(cuò)并提高性能。
7 、數(shù)據(jù)庫服務(wù)器最好只跑mysqld 和必要的其他服務(wù),不要跑其他業(yè)務(wù)服務(wù),這樣減少死機(jī)導(dǎo)致表損壞的可能。
四:MySQL中MyISAM表損壞的修復(fù)總結(jié):
1 、如果mysqld已經(jīng)宕掉,且無法啟動(dòng),那么可以通過mysiamchk工具來進(jìn)行修復(fù)。此工具在mysqld服務(wù)沒有啟動(dòng)時(shí)才可以使用。該工具可以檢查并分析修復(fù)MyISAM表。
2 、如果mysqld仍在運(yùn)行,或者可以重新啟動(dòng),那么可以通過mysqlcheck工具來進(jìn)行修復(fù)?;蛘咧苯油ㄟ^mysql的內(nèi)置修復(fù)SQL語句來修復(fù):CHECK TABLE,REPAIR TABLE ,ANALYSE TABLE,OPTIMIZE TABLE。這兩種方法可以同樣達(dá)到對(duì)表的修復(fù)作用。 以上兩種方式各有應(yīng)用場景。