濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > 如何使用myisamchk和mysqlcheck工具快速修復(fù)損壞的MySQL數(shù)據(jù)庫(kù)文件

如何使用myisamchk和mysqlcheck工具快速修復(fù)損壞的MySQL數(shù)據(jù)庫(kù)文件

熱門標(biāo)簽:云南大數(shù)據(jù)外呼系統(tǒng) 機(jī)器人打電銷電話 400電話到哪辦理優(yōu)惠 上海市三維地圖標(biāo)注 電話機(jī)器人是電腦呼號(hào)嗎 怎么更改高德地圖標(biāo)注 南寧外呼系統(tǒng)招商 鄭州網(wǎng)絡(luò)外呼系統(tǒng)價(jià)錢 博樂(lè)電銷機(jī)器人

由于服務(wù)器的數(shù)據(jù)庫(kù)硬盤空間滿了,由于大量寫入數(shù)據(jù)失敗導(dǎo)致了出現(xiàn)“Duplicate entry '' for key 'username'”的錯(cuò)誤。

如果,出現(xiàn)這樣的mysql數(shù)據(jù)庫(kù)錯(cuò)誤很可能是mysql數(shù)據(jù)庫(kù)索引出了問(wèn)題。那么,什么是mysql數(shù)據(jù)庫(kù)索引?

分析:索引如果是primary unique這兩兩種,那么數(shù)據(jù)表的數(shù)據(jù)對(duì)應(yīng)的這個(gè)字段就必須保證其每條記錄的唯一性。否則就會(huì)產(chǎn)生這個(gè)錯(cuò)誤。

一般發(fā)生在對(duì)數(shù)據(jù)庫(kù)寫操作的時(shí)候,例如Discuz!4.1論壇程序要求所有會(huì)員的用戶名username必須唯一,即username 的索引是unique,這時(shí)如果強(qiáng)行往cdb_members表里插入一個(gè)已有的username的記錄就會(huì)發(fā)上這個(gè)錯(cuò)誤,或者將一條記錄的username更新為已有的一個(gè)username。

比如某網(wǎng)友的dedecms網(wǎng)站出問(wèn)題了,訪問(wèn)一看,果然全屏報(bào)錯(cuò),檢查mysql日志,錯(cuò)誤信息為:

Table .dedecmsv4dede_archives is marked as crashed and should be repaired

提示說(shuō)cms的文章表dede_archives被標(biāo)記有問(wèn)題,需要修復(fù)。

于是趕快恢復(fù)歷史數(shù)據(jù),上網(wǎng)查找原因。最終將問(wèn)題解決。

解決方法如下:

找到mysql的安裝目錄的bin/myisamchk工具,在命令行中輸入:

myisamchk -c -r ../data/dedecmsv4/dede_archives.MYI

然后myisamchk 工具會(huì)幫助你恢復(fù)數(shù)據(jù)表的索引。重新啟動(dòng)mysql,問(wèn)題解決。

那么,修復(fù)mysql數(shù)據(jù)庫(kù)一般可以myisamchk工具或者mysqlcheck工具用這二種方法:

1、myisamchk工具

使用 myisamchk 必須暫時(shí)停止 MySQL 服務(wù)器。例如,我們要檢修 discuz 數(shù)據(jù)庫(kù)。執(zhí)行以下操作:

# service mysql stop (停止 MySQL );

# myisamchk -r /數(shù)據(jù)庫(kù)文件的絕對(duì)路徑/*MYI

# service mysql start

myisamchk 會(huì)自動(dòng)檢查并修復(fù)數(shù)據(jù)表中的索引錯(cuò)誤。

2、mysqlcheck工具

使用 mysqlcheck 無(wú)需停止 MySQL ,可以進(jìn)行熱修復(fù)。操作步驟如下:

# mysqlcheck -r discuz.*

# service mysql stop (停止 MySQL );

# myisamchk -r /數(shù)據(jù)庫(kù)文件的絕對(duì)路徑/*MYI

# service mysql start

myisamchk 會(huì)自動(dòng)檢查并修復(fù)數(shù)據(jù)表中的索引錯(cuò)誤。

注意:無(wú)論是 myisamchk 還是 mysqlcheck ,一般情況下不要使用 -f 強(qiáng)制修復(fù),-f 參數(shù)會(huì)在遇到一般修復(fù)無(wú)法成功的時(shí)候刪除部分出錯(cuò)數(shù)據(jù)以嘗試修復(fù)。所以,不到萬(wàn)不得已不要使用 -f。

下面是其它網(wǎng)友的補(bǔ)充

