mysql數據庫索引破壞及修復經歷分享。本站提示廣大學習愛好者:(mysql數據庫索引破壞及修復經歷分享)文章只能為提供參考,不一定能成為您想要的結果。以下是mysql數據庫索引破壞及修復經歷分享正文
mysql表索引被損壞的成績及處理
下晝下班,驚聞我的dedecms的網站出成績了,拜訪一看,果真全屏報錯,檢討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數據庫表被破壞而沒法讀取數據。總之就是由於某些弗成測的成績形成表的破壞。
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
推舉的疾速檢討一切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
這解釋你正測驗考試檢討正被另外一個還沒有封閉文件或曾經終止而沒有准確地封閉文件的法式(例如mysqld辦事器)
假如mysqld正在運轉,你必需經由過程FLUSH
TABLES強迫清空依然在內存中的任何表修正。當你運轉myisamchk時,必需確保其它法式不應用表。防止該成績的最輕易的辦法是應用CHECK
TABLE而不消myisamchk來檢討表。