因爲操做人員大量的刪除了relationship表的數據達2千萬行,可是mysql並不自動回收空間,因此決定作碎片整理(先測試):
myisamchk -r relationship
在mysql運行下作的,結果作完後查詢的時候出現下面的問題:
ERROR 1030 (00000): Got error 127 from table handler
這個問題很鬱悶,應該不會出現問題的呀,後來查閱資料發現了問題:
若是你用--skip-locking運行mysqld(它在一些系統上是缺省的,如Linux),當
mysqld正在使用同一個表時,你不能可靠地使用myisamchk檢查一張表。若是你能
確定在你運行myisamchk時沒有人經過mysqld正在存取表,在你開始檢查表以前,
你僅需作mysqladmin flush-tables。若是你不能保證, 那麼當你檢查表時,你必
須停掉mysqld。若是你在mysqld正在更新表時運行myisamchk,你可能獲得一個表
已破壞的警告,即便它沒有。
若是你沒使用--skip-locking,你能在任什麼時候間使用myisamchk檢查表。當你這樣
時,全部試圖更新表的客戶在繼續前將等到myisamchk就緒。
若是你使用myisamchk修復或優化表,你必須老是保證mysqld服務器不在使用表(如
果你正在使用--skip-locking,這也適用)。若是你不停掉mysqld,在你運行
myisamchk前,你至少應該作一個mysqladmin flush-tables。
而個人數據庫剛好在linux下,而且是skip-locking啓動的,就出現了這個問題!
1)這個命令也能夠中止mysql後再作,就不會出現這個問題
2)也能夠在線作後重啓數據庫
3)也能夠先運行mysqladmin flush-tables後再執行這個命令,也不會出現這個問題!