2012-12-19 86 views
6

我看着ibdata文件,它是128 GB。我拿出每張桌子的大小,一張桌子上有5百萬的記錄,它顯示了90 GB。如何清除ibdata1文件以及它如何影響性能?

我截斷了該表,因爲它不是必需的,我查看了ibdata1的大小。它仍然顯示128 GB。然後我拿出每張桌子的大小,然後總和只有35-38 GB。

如何獲取我的Db服務器上的90 GB空間。我在紅帽Linux服務器上使用mysql和php。

我想 - 如果我們刪除任何數據庫,它只是刪除複製,但分配給它的空間不會被釋放,直到我們手動完成。是這樣嗎。

+1

可複製的http://stackoverflow.com/questions/3456159/how-to-shrink-purge-ibdata1-file-in-mysql。總之一句話:你不能。轉儲所有數據庫,停止服務器,刪除ibdata文件,重新啓動,重新導入轉儲。 – RandomSeed

+1

下一次使用['innodb_file_per_table'](http://dev.mysql.com/doc/refman/5.5/en/innodb-multiple-tablespaces.html)選項。放下大桌子將允許你回收空間。 – gertvdijk

+0

強烈建議訪問提供的@YaK鏈接。肯定是重複的,他/她鏈接的文章有逐步的說明。 – Tass

回答

5

一旦空間被ibdata文件佔用,它永遠不會消失。 'shink'數據文件的唯一方法是轉儲您的dbs,全部刪除它們,刪除ibdata文件,重新啓動mysql並重新加載轉儲。

如果您經常刪除整個表格,則可以將innodb配置爲每個表格使用一個數據文件。在這種情況下,當您刪除表時,可以刪除該表特定的ibdata文件。

+0

如果我刪除我所有的表並刪除數據庫並刪除ibdatafile,它是否會自動創建,如果我重新加載轉儲 –

+0

@NaanuManu是的,只要確保您有一個完整的轉儲。所有innodb數據將在您刪除時丟失。 – Ray

相關問題