2017-08-23 61 views
1

最近我已經從一臺服務器複製MySQL DB到另一臺服務器。意思是雖然我已經清除了Master DB的許多行數。所以在一段時間後複製正確完成。我驗證了兩個數據庫中的數據計數,它是一樣的。MySQL tableName.Ibd文件大小很大

之後,我只使用下面的查詢來驗證從站中的DB大小。

SELECT table_schema "Schema_Name", Round(Sum(data_length + index_length)/1024/1024, 1) "DB Size in MB" FROM information_schema.tables GROUP BY table_schema; 

通過此查詢,我得到了數據庫的大小。它是60 GB。


我的問題

我有一個名爲tableName.ibd內 「ProgramData->數據 - >數據庫名」 文件夾中的文件。該文件佔用500GB的內存。

所以我的問題是,爲什麼這個文件佔用這麼多的大小,雖然我的數據庫大小本身只有60GB。

此外我還驗證了程序數據中的Ibdata文件大小。它只有1GB。

請幫我解決這個問題。如何清除這個文件。什麼會對清除這個影響。

回答

2

當數據被刪除時,文件被分割。如果你刪除了表中的大部分記錄,那麼大部分記錄都是空的是正常的。

「整理」它的最簡單方法是運行ALTER TABLE tablename FORCE。這是一個無操作改變和重建表。

60GB的桌子需要一段時間才能重建,所以在運行時要小心。

+0

感謝您的回答。我不在這一行下「如果你刪除了表中的大部分記錄,那麼大部分記錄都是空的是正常的。」 –

+0

還有一個問題 - 我沒有在主數據庫中看到這個tablename.ibd文件。我只看到奴隸的一個。 –

+0

有兩個原因:1. innodb_file_per_table關閉 - 表共享數據文件; 2.該表不是InnoDB - 在這種情況下,文件名將會不同; – Vatev