程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 如何回收mysql表的碎片

如何回收mysql表的碎片

編輯:關於MYSQL數據庫

      由於操作人員大量的刪除了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後再執行這個命令,也不會出現這個問題!

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved