mysql 優化修復表

OPTIMIZE TABLE `table_name` 優化表

MyISAM 引擎清理碎片 OPTIMIZE
語法: OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLEtbl_name[,tbl_name] ...
OPTIMIZE TABLE 用於回收閒置的數據庫空間,當表上的數據行被刪除時,所佔據的磁盤空間並無當即被回收,使用了OPTIMIZE TABLE命令後這些空間將被回收,而且對磁盤上的數據行進行重排(注意:是磁盤上,而非數據庫)。多數時間並不須要運行OPTIMIZE TABLE,只需在批量刪除數據行以後,或按期(每週一次或每個月一次)進行一次數據表優化操做便可,只對那些特定的表運行,這個操做對於遊戲數據庫中的某些表特別起做用,這些表基本上須要每週作一次優化,甚至一週兩次。 若是您已經刪除了表的一大部分,或者若是您已經對含有可變長度行的表(含有VARCHAR, BLOB或TEXT列的表)進行了不少更改,則應使用OPTIMIZE TABLE。被刪除的記錄被保持在連接清單中,後續的INSERT操做會從新使用舊的記錄位置。您可使用OPTIMIZE TABLE來從新利用未使用的空間,並整理數據文件的碎片。在多數的設置中,您根本不須要運行OPTIMIZE TABLE。即便您對可變長度的行進行了大量的更新,您也不須要常常運行,每週一次或每個月一次便可, OPTIMIZE TABLE只對MyISAM, BDB和InnoDB表起做用。php

 

REPAIR TABLE `table_name` 修復表

myisamchk table.MYI 修復索引mysql

REPAIR TABLE 用於修復被破壞的表。sql

myisamchk TABLE.MYI 用於修復被破壞的索引文件。shell

1.經過SQL修復MyISAM表(建議方法,對MyISAM引擎表有用)數據庫

(1)check table tabTest;
若是出現的結果說Status是OK,則不用修復,若是有Error,能夠用:

(2)repair table tabTest;
進行修復,修復以後能夠在用check table命令來進行檢查。在新版本的phpMyAdmin裏面也可使用check/repair的功能。服務器

若是單純執行REPAIR TABLE沒有起到什麼效果,那麼能夠選擇另外兩個選項:
- REPAIR TABLE EXTENDED,速度比REPAIR TABLE慢得多,可是能夠修復99%的錯誤;
- REPAIR TABLE USE_FRM,它會刪除索引並利用table_name.frm文件中的描述重建索引,並經過table_name.MYD文件填充健對應的值。

工具

2. myisamchk(該工具必須運行在服務終止條件下,對MyISAM引擎表有用)優化

myisamchk能夠直接訪問表文件,而無須啓動MySQL服務器。 
進入datadir文件目錄,執行基本命令:myisamchk --backup --recover t1ui

其中,--backup選項是在嘗試修復表以前先進行數據文件備份,還有其餘使用選項spa

若是修改數據表:

(1)myisamchk tablename.MYI   進行檢測。
(2)myisamchk -of tablename.MYI
網上說的其它方法:
那麼修復test表的方法爲
myisamchk -r -q /var/lib/mysql/db/test.MYI
若是修復所有表,用這個命令
myisamchk -r -q /var/lib/mysql/db/*.MYI

 

 3.運行mysqlcheck命令行工具(該工具能夠在服務運行狀態下執行)

(1)檢查特定的表

注意在shell中執行,不是在mysql的交互環境下

若是應用中提示某個表壞了,使用下面的命令來檢查:mysqlcheck -c newmandela order -uroot -p

(2)檢查一個庫中的全部表:mysqlcheck -c newmandela -uroot -p

(3)若是隻想檢查某幾個庫呢? 可使用 –databases 參數:mysqlcheck -c --databases newmandela radius -uroot -p

(4)使用 mysqlcheck 分析表:mysqlcheck -a radius payment_transactionrecord -uroot -p

(5)使用 mysqlcheck 優化表:mysqlcheck -o radius payment_transactionrecord -uroot -p

(6)使用 mysqlcheck 修復表:mysqlcheck -r radius payment_transactionrecord -uroot -p

(7)檢查,優化,修復表組合命令:mysqlcheck -uroot -p --auto-repair -o newmandela

每張表都出現了 Table does not support optimize, doing recreate + analyze instead, 表明什麼意思呢? 它的意思是表不支持優化,而是從新建立+分析,能夠參考 http://stackoverflow.com/questions/30635603/what-does-table-does-not-support-optimize-doing-recreate-analyze-instead-me 的回答。

 

(8)mysqlcheck 經常使用選項

A, –all-databases 表示全部庫
-a, –analyze 分析表
-o, –optimize 優化表
-r, –repair 修復表錯誤
-c, –check 檢查表是否出錯
–auto-repair 自動修復損壞的表
-B, –databases 選擇多個庫
-1, –all-in-1 Use one query per database with tables listed in a comma separated way
-C, –check-only-changed 檢查表最後一次檢查以後的變更
-g, –check-upgrade Check for version dependent changes in the tables
-F, –fast Check tables that are not closed properly
–fix-db-names Fix DB names
–fix-table-names Fix table names
-f, –force Continue even when there is an error
-e, –extended Perform extended check on a table. This will take a long time to execute.
-m, –medium-check Faster than extended check option, but does most checks
-q, –quick Faster than medium check option

參考文檔:MySQL表損壞修復解決方案

       怎樣使用Mysqlcheck來檢查和修復, 優化表

相關文章
相關標籤/搜索