檢查修復(fù)所有數(shù)據(jù)庫(kù):

# mysqlcheck -A -o -r -p 
Enter password: 
db1  OK 
db2  OK  
db3  OK 
db4  OK 
...... 
...... 
...... 

修復(fù)指定的數(shù)據(jù)庫(kù)用 

# mysqlcheck  -o -r Database_NAME -p 

即可

命令詳解:

mysqlcheck客戶端可以檢查和修復(fù)MyISAM表。它還可以優(yōu)化和分析表。
mysqlcheck的功能類似myisamchk,但其工作不同。主要差別是當(dāng)mysqld服務(wù)器在運(yùn)行時(shí)必須使用mysqlcheck,而myisamchk應(yīng)用于服務(wù)器沒(méi)有運(yùn)行時(shí)。使用mysqlcheck的好處是不需要停止服務(wù)器來(lái)檢查或修復(fù)表。
Mysqlcheck為用戶提供了一種方便的使用SQL語(yǔ)句CHECK TABLE、REPAIR TABLE、ANALYZE TABLE和OPTIMIZE TABLE的方式。它確定在要執(zhí)行的操作中使用使用哪個(gè)語(yǔ)句,然后將語(yǔ)句發(fā)送到要執(zhí)行的服務(wù)器上。
有3種方式來(lái)調(diào)用mysqlcheck:

shell> mysqlcheck[options] db_name [tables]
shell> mysqlcheck[options] ---database DB1 [DB2 DB3...]
shell> mysqlcheck[options] --all--database

如果沒(méi)有指定任何表或使用---database或--all--database選項(xiàng),則檢查整個(gè)數(shù)據(jù)庫(kù)。
同其它客戶端比較,mysqlcheck有一個(gè)特殊特性。重新命名二進(jìn)制可以更改檢查表的默認(rèn)行為(--check)。如果你想要一個(gè)工具默認(rèn)可以修復(fù)表的工具,只需要將mysqlcheck重新復(fù)制為mysqlrepair,或者使用一個(gè)符號(hào)鏈接mysqlrepair鏈接mysqlcheck。如果調(diào)用mysqlrepair,可按照命令修復(fù)表。

下面的名可用來(lái)更改mysqlcheck的默認(rèn)行為:

mysqlrepair

 默認(rèn)選項(xiàng)為--repair
 
mysqlanalyze
 默認(rèn)選項(xiàng)為--analyze
 
mysqloptimize
 默認(rèn)選項(xiàng)為--optimize
 
