程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Table ‘xxx’ is marked as crashed and should be repaired 毛病處理辦法參考

Table ‘xxx’ is marked as crashed and should be repaired 毛病處理辦法參考

編輯:MySQL綜合教程

Table ‘xxx’ is marked as crashed and should be repaired 毛病處理辦法參考。本站提示廣大學習愛好者:(Table ‘xxx’ is marked as crashed and should be repaired 毛病處理辦法參考)文章只能為提供參考,不一定能成為您想要的結果。以下是Table ‘xxx’ is marked as crashed and should be repaired 毛病處理辦法參考正文


也能夠個中隨意率性辦法都可以實用於本數據庫。我臨時沒有前提測試,有前提的去測試一下,無望處理數據庫報此毛病的成績。
預防辦法:
1、必定要備份一次數據庫,最少保存了表構造,有些無關緊要的數據,可以直接籠罩。
2、主要的數據要常常留意備份,普通一個月閣下備份一次。
3、湧現此類毛病,普通可以或許處理,經jb51.net測試上面的辦法是比擬可行的。但偶然會稀有據喪失的情形,激烈建議先備份。


處理方法:起首須要定位到你的mysql的bin目次,外面包括myisamchk.exe文件的目次
./myisamchk -c -r 數據庫表MYI文件的途徑(例如:/home/mysql/var/crawlerfeedsky/aaaa.MYI)
假如還不可,就-f 強迫修復


windows辦事器下mysql的修復辦法:
F:\sqldata\mysql\bin>cd .. 前往下級目次
F:\sqldata\mysql>cd data 進入數據庫地點目次(mysql的數據庫文件都是放在data這個目次外面的)
F:\sqldata\mysql\data>cd jb51 進入數據庫,windows辦事器中數據庫就是一個文件夾(這裡以jb51為例子)

F:\sqldata\mysql\data\jb51>myisamchk -r jb51_soft

- recovering (with sort) MyISAM-table 'jb51_soft'
Data records: 7216
- Fixing index 1
- Fixing index 2
- Fixing index 3

F:\sqldata\mysql\data\jb51>

jb51_soft為數據庫的表名,提醒哪一個表毛病,就修復哪一個表。

為了今後便利,我們可以寫成一個批處置,將這個文件保留為fixit.bat放到數據庫地點的目次便可。

myisamchk -r jb51_soft


上面是網上搜集的多種辦法,年夜家可以測試下。
(一)
昨晚閱讀本身的Blog的時刻,忽然發明一切頁面都沒法顯示,到後台檢查的時刻,發明一個”Table ‘xxx' is marked as crashed and should be repaired” 的毛病。急速上彀搜刮,本來修正這個嚴重的毛病很簡略:
1. 進入治理mysql的phpmyadmin
2. 在左則選中本身的數據庫
3. 在右則勾選中毛病信息中的誰人'xxx'表
4. 轉動屏幕到上面,有個下拉菜單(With selected:),選擇”Repair table”
修正以後,並沒有發明有甚麼數據喪失,急速備份了一份數據庫到郵件外面,備份照樣很主要的!
(二)
景象:
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 強迫修復
(四)
明天上辦事器一看,發明網頁毛病,沒法銜接數據庫辦事器。mysql辦事本身down失落了,然後從新啟動辦事器,發明網頁沒法翻開,提醒: [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被標志有成績,須要修復。因而趕緊恢復汗青數據,上彀查找緣由。終究將成績處理。處理辦法以下:
找到mysql的裝置目次的bin/myisamchk對象,在敕令行中輸出:
myisamchk -c -r ../data/dedecmsv4/dede_archives.MYI
然後myisamchk 對象會贊助你恢單數據表的索引。從新啟動mysql,成績處理。
成績剖析:
1、毛病發生緣由,有網友說是頻仍查詢和更新dede_archives表形成的索引毛病,由於我的頁面沒有靜態生成,而是靜態頁面,是以比擬贊成這類說法。還有說法為是MYSQL數據庫由於某種緣由而遭到了破壞,如:數據庫辦事器突發性的斷電、在提在數據庫表供給辦事時對表的原文件停止某種操作都有能夠招致MYSQL數據庫表被破壞而沒法讀取數據。總之就是由於某些弗成測的成績形成表的破壞。
成績的編號為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 haven't closed the table properly
這解釋你正測驗考試檢討正被另外一個還沒有封閉文件或曾經終止而沒有准確地封閉文件的法式(例如mysqld辦事器)更新的表。
假如mysqld正在運轉,你必需經由過程FLUSH TABLES強迫清空依然在內存中的任何表修正。當你運轉myisamchk時,必需確保其它法式不應用表。防止該成績的最輕易的辦法是應用CHECK TABLE而不消myisamchk來檢討表。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved