2011-05-12 267 views
20

我創建了一些非常大的數據庫,之後又刪除了一些。我注意到我的磁盤空間沒有像我預期的那樣恢復。例如,我添加的最後一個數據庫實際上用完了所有的空閒空間並中止,因此我放棄了該模式。在此之前,我有12.4 GB的空閒空間,現在我只有7.52 GB的空閒空間。
這是怎麼回事?我如何獲得我的〜5 GB?在mysql中刪除數據庫之後回收磁盤空間

+1

InnoDB或MyISAM表? – bot403 2011-05-12 20:14:21

+1

http://crazytoon.com/2007/04/03/mysql-ibdata-files-do-not-shrink-on-database-deletion-innodb/ – Brad 2011-05-12 20:16:00

+0

它使用InnoDB – VenerableAgents 2011-05-12 20:58:47

回答

22

http://dev.mysql.com/doc/refman/5.1/en/innodb-data-log-reconfiguration.html

目前,你不能刪除從表空間的數據文件。爲了減少您的表空間的大小,使用此過程:

  1. 使用mysqldump轉儲所有InnoDB表。

  2. 停止服務器。

  3. 刪除所有現有的表空間文件,包括ibdata和ib_log文件。如果您想保留信息的備份副本,則在刪除MySQL安裝中的文件之前,將所有ib *文件複製到另一個位置。

  4. 移除InnoDB表的任何.frm文件。

  5. 配置一個新的表空間。

  6. 重新啓動服務器。

  7. 導入轉儲文件。

Innodb的創建數據內的文件系統( 「表」)文件本身。當數據被移除時,它不會「縮小」數據文件,因爲文件內的數據重組可能代價高昂(不能保證數據被移除到最後,甚至是連續的)。通過如上所述重新創建數據庫,它使所有數據的文件儘可能大,但不會更大。

+5

一個更有幫助的版本的相同的答案:http://stackoverflow.com/questions/3456159/how-to-shrink-purge-ibdata1-file-in-mysql/3456885#3456885 – Tgr 2012-12-06 17:31:21

+0

以下是提供的答案的正確鏈接:http://dev.mysql.com/doc/refman/5.1 /en/innodb-resize-system-tablespace.html – Travis 2015-10-13 19:01:50