mysqlcheck支持下面的選項(xiàng):
·         ---help,-?
顯示幫助消息并退出。
·         --all--database,-A
檢查所有數(shù)據(jù)庫(kù)中的所有表。與使用---database選項(xiàng)相同,在命令行中命名所有數(shù)據(jù)庫(kù)。
·         --all-in-1,-1
不是為每個(gè)表發(fā)出一個(gè)語(yǔ)句,而是為命名數(shù)據(jù)庫(kù)中待處理的所有表的每個(gè)數(shù)據(jù)庫(kù)執(zhí)行一個(gè)語(yǔ)句。
·         --analyze,-a
分析表。
·         --auto-repair
如果某個(gè)被檢查的表破壞了,自動(dòng)修復(fù)它。檢查完所有表后自動(dòng)進(jìn)行所有需要的修復(fù)。
·         --character-sets-dir=path
字符集的安裝目錄。參見(jiàn)5.10.1節(jié),“數(shù)據(jù)和排序用字符集”。
·         --check,-c
檢查表的錯(cuò)誤。
·         --check-only-changed,-C
只檢查上次檢查以來(lái)已經(jīng)更改的或沒(méi)有正確關(guān)閉的表。
·         --compress
壓縮在客戶端和服務(wù)器之間發(fā)送的所有信息(如果二者均支持壓縮)。
·         ---database,-B
處理數(shù)據(jù)庫(kù)中命名的所有表。使用該選項(xiàng),所有字名參量被看作數(shù)據(jù)庫(kù)名,而不是表名。
·         ---debug[=debug_options],-# [debug_options]
寫調(diào)試日志。debug_options字符串通常為'd:t:o,file_name'。
·         --default-character-set=charset
使用charsetas默認(rèn)字符集。參見(jiàn)5.10.1節(jié),“數(shù)據(jù)和排序用字符集”。
·         --extended,-e
如果你正使用該選項(xiàng)來(lái)檢查表,可以確保它們100%地一致,但需要很長(zhǎng)的時(shí)間。
如果你正使用該選項(xiàng)來(lái)修復(fù)表,則運(yùn)行擴(kuò)展修復(fù),不但執(zhí)行的時(shí)間很長(zhǎng),而且還會(huì)產(chǎn)生大量的垃圾行! 
·         --fast,-F
只檢查沒(méi)有正確關(guān)閉的表。
·         --force,-f
即使出現(xiàn)SQL錯(cuò)誤也繼續(xù)。
·         --host=host_name,-h host_name
連接給定主機(jī)上的MySQL服務(wù)器。
·         --medium-check,-m
執(zhí)行比--extended操作更快的檢查。只能發(fā)現(xiàn)99.99%的錯(cuò)誤,在大多數(shù)情況下這已經(jīng)足夠了。
·         --optimize,-o
優(yōu)化表。
·         --password[=password],-p[password]
當(dāng)連接服務(wù)器時(shí)使用的密碼。如果使用短選項(xiàng)形式(-p),選項(xiàng)和 密碼之間不能有空格。如果在命令行中--password或-p選項(xiàng)后面沒(méi)有 密碼值,則提示輸入一個(gè)密碼。
·         --port=port_num,-P port_num
用于連接的TCP/IP端口號(hào)。
·         --protocol={TCP | SOCKET | PIPE | MEMORY} 
使用的連接協(xié)議。
·         --quick,-q
如果你正使用該選項(xiàng)在檢查表,它防止掃描行以檢查錯(cuò)誤鏈接的檢查。這是最快的檢查方法。
如果你正使用該選項(xiàng)在修復(fù)表,它嘗試只修復(fù)索引樹。這是最快的修復(fù)方法。
·         --repair,-r
執(zhí)行可以修復(fù)大部分問(wèn)題的修復(fù),只是唯一值不唯一時(shí)不能修復(fù)。
·         --silent,-s
沉默模式。只打印錯(cuò)誤消息。
·         --socket=path,-S path
用于連接的套接字文件。
·         --tables
覆蓋---database或-B選項(xiàng)。選項(xiàng)后面的所有參量被視為表名。
·         --user=user_name,-u user_name
當(dāng)連接服務(wù)器時(shí)使用的MySQL用戶名。
·         --verbose,-v
冗長(zhǎng)模式。打印關(guān)于各階段程序操作的信息。
·         --version,-V
顯示版本信息并退出。

您可能感興趣的文章:
  • 詳解監(jiān)聽(tīng)MySQL的binlog日志工具分析:Canal
  • 5個(gè)MySQL GUI工具推薦,幫助你進(jìn)行數(shù)據(jù)庫(kù)管理
  • 詳解MySQL監(jiān)控工具 mysql-monitor
  • 關(guān)于Anemometer圖形化顯示MySQL慢日志的工具搭建及使用的詳細(xì)介紹
  • MySQL 之壓力測(cè)試工具的使用方法
  • pycharm工具連接mysql數(shù)據(jù)庫(kù)失敗問(wèn)題
  • Mysql數(shù)據(jù)遷徙方法工具解析
  • MySQL數(shù)據(jù)誤刪除的快速解決方法(MySQL閃回工具)
  • ktl工具實(shí)現(xiàn)mysql向mysql同步數(shù)據(jù)方法
  • MySQL可視化工具Navicat的連接方法
  • 推薦幾款MySQL相關(guān)工具

標(biāo)簽:恩施 定西 秦皇島 杭州 白銀 益陽(yáng) 澳門 寧夏

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《如何使用myisamchk和mysqlcheck工具快速修復(fù)損壞的MySQL數(shù)據(jù)庫(kù)文件》,本文關(guān)鍵詞  如何,使用,myisamchk,和,mysqlcheck,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《如何使用myisamchk和mysqlcheck工具快速修復(fù)損壞的MySQL數(shù)據(jù)庫(kù)文件》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于如何使用myisamchk和mysqlcheck工具快速修復(fù)損壞的MySQL數(shù)據(jù)庫(kù)文件的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    鲁山县| 克什克腾旗| 新源县| 遂平县| 微山县| 象州县| 安吉县| 英超| 东源县| 龙井市| 双流县| 北京市| 南康市| 绵阳市| 永清县| 龙游县| 泰宁县| 平邑县| 陕西省| 承德市| 闻喜县| 保康县| 商都县| 徐汇区| 宣恩县| 纳雍县| 淮北市| 桐乡市| 南郑县| 精河县| 咸丰县| 安庆市| 平塘县| 庐江县| 什邡市| 深州市| 郎溪县| 驻马店市| 安顺市| 金昌市| 涪陵区|