mysql 修复表 阿里云_MySql数据表修复方法-阿里云开发者社区
mysqld進程在一個寫入當中被殺死。計算機的意外關閉(例如,如果計算機掉電)。一個硬件錯誤這章描述如何檢查和處理在MySQL數據庫中的數據損壞。如果你的表損壞很多,你應該嘗試找出其原因!見G.1 調試一個MySQL服務器。在執行崩潰恢復時,理解在一個數據庫中的每一個表tbl_name對應的在數據庫目錄中的3個文件是很重要的:文件 用途“tbl_name.frm” 表定義(表格)文件“tbl_name.MYD” 數據文件“tbl_name.MYI” 索引文件這3個文件的每一個文件類型可能遭受不同形式的損壞,但是問題最常發生在數據文件和索引文件。myisamchk通過一行一行地創建一個“.MYD”(數據 )文件的副本來工作,它通過由刪除老的“.MYD 文件并且重命名新文件到原來的文件名結束修復階段。如果你使用--quick,myisamchk不創建一個臨時“.MYD”文件,只是假定“.MYD”文件是正確的并且僅創建一個新的索引文件,不接觸“.MYD”文件,這是安全的,因為myisamchk自動檢測“.MYD”文件是否損壞并且在這種情況下,放棄修復。你也可以給myisamchk兩個--quick選項。在這種情況下,myisamchk不會在一些錯誤上(象重復鍵)放棄,相反試圖通過修改“.MYD”文件解決它們。通常,只有在你在太少的空閑磁盤空間上實施一個正常修復,使用兩個--quick選項才有用。在這種情況下,你應該至少在運行myisamchk前做一個備份。13.4.1 怎樣檢查表的錯誤為了檢查一張表,使用下列命令:myisamchk tbl_name這能找出所有錯誤的99.99%。它不能找出的是僅僅涉及數據文件的損壞(這很不常見)。如果你想要檢查一張表,你通常應該沒有選項地運行myisamchk或用-s或--silent選項的任何一個。myisamchk -e tbl_name它做一個完全徹底的數據檢查(-e意szj(孫占杰) 16:44:08思是“擴展檢查”)。它對每一行做每個鍵的讀檢查以證實他們確實指向正確的行。這在一個有很多鍵的大表上可能花很長時間。myisamchk通常將在它發現第一個錯誤以后停止。如果你想要獲得更多的信息,你能增加--verbose(-v)選項。這使得myisamchk繼續一直到最多20個錯誤。在一般使用中,一個簡單的myisamchk(沒有除表名以外的參數)就足夠了。myisamchk -e -i tbl_name象前面的命令一樣,但是-i選項告訴myisamchk還打印出一些統計信息。13.4.2 怎樣修復表一張損壞的表的癥狀通常是查詢意外中斷并且你能看到例如這些錯誤:“tbl_name.frm”被鎖定不能改變。不能找到文件“tbl_name.MYI”(Errcode :### )。從表處理器的得到錯誤###(此時,錯誤135是一個例外)。意外的文件結束。記錄文件被毀壞。在這些情況下,你必須修復表。myisamchk通常能檢測并且修復出錯的大部分東西。修復過程包含最多4個階段,在下面描述。在你開始前,你應該cd到數據庫目錄和檢查表文件的權限,確保他們可被運行mysqld的Unix用戶讀取(和你,因為你需要存取你正在檢查的文件)。如果它拒絕你修改文件,他們也必須是可被你寫入的。階段1:檢查你的表運行myisamchk *.MYI或(myisamchk -e *.MYI,如果你有更多的時間)。使用-s(沉默)選項禁止不必要的信息。你必須只修復那些myisamchk報告有一個錯誤的表。對這樣的表,繼續到階段2。如果在檢查時,你得到奇怪的錯誤(例如out of memory錯誤),或如果myisamchk崩潰,到階段3。舞臺 2 :簡單安全的修復首先,試試myisamchk -r -q tbl_name(-r -q意味著“快速恢復模式”)。這將試圖不接觸數據文件來修復索引文件。如果數據文件包含它應有的一切和在數據文件指向正確地點的刪除連接,這應該管用并且表可被修復。開始修理下一張表。否則,使用下列過程:在繼續前做數據文件的一個備份。使用myisamchk -r tbl_name(-r意味著“恢復模式”)。這將從數據文件中刪除不正確的記錄和已被刪除的記錄并重建索引文件。如果前面的步驟失敗,使用myisamchk --safe-recover tbl_name。安全恢復模式使用一個老的恢szj(孫占杰) 16:44:09復方法,處理常規恢復模式不行的少數情況(但是更慢)。如果在修復時,你得到奇怪的錯誤(例如out of memory錯誤),或如果myisamchk崩潰,到階段3。CMD到MYSql需要修復表的目錄下;myisamchk -r tbl_name(絕對路徑)舞臺 3 :困難的修理如果在索引文件的第一個16K塊被破壞,或包含不正確的信息,或如果索引文件丟失,你只應該到這個階段 。在這種情況下,創建一個新的索引文件是必要的。按如下這樣做:把數據文件移更安全的地方。使用表描述文件創建新的(空)數據和索引文件:shell> mysql db_namemysql> Delete FROM tbl_name;mysql> quit將老的數據文件拷貝到新創建的數據文件之中。(不要只是將老文件移回新文件之中;你要保留一個副本以防某些東西出錯。)回到階段2。現在myisamchk -r -q應該工作了。(這不應該是一個無限循環)。階段4:非常困難的修復只有描述文件也破壞了,你才應該到達這個階段。這應該從未發生過,因為在表被創建以后,描述文件就不再改變了。從一個備份恢復描述文件并且回到階段3。你也可以恢復索引文件并且回到階段2。對后者,你應該用myisamchk -r啟動。如果你沒有一個備份但是確切地知道表是怎樣被創建的,在另一個數據庫中創建表的一個拷貝。刪除新的數據文件,然后從其他數據庫將描述和索引文件移到破壞的數據庫中。這給了你新的描述和索引文件,但是讓數據文件獨自留下來了。回到階段2并且嘗試重建索引文件。13.4.3 表優化為了組合成碎片的記錄并且消除由于刪除或更新記錄而浪費的空間, 以恢復模式運行myisamchk:shell> myisamchk -r tbl_name你可以用SQL的OPTIMIZE TABLE語句使用的相同方式來優化一張表,OPTIMIZE TABLE比較容易,但是myisamchk更快。也沒有在一個實用程序和服務器之間不必要的交互可能性,因為當你使用OPTIMIZE TABLE時,服務器做所有的工作。myisamchk也有你可用來改進一個表的性能的很多其他選項:-S, --sort-index-R index_num, --sort-records=index_num-a, --analyze
對于選項完整的描述見13.1.1 myisamchk調用語法
本文轉自holy2009 51CTO博客,原文鏈接:http://blog.51cto.com/holy2010/365365
總結
以上是生活随笔為你收集整理的mysql 修复表 阿里云_MySql数据表修复方法-阿里云开发者社区的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SaS中ne在mysql语句对应_SAS
- 下一篇: mysql数据库的目录_了解MySQl数