Innodb資料庫對於已經刪除的資料只是標記為刪除,並不真正釋放所佔用的磁碟空間,這就導致InnoDB資料庫檔案不斷增長。如果在建立資料庫的時候設定innodb_file_per_table=1,這樣InnoDB會對每個表建立一個數據檔案,然後只需要執行OPTIMIZE TABLE 命令就可以釋放所有已經刪除的磁碟空間。執行OPTIMIZE TABLE 表名後,雖然最後會報Table does not support optimize, doing recreate + analyze instead,但其實已經成功了:)-------------------------------------------------------------如果沒有設定這個引數,又想釋放空間,徹底釋放這些已經刪除的資料,需要把資料庫匯出,刪除InnoDB資料庫檔案,然後再倒入。下面是基本的步驟:1 使用mysqldump命令將InnoDB資料庫匯出2 停止MySQL3 刪除所有InnoDB資料庫檔案和日誌4 啟動MySQL並自動重建InnoDB資料庫檔案和日誌檔案5 匯入前面備份的資料庫檔案# 備份資料庫:mysqldump -uroot -proot --quick --force --all-databases > mysqldump.sql# 停止資料庫service mysqld stop# 刪除這些大檔案rm /usr/local/mysql/var/ibdata1rm /usr/local/mysql/var/ib_logfile*# 手動刪除除Mysql之外所有資料庫資料夾,然後啟動資料庫service mysqld start# 還原資料mysql -uroot -proot < mysqldump.sql
Innodb資料庫對於已經刪除的資料只是標記為刪除,並不真正釋放所佔用的磁碟空間,這就導致InnoDB資料庫檔案不斷增長。如果在建立資料庫的時候設定innodb_file_per_table=1,這樣InnoDB會對每個表建立一個數據檔案,然後只需要執行OPTIMIZE TABLE 命令就可以釋放所有已經刪除的磁碟空間。執行OPTIMIZE TABLE 表名後,雖然最後會報Table does not support optimize, doing recreate + analyze instead,但其實已經成功了:)-------------------------------------------------------------如果沒有設定這個引數,又想釋放空間,徹底釋放這些已經刪除的資料,需要把資料庫匯出,刪除InnoDB資料庫檔案,然後再倒入。下面是基本的步驟:1 使用mysqldump命令將InnoDB資料庫匯出2 停止MySQL3 刪除所有InnoDB資料庫檔案和日誌4 啟動MySQL並自動重建InnoDB資料庫檔案和日誌檔案5 匯入前面備份的資料庫檔案# 備份資料庫:mysqldump -uroot -proot --quick --force --all-databases > mysqldump.sql# 停止資料庫service mysqld stop# 刪除這些大檔案rm /usr/local/mysql/var/ibdata1rm /usr/local/mysql/var/ib_logfile*# 手動刪除除Mysql之外所有資料庫資料夾,然後啟動資料庫service mysqld start# 還原資料mysql -uroot -proot < mysqldump.sql