基本上每隔20秒,就會出現一次錯誤提示,看著這個的提示應該是這個表需要修復了
錯誤產生原因
在網上查了查為什麼會出現表損壞,基本上得到以下的原因:
頻繁查詢和更新Mysql數據庫表,造成的索引錯誤。
MYSQL數據庫因為某種原因而受到了損壞,如:數據庫服務器突發性的斷電、在提在數據庫表提供服務時對表的原文件進行某種操作都有可能導致MYSQL數據庫表被損壞而無法讀取數據。總之就是因為某些不可測的問題造成表的損壞。
這個數據庫運行的是一個Discuz論壇,一直都人在刷用戶注冊,我比較認同第一種的情況,而表pre_commen_regip也是用戶注冊相關的IP記錄表,分享了這個出現的原因,我們來說說解決方法。
解決方法
我們可以使用數據庫管理工具,例如phpmyadmin,登錄數據庫,選中需要修復的表格,然後點擊修復表操作:
如果你沒有數據庫管理工具,那麼你可以遠程進入服務器,然後通過命令行操作,修復損壞的表:
找到mysql的安裝目錄的bin/myisamchk工具,在命令行中輸入:
myisamchk -c -r ../data/tablename/posts.MYI
然後myisamchk 工具會幫助你恢復數據表的索引,也不用重新啟動mysql,問題就解決了。
關於Mysql的修復
當你試圖修復一個被破壞的表的問題時,有三種修復類型。如果你得到一個錯誤信息指出一個臨時文件不能建立,刪除信息所指出的文件並再試一次–這通常是上一次修復操作遺留下來的。
這三種修復方法如下所示:
% myisamchk --recover --quick /path/to/tblName
% myisamchk --recover /path/to/tblName
% myisamchk --safe-recover /path/to/tblName
第一種是最快的,用來修復最普通的問題,而最後一種是最慢的,用來修復一些其它方法所不能修復的問題。
檢查和修復MySQL數據文件
如果上面的方法無法修復一個被損壞的表,在你放棄之前,你還可以試試下面這兩個技巧:
1、如果你懷疑表的索引文件(*.MYI)發生了不可修復的錯誤,甚至是丟失了這個文件,你可以使用數據文件(*.MYD)和數據格式文件(*.frm)重新生成它。首先制作一個數據文件(tblName.MYD)的拷貝。重啟你的MySQL服務並連接到這個服務上,使用下面的命令刪除表的內容:
mysql> DELETE FROM tblName;
在刪除表的內容的同時,會建立一個新的索引文件。退出登錄並重新關閉服務,然後用你剛才保存的數據文件(tblName.MYD)覆蓋新的(空)數據文件。
最後,使用myisamchk執行標准的修復(上面的第二種方法),根據表的數據的內容和表的格式文件重新生成索引數據。
2、如果你的表的格式文件(tblName.frm)丟失了或者是發生了不可修復的錯誤,但是你清楚如何使用相應的CREATE
TABLE語句來重新生成這張表,你可以重新生成一個新的.frm文件並和你的數據文件和索引文件(如果索引文件有問題,使用上面的方法重建一個新的)一起使用。首先制作一個數據和索引文件的拷貝,然後刪除原來的文件(刪除數據目錄下有關這個表的所有記錄)。
啟動MySQL服務並使用當初的CREATE TABLE文件建立一個新的表。新的.frm文件應該可以正常工作了,但是最好你還是執行一下標准的修復(上面的第二種方法)。
總結
為了不冒失修復,故采取保守做法,我們知道 MySQL 一個高效的管理工具便是 PhpMyAdmin,而在該管理軟件中就包含了對表的檢查、分析、修復、優化功能,比起網上提供的含糊命令行來說更安全更簡便。
通過實踐,在使用檢查表功能後確實發現了問題,之後使用修復功能進行了修復,反饋結果每個表都已經 ok,再執行一次優化,重新測試訪問網站終於恢復了正常。