共計 3039 個字符,預計需要花費 8 分鐘才能閱讀完成。
行業資訊
數據庫
如何解決 mysql 錯誤……is marked as crashed and should be 的問題
這篇文章將為大家詳細講解有關如何解決 mysql 錯誤……is marked as crashed and should be 的問題,文章內容質量較高,因此丸趣 TV 小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
我用的修復命令是:myisamchk -r bbsthreads
其中 bbsthreads 是我出問題的表名,當然使用這個命令還得進入 mysql 你所出問題的的表的存放路徑,具體更詳細的命令可以看幫助:myisamchk –help;
如果用以上命令你不能解決問題請看后面,后面的內容是我轉載的。
我的網站出問題了,訪問一看,果然全屏報錯,檢查日志,錯誤信息為:
Table .dedecmsv4dede_archives is marked as crashed and should be repaired
提示說 cms 的文章表 dede_archives 被標記有問題,需要修復。于是趕快恢復歷史數據,上網查找原因。最終將問題解決。解決方法如下:
找到 mysql 的安裝目錄的 bin/myisamchk 工具,在命令行中輸入:
myisamchk -c -r ../data/dedecmsv4/dede_archives.MYI
然后 myisamchk 工具會幫助你恢復數據表的索引。重新啟動 mysql,問題解決。
問題分析:
1、錯誤產生原因,有網友說是頻繁查詢和更新 dede_archives 表造成的索引錯誤,因為我的頁面沒有靜態生成,而是動態頁面,因此比較同意這種說法。還有說法為是 MYSQL 數據庫因為某種原因而受到了損壞,如:數據庫服務器突發性的斷電、在提在數據庫表提供服務時對表的原文件進行某種操作都有可能導致 MYSQL 數據庫表被損壞而無法讀取數據??傊褪且驗槟承┎豢蓽y的問題造成表的損壞。
問題的編號為 145
2、問題解決辦法。
當你試圖修復一個被破壞的表的問題時,有三種修復類型。如果你得到一個錯誤信息指出一個臨時文件不能建立,刪除信息所指出的文件并再試一次 – 這通常是上一次修復操作遺留下來的。
這三種修復方法如下所示:
% 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 文件應該可以正常工作了,但是最好你還是執行一下標準的修復(上面的第二種方法)。
3、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
你甚至可以通過為 MySQL 數據目錄的路徑指定一個通配符來檢查所有的數據庫中的所有表:
shell myisamchk /path/to/datadir/*/*.MYI
推薦的快速檢查所有 MyISAM 表的方式是:
shell myisamchk –silent –fast /path/to/datadir/*/*.MYI
如果你想要檢查所有 MyISAM 表并修復任何破壞的表,可以使用下面的命令:
shell myisamchk –silent –force –fast –update-state
-O key_buffer=64M -O sort_buffer=64M
-O read_buffer=1M -O write_buffer=1M
/path/to/datadir/*/*.MYI
該命令假定你有大于 64MB 的自由內存。關于用 myisamchk 分配內存的詳細信息,參見 5.9.5.5 節,“myisamchk 內存使用”。
當你運行 myisamchk 時,必須確保其它程序不使用表。否則,當你運行 myisamchk 時,會顯示下面的錯誤消息:
warning: clients are using or havent closed the table properly
這說明你正嘗試檢查正被另一個還沒有關閉文件或已經終止而沒有正確地關閉文件的程序 (例如 mysqld 服務器) 更新的表。
如果 mysqld 正在運行,你必須通過 FLUSH TABLES 強制清空仍然在內存中的任何表修改。當你運行 myisamchk 時,必須確保其它程序不使用表。避免該問題的最容易的方法是使用 CHECK TABLE 而不用 myisamchk 來檢查表
關于如何解決 mysql 錯誤……is marked as crashed and should be 的問題就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。