綠色資源網(wǎng):您身邊最(zuì)放心的安全下(xià)載站! 最新軟件|熱門(mén)排行(háng)|軟(ruǎn)件分類(lèi)|軟件(jiàn)專題|廠商(shāng)大全

綠色資源網

技術教程
您的位置:首頁數據庫(kù)類MySQL → MySql5.0 Table錯誤:is marked as crashed and last (automatic?) repair failed

MySql5.0 Table錯誤:is marked as crashed and last (automatic?) repair failed

我要評論 2012/07/18 11:36:10 來源:綠色資源網 編(biān)輯:chithemodel.com [ ] 評論:0 點擊:2074次(cì)

myisamchk -f -o ../data/database1/cms_session.MYI

最後我解決的方法是

  1. myisamchk -f -o ../data/database1/cms_session.MYI

以下是 網友的BLOG詳(xiáng)細(xì)資料!

我的網(wǎng)站(zhàn)出問題了,訪問一看,果然全(quán)屏(píng)報錯,檢查(chá)mysql日誌,錯(cuò)誤信息為:

  1. Table ‘.\dedecmsv4\dede_archives’ is marked as crashed and should be repaired

提(tí)示說cms的文(wén)章表dede_archives被標記(jì)有問題,需要修複(fù)。於是趕快恢複曆史數據(jù),上網查找原因。最終(zhōng)將問題解決(jué)。解決(jué)方法(fǎ)如下:

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

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

然後myisamchk 工具會幫助你恢複數據表的(de)索引。重新啟(qǐ)動mysql,問題解決。

問題分析:

1、錯誤產生原因,有網友(yǒu)說是頻繁查詢和更新dede_archives表造成的索引錯(cuò)誤,因為(wéi)我的頁麵沒有靜(jìng)態(tài)生成,而是(shì)動態頁(yè)麵(miàn),因此比較(jiào)同意這種說(shuō)法(fǎ)。還有說法為是MYSQL數(shù)據庫因為某種原因而受(shòu)到了損(sǔn)壞(huài),如(rú):數據庫服務器突發性的斷(duàn)電、在提在數據庫表提供服務時對表(biǎo)的原文件進行(háng)某種操作都有可能(néng)導致MYSQL數據庫表(biǎo)被損壞而無(wú)法讀取數據。總之就是因為某些不可測的問題造成表(biǎo)的損壞。

問題的(de)編號為145

2、問(wèn)題解(jiě)決辦法。

當你試圖(tú)修複一個被破壞(huài)的(de)表的問題時,有三種修(xiū)複類型(xíng)。如(rú)果你得到一個錯誤信息指出一(yī)個(gè)臨時(shí)文件不能建立,刪(shān)除信息所指出的文件並再試一次–這通常是(shì)上一次修複操作遺留下來的。 這三種修複(fù)方法如(rú)下所(suǒ)示:

  1. % myisamchk –recover –quick /path/to/tblName
  2. % myisamchk –recover /path/to/tblName
  3. % myisamchk –safe-recover /path/to/tblName

第(dì)一種(zhǒng)是最快的,用來修(xiū)複最普通的問題;而最後一種是最慢的,用來修複一些(xiē)其它方法所不(bú)能修複的問題。

檢查(chá)和修複MySQL數據文(wén)件 如果(guǒ)上麵的(de)方法無(wú)法修複一個被損壞的表,在你放棄之(zhī)前,你還(hái)可以試試下麵(miàn)這兩(liǎng)個技巧: 如果你懷疑表的索引文件(*.MYI)發生了不可(kě)修複(fù)的錯誤,甚至是丟失了這(zhè)個(gè)文件,你(nǐ)可以使用(yòng)數據(jù)文件(*.MYD)和數據格式文(wén)件(jiàn)(*.frm)重新生成它(tā)。首先(xiān)製作一個數據文件(tblName.MYD)的拷貝。重啟你(nǐ)的MySQL服務並連接到這個服務上,使用(yòng)下麵的命(mìng)令刪(shān)除(chú)表的內容: mysql> DELETE FROM tblName; 在刪除表的內容的同(tóng)時,會建立一個新(xīn)的索引文(wén)件。退出登錄並重新關(guān)閉服(fú)務,然後用你剛才保存(cún)的數據(jù)文件(tblName.MYD)覆(fù)蓋新的(空(kōng))數據文(wén)件。最後,使用myisamchk執行標(biāo)準(zhǔn)的修複(fù)(上麵的第二種方法),根據表的數據(jù)的內容和表(biǎo)的格式(shì)文件重新(xīn)生成索引數據。

