MySQL數(shù)據(jù)庫(kù)表修復(fù) MyISAM
一:MySQL中MyISAM表?yè)p壞原因總結(jié):
1、 服務(wù)器突然斷電導(dǎo)致數(shù)據(jù)文件損壞;強(qiáng)制關(guān)機(jī),沒(méi)有先關(guān)閉mysql 服務(wù);mysqld 進(jìn)程在寫(xiě)表時(shí)被殺掉。
2、 磁盤(pán)損壞。
3、 服務(wù)器死機(jī)。
4、 mysql 本身的bug 。
二:MySQL中MyISAM表?yè)p壞的癥狀總結(jié):
1 、查詢(xún)數(shù)據(jù)時(shí)報(bào)出錯(cuò)誤:Incorrect key file for table: '...'. Try to repair it
2 、查詢(xún)不能在表中找到行或返回不完全的數(shù)據(jù)。
3 、Error: Table '...' is marked as crashed and should be repaired 。
4 、打開(kāi)表失?。?Can't open file: ‘×××.MYI' (errno: 145) 。
三:MySQL中MyISAM表?yè)p壞的預(yù)防:
1 、定期檢查MyISAM 表??梢允褂胢yisamchk,也可以使用mysqlcheck,還可以使用check table。
2 、在做過(guò)大量的更新或刪除操作后,使用mysqlcheck或者optimize table來(lái)優(yōu)化表,這樣既減少了文件碎片,又減少了表?yè)p壞的概率。 3 、關(guān)閉服務(wù)器前,先關(guān)閉mysqld (正常關(guān)閉服務(wù),不要使用kill -9 來(lái)殺進(jìn)程)。
4 、使用ups 電源,避免出現(xiàn)突然斷電的情況。
5 、使用最新的穩(wěn)定發(fā)布版mysql ,減少mysql 本身的bug 導(dǎo)致表?yè)p壞。
6 、對(duì)磁盤(pán)做raid ,減少磁盤(pán)出錯(cuò)并提高性能。
7 、數(shù)據(jù)庫(kù)服務(wù)器最好只跑mysqld 和必要的其他服務(wù),不要跑其他業(yè)務(wù)服務(wù),這樣減少死機(jī)導(dǎo)致表?yè)p壞的可能。
四:MySQL中MyISAM表?yè)p壞的修復(fù)總結(jié):
1 、如果mysqld已經(jīng)宕掉,且無(wú)法啟動(dòng),那么可以通過(guò)mysiamchk工具來(lái)進(jìn)行修復(fù)。此工具在mysqld服務(wù)沒(méi)有啟動(dòng)時(shí)才可以使用。該工具可以檢查并分析修復(fù)MyISAM表。
2 、如果mysqld仍在運(yùn)行,或者可以重新啟動(dòng),那么可以通過(guò)mysqlcheck工具來(lái)進(jìn)行修復(fù)?;蛘咧苯油ㄟ^(guò)mysql的內(nèi)置修復(fù)SQL語(yǔ)句來(lái)修復(fù):CHECK TABLE,REPAIR TABLE ,ANALYSE TABLE,OPTIMIZE TABLE。這兩種方法可以同樣達(dá)到對(duì)表的修復(fù)作用。 以上兩種方式各有應(yīng)用場(chǎng)景。
MySQL數(shù)據(jù)表?yè)p壞的巧妙修復(fù) 修復(fù)mysql表之前首先要知道是哪個(gè)表出了問(wèn)題
可以用root登錄后在information_schema里查找有問(wèn)題的表名
select TABLE_SCHEMA as DB_DBNAME,TABLE_NAME from INFORMATION_SCHEMA.tables where engine is null;
可以通過(guò)事件查看器里是否有
應(yīng)用程序日志--類(lèi)型為"錯(cuò)誤"--事件來(lái)源為"Mysql"的錯(cuò)誤日志,大概內(nèi)容為
1 xxxxx: Table '.xxxx' is marked as crashed and should be repaired
或者直接在phpmyadmin中查看有哪些表出了問(wèn)題比如顯示“使用中”
如果查到問(wèn)題表后,可以使用一下命令來(lái)修復(fù)mysql數(shù)據(jù)庫(kù)中的MYISAM表
1、check, repair
例如abc的test表有問(wèn)題
# mysql -u root -p 'abc'; //登錄mysql控制臺(tái),并進(jìn)入abc數(shù)據(jù)庫(kù)
mysql> check table test; //如果有問(wèn)題Msg_type里會(huì)有warning或error。沒(méi)有問(wèn)題的話出現(xiàn)的結(jié)果Status是OK
mysql> repair table test; // 修復(fù)test表(多個(gè)表名用“逗號(hào)”隔開(kāi))
mysql> check table test; // 再次檢查確認(rèn)是否修復(fù)成功
2. myisamchk, isamchk
其中myisamchk適用于MYISAM類(lèi)型的數(shù)據(jù)表,而isamchk適用于ISAM類(lèi)型的MySQL數(shù)據(jù)表。這兩條命令的主要參數(shù)相同,一般新的系統(tǒng)都使用MYISAM作為缺省的數(shù)據(jù)表類(lèi)型,這里以myisamchk為例子進(jìn)行說(shuō)明。當(dāng)發(fā)現(xiàn)某個(gè)數(shù)據(jù)表出現(xiàn)問(wèn)題時(shí)可以使用:
myisamchk tablename.MYI
進(jìn)行檢測(cè),如果需要修復(fù)的話,可以使用:
myisamchk -of tablename.MYI
關(guān)于myisamchk的詳細(xì)參數(shù)說(shuō)明,可以參見(jiàn)它的使用幫助。需要注意的時(shí)在進(jìn)行修改時(shí)必須確保MySQL服務(wù)器沒(méi)有訪問(wèn)這個(gè)MySQL數(shù)據(jù)表,保險(xiǎn)的情況下是最好在進(jìn)行檢測(cè)時(shí)把MySQL服務(wù)器Shutdown掉。
mysqladmin -uroot -p shutdown
另外可以把下面的命令放在你的rc.local里面啟動(dòng)MySQL服務(wù)器前:
[ -x /tmp/MySQL.sock ] && /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI
其中的/tmp/MySQL.sock是MySQL監(jiān)聽(tīng)的Sock文件位置,對(duì)于使用RPM安裝的用戶應(yīng)該是/var/lib/MySQL/MySQL.sock,對(duì)于使用源碼安裝則是/tmp/MySQL.sock可以根據(jù)自己的實(shí)際情況進(jìn)行變更,而pathtochk則是myisamchk所在的位置,DATA_DIR是你的MySQL數(shù)據(jù)庫(kù)存放的位置。
需要注意的時(shí),如果你打算把這條命令放在你的rc.local里面,必須確認(rèn)在執(zhí)行這條指令時(shí)MySQL服務(wù)器必須沒(méi)有啟動(dòng)!
3、檢測(cè)修復(fù)所有數(shù)據(jù)庫(kù)(表)
MySQLcheck -A -o -r -p
mysqlcheck --all-databases -r
- 很全面的Mysql數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)表、數(shù)據(jù)基礎(chǔ)操作筆記(含代碼)
- php+mysqli實(shí)現(xiàn)批量替換數(shù)據(jù)庫(kù)表前綴的方法
- 使用shell檢查并修復(fù)mysql數(shù)據(jù)庫(kù)表的腳本
- 檢查并修復(fù)mysql數(shù)據(jù)庫(kù)表的具體方法
- 用MySQL創(chuàng)建數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)表代碼
- 從MySQL數(shù)據(jù)庫(kù)表中取出隨機(jī)數(shù)據(jù)的代碼
- Mysql數(shù)據(jù)庫(kù)表定期備份的實(shí)現(xiàn)詳解
相關(guān)文章
Linux下mysql 5.7 部署及遠(yuǎn)程訪問(wèn)配置
這篇文章主要為大家詳細(xì)介紹了Linux下mysql 5.7 部署及遠(yuǎn)程訪問(wèn)的配置方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09
mysql臨時(shí)表用法分析【查詢(xún)結(jié)果可存在臨時(shí)表中】
這篇文章主要介紹了mysql臨時(shí)表用法,結(jié)合實(shí)例形式分析了MySQL將查詢(xún)結(jié)果存儲(chǔ)在臨時(shí)表中的相關(guān)操作技巧,需要的朋友可以參考下2019-08-08
Mysql 自定義隨機(jī)字符串的實(shí)現(xiàn)方法
前段時(shí)間接了一個(gè)項(xiàng)目,需要用到隨機(jī)字符串,但是mysql的庫(kù)函數(shù)沒(méi)有直接提供,需要我們自己實(shí)現(xiàn)此功能,下面小編給大家介紹下Mysql 自定義隨機(jī)字符串的實(shí)現(xiàn)方法,需要的朋友參考下吧2016-08-08
mysql空間函數(shù)計(jì)算坐標(biāo)距離方式
文章介紹了如何使用MySQL的空間函數(shù)`st_distance`和`st_distance_sphere`計(jì)算兩點(diǎn)之間的距離,并對(duì)比了兩種方法的準(zhǔn)確性,`st_distance`函數(shù)計(jì)算的是兩點(diǎn)間的度數(shù),需要乘以111195轉(zhuǎn)換為米,但因每度長(zhǎng)度不一致會(huì)有誤差2025-02-02
Mysql中STR_TO_DATE函數(shù)使用(字符串轉(zhuǎn)為日期/時(shí)間值)
這篇文章主要給大家介紹了關(guān)于Mysql中STR_TO_DATE函數(shù)使用的相關(guān)資料,STR_TO_DATE函數(shù)的主要功能是字符串轉(zhuǎn)為日期/時(shí)間值,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09
mysql 的indexof函數(shù)用法說(shuō)明
這篇文章主要介紹了mysql 的indexof函數(shù)用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12
Windows7下Python3.4使用MySQL數(shù)據(jù)庫(kù)
這篇文章主要為大家詳細(xì)介紹了Windows7下Python3.4使用MySQL數(shù)據(jù)庫(kù),MySQL Community Server的安裝步驟,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07

