Table is marked as crashed and should be repaire (

這些東西都是從其它地方找來的一些解決MYSQL數據庫這個錯誤的方法,並不必定適用於神蹟數據庫。只供參考一下,詳細的解決方法仍是需要摸索。也可能當中隨意方法都可以適用於本數據庫。我臨時沒有條件測試,有條件的去測試一下,有望解決數據庫報此錯誤的問題。php




(一)
昨晚瀏覽本身的Blog的時候,忽然發現所有頁面都沒法顯示。到後臺查看的時候。發現一個」Table ‘xxx’ is marked as crashed and should be repaired」 的錯誤。連忙上網搜索,原來改動這個嚴重的錯誤很是easy:

1. 進入管理mysql的phpmyadmin
2. 在左則選中本身的數據庫
3. 在右則勾選中錯誤信息中的那個’xxx’表
4. 滾動屏幕到如下,有個下拉菜單(With selected:),選擇」Repair table」java

實質就是運行命令:repair table tablename

改動以後,並無發現有什麼數據損失,連忙備份了一份數據庫到郵件裏面,備份仍是很是重要的!

(二)
現象:
mysql> use yourealcn
Database changed
mysql> select user,company from biz_user where commend='1' order by regtime desc,checked desc limit 0,5;
ERROR 145 (HY000): Table './yourealcn/biz_user' is marked as crashed and should be repaired
mysql> exit

使用命令myisamchk修復數據庫的MYI文件就能夠

# /usr/local/mysql5/bin/myisamchk -c -r /bak/lib/mysql/yourealcn/biz_user.*
myisamchk: error: '/bak/lib/mysql/yourealcn/biz_user.frm' is not a MyISAM-table

---------

myisamchk: error: '/bak/lib/mysql/yourealcn/biz_user.MYD' is not a MyISAM-table

---------

- recovering (with sort) MyISAM-table '/bak/lib/mysql/yourealcn/biz_user.MYI'
Data records: 20414
- Fixing index 1
- Fixing index 2
- Fixing index 3
- Fixing index 4

(三)
Caused by: java.sql.SQLException: Table '表名' is marked as crashed and should be repaired
解決的方法:
./myisamchk -c -r 數據庫表MYI文件的路徑(好比:/home/mysql/var/crawlerfeedsky/aaaa.MYI)
假設還不行,就-f 強制修復  

(四)
今天上server一看,發現網頁錯誤,沒法鏈接數據庫server。mysql

mysql服務本身down掉了,而後又一次啓動server。發現網頁沒法打開,提示: [mysql]Table tblName is marked as crashed and should be repaired
Mysql提示tblName表格已損壞。需要修復,解決方法:
進入到相應的數據庫文件夾:
cd /var/lib/mysql/dbname
使用myisamchk修復:
shell> myisamchk -r tblName

(五)
我用的修復命令是:myisamchk -r bbsthreads
當中bbsthreads是我出問題的表名,固然使用這個命令還得進入mysql你所出問題的數據庫的表的存放路徑,具體更具體的命令可以看幫助:myisamchk --help。
假設用以上命令你不能解決這個問題請看後面。後面的內容是我轉載的。

個人站點出問題了。訪問一看,果真全屏報錯,檢查mysql日誌,錯誤信息爲:

Table '.\dedecmsv4\dede_archives' is marked as crashed and should be repaired

提示說cms的文章表dede_archives被標記有問題,需要修復。因而趕快恢復歷史數據,上網查找緣由。sql

終於將問題解決。shell

解決方法例如如下:

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

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

而後myisamchk 工具會幫助你恢復數據表的索引。又一次啓動mysql,問題解決。數據庫



問題分析:

一、錯誤產生緣由,有網友說是頻繁查詢和更新dede_archives表形成的索引錯誤,因爲個人頁面沒有靜態生成,而是動態頁面。所以比較容許這樣的說法。還有說法爲是MYSQL數據庫因爲某種緣由而受到了損壞。如:數據庫server突發性的斷電、在提在數據庫表提供服務時對錶的原文件進行某種操做都有可能致使MYSQL數據庫表被損壞而沒法讀取數據。工具

總之就是因爲某些不可測的問題形成表的損壞。

問題的編號爲145

二、問題解決的方法。

當你試圖修復一個被破壞的表的問題時。有三種修復類型。假設你獲得一個錯誤信息指出一個暫時文件不能創建,刪除信息所指出的文件並再試一次--這通常是上一次修復操做遺留下來的。post


這三種修復方法例如如下所看到的:
% myisamchk --recover --quick /path/to/tblName
% myisamchk --recover /path/to/tblName
% myisamchk --safe-recover /path/to/tblName

第一種是最快的,用來修復最普通的問題;而最後一種是最慢的。用來修復一些其餘方法所不能修復的問題。

檢查和修復MySQL數據文件
假設上面的方法沒法修復一個被損壞的表,在你放棄以前,你還可以試試如下這兩個技巧:
假設你懷疑表的索引文件(*.MYI)發生了不可修復的錯誤,甚至是丟失了這個文件,你可以使用數據文件(*.MYD)和數據格式文件(*.frm)又一次生成它。首先製做一個數據文件(tblName.MYD)的拷貝。從新啓動你的MySQL服務並鏈接到這個服務上,使用如下的命令刪除表的內容:
mysql> DELETE FROM tblName;
在刪除表的內容的同一時候,會創建一個新的索引文件。退出登陸並又一次關閉服務,而後用你剛纔保存的數據文件(tblName.MYD)覆蓋新的(空)數據文件。最後,使用myisamchk運行標準的修復(上面的另一種方法),依據表的數據的內容和表的格式文件又一次生成索引數據。

假設你的表的格式文件(tblName.frm)丟失了或者是發生了不可修復的錯誤。但是你清楚怎樣使用對應的CREATE TABLE語句來又一次生成這張表,你可以又一次生成一個新的.frm文件並和你的數據文件和索引文件(假設索引文件有問題。使用上面的方法重建一個新的)一塊兒使用。首先製做一個數據和索引文件的拷貝,而後刪除原來的文件(刪除數據文件夾下有關這個表的所有記錄)。

啓動MySQL服務並使用當初的CREATE TABLE文件創建一個新的表。優化

新的.frm文件應該可以正常工做了,但是最好你仍是運行一下標準的修復(上面的另一種方法)。ui




三、myisamchk工具介紹(見mysql的官方手冊)

可以使用myisamchk有用程序來得到有關數據庫表的信息或檢查、修復、優化他們。

myisamchk適用MyISAM表(相應.MYI和.MYD文件的表)。



調用myisamchk的方法:

shell> myisamchk [options] tbl_name ...
options指定你想讓myisamchk作什麼。在後面描寫敘述它們。還可以經過調用myisamchk --help獲得選項列表。



tbl_name是你想要檢查或修復的數據庫表。假設你不在數據庫文件夾的某處執行myisamchk,你必須指定數據庫文件夾的路徑,因爲 myisamchk不知道你的數據庫位於哪兒。實際上。myisamchk不在意你正在操做的文件是否位於一個數據庫文件夾;你可以將相應於數據庫表的文件複製到別處並且在那裏執行恢復操做。



假設你願意,可以用myisamchk命令行命名幾個表。

還可以經過命名索引文件(用「 .MYI」後綴)來指定一個表。它贊成你經過使用模式「*.MYI」指定在一個文件夾所有的表。

好比。假設你在數據庫文件夾,可以這樣在文件夾下檢查所有的MyISAM表:

shell> myisamchk *.MYI
假設你不在數據庫文件夾下,可經過指定到文件夾的路徑檢查所有在那裏的表:

shell> myisamchk /path/to/database_dir*.MYI
推薦的高速檢查所有MyISAM表的方式是:

shell> myisamchk --silent --fast /path/to/datadir*.MYI
該命令假定你有大於64MB的自由內存。關於用myisamchk分配內存的具體信息,參見5.9.5.5節,「myisamchk內存使用」。

當你執行myisamchk時,必須確保其餘程序不使用表。不然,當你執行myisamchk時,會顯示如下的錯誤消息:

warning: clients are using or haven't closed the table properly
這說明你正嘗試檢查正被還有一個尚未關閉文件或已經終止而沒有正確地關閉文件的程序(好比mysqldserver)更新的表。

假設mysqld正在執行。你必須經過FLUSH TABLES強制清空仍然在內存中的不論什麼表改動。當你執行myisamchk時,必須確保其餘程序不使用表。避免該問題的最easy的方法是使用CHECK TABLE而不用myisamchk來檢查表

相關文章
相關標籤/搜索