如果你的表(biǎo)的格(gé)式(shì)文件(tblName.frm)丟失(shī)了或者是發生了(le)不可修(xiū)複的錯誤,但是(shì)你清(qīng)楚如何使用(yòng)相應(yīng)的CREATE TABLE語句來重新生成這張(zhāng)表,你可(kě)以重新生成一個新的.frm文(wén)件並和你的數據文件和索引文件(如果索引文件有問題,使用上麵的方法重建一個(gè)新(xīn)的)一(yī)起使(shǐ)用。首先製作一個數據和索引文件的(de)拷貝(bèi),然(rán)後刪除原來的(de)文件(刪除數據目錄下有關這個(gè)表(biǎo)的(de)所有記錄)。

啟動MySQL服務並使(shǐ)用當初(chū)的CREATE TABLE文(wén)件建立一個(gè)新的表。新的.frm文件應該可(kě)以(yǐ)正常工作(zuò)了,但是最好你還是執行一下標準的(de)修(xiū)複(fù)(上麵的第二種方法)。 3、myisamchk工具介紹(見mysql的官方手冊)

可以使用myisamchk實用程序來獲得有(yǒu)關數據庫表的信息或(huò)檢查、修複、優(yōu)化他(tā)們。myisamchk適用MyISAM表(對應.MYI和.MYD文件的(de)表)。

調用myisamchk的方法(fǎ):

shell> myisamchk [options] tbl_name … options指定你想讓(ràng)myisamchk做什麽。在後麵描述它們。還可以通(tōng)過(guò)調用myisamchk –help得(dé)到(dào)選項(xiàng)列表。

tbl_name是你想(xiǎng)要檢(jiǎn)查或修(xiū)複的數(shù)據庫表。如果你不在數據庫目錄的某處運行(háng)myisamchk,你必(bì)須指定(dìng)數(shù)據庫目錄的(de)路徑,因為myisamchk不知道你的數據庫(kù)位(wèi)於哪兒。實(shí)際上,myisamchk不在(zài)乎你正(zhèng)在操作的文(wén)件是否位(wèi)於(yú)一個數據(jù)庫目錄;你可以將對應於(yú)數據庫表的文件(jiàn)拷貝到別處並且(qiě)在那裏執行恢複操作。

如果你願(yuàn)意,可以用myisamchk命(mìng)令行命名幾個表。還可(kě)以通過命名索引文件(用“ .MYI”後(hòu)綴)來指定一個表。它允許你通過使用模式“*.MYI”指定在一個(gè)目錄所有的(de)表。例(lì)如,如果你在數據庫目錄,可以這樣在目錄下檢(jiǎn)查所(suǒ)有的MyISAM表(biǎo):

shell> myisamchk *.MYI 如果你不在數據庫目錄(lù)下,可通(tōng)過指(zhǐ)定到(dào)目錄的路徑檢(jiǎn)查所有在那裏的表:

shell> myisamchk /path/to/database_dir/*.MYI 你甚至可以通過為(wéi)MySQL數據目(mù)錄(lù)的路(lù)徑指(zhǐ)定一個通配符來檢(jiǎn)查所有的數據庫(kù)中的所(suǒ)有表:

shell> myisamchk /path/to/datadir/*/*.MYI 推薦的快速檢查(chá)所(suǒ)有(yǒu)MyISAM表的方式是(shì):

  1. shell> myisamchk –silent –fast /path/to/datadir/*/*.MYI

如(rú)果你想要檢(jiǎn)查所(suǒ)有(yǒu)MyISAM表並修複任何破壞的表,可以使用下麵的命令:

  1. shell> myisamchk –silent –force –fast –update-state \
  2.    -O key_buffer=64M -O sort_buffer=64M \
  3.    -O read_buffer=1M -O write_buffer=1M \
  4.    /path/to/datadir/*/*.MYI

該(gāi)命令假定你(nǐ)有大於64MB的自由內存(cún)。關於(yú)用myisamchk分配(pèi)內存(cún)的詳細信息,參見(jiàn)5.9.5.5節,“myisamchk內存使用”。

當你運行myisamchk時,必須確保其它程序不使用表。否則,當(dāng)你運行myisamchk時(shí),會(huì)顯示下麵的(de)錯誤消(xiāo)息:

  1. warning: clients are using or haven’t closed the table properly

這說明你正嚐試檢查正被(bèi)另一個還(hái)沒有關(guān)閉(bì)文件或已經終止而沒有正確地關閉文(wén)件(jiàn)的程序(例如mysqld服務器(qì))更(gèng)新的表。

如果mysqld正(zhèng)在運行,你必須通過FLUSH TABLES強製清空仍然在(zài)內存中的任何表修改。當你運行myisamchk時,必(bì)須確保其它程序不使(shǐ)用表。避免該問題(tí)的最容(róng)易的方法是使(shǐ)用CHECK TABLE而不用(yòng)myisamchk來檢(jiǎn)查表。

關鍵詞(cí):MySql

閱讀本(běn)文後您(nín)有什麽感想? 已有 人給出評價!

  • 1 歡迎喜歡
  • 2 白癡
  • 1 拜(bài)托
  • 1 哇
  • 1 加油
  • 1 鄙視