天天看點

mysql truncate 釋放空間_mysql truncate table未釋放表空間磁盤空間

truncate table tablename;

該指令可以清空一個表裡的所有資料,并歸1自增ID的值。

但myisam的表和innodb的表在使用上有一定的差別。

myisam表會清空所有資料,并釋放表空間,即硬碟空間會得到釋放。

innodb表也會清空所有資料,但不釋放表空間。

Innodb資料庫對于已經删除的資料隻是标記為删除,并不真正釋放所占用的磁盤空間,這就導緻InnoDB資料庫檔案不斷增長。如果想徹底釋放這些已經删除的資料,需要把資料庫導出,删除InnoDB資料庫檔案,然後再倒入。 下面是基本的步驟:  1 使用mysqldump指令将InnoDB資料庫導出  2 停止MySQL  3 删除所有InnoDB資料庫檔案和日志  4 啟動MySQL并自動重建InnoDB資料庫檔案和日志檔案  5 導入前面備份的資料庫檔案

具體指令:

# 備份資料庫:

mysqldump -uroot -proot --quick --force --all-databases > mysqldump.sql

# 停止資料庫

service mysqld stop

# 删除這些大檔案

rm /usr/local/mysql/var/ibdata1

rm /usr/local/mysql/var/ib_logfile*

# 手動删除除Mysql之外所有資料庫檔案夾,然後啟動資料庫

service mysqld start

# 還原資料

mysql -uroot -proot < mysqldump.sql

還有一種方式是在建立資料庫的時候設定innodb_file_per_table,這樣InnoDB會對每個表建立一個資料檔案,然後隻需要運作OPTIMIZE TABLE 指令就可以釋放所有已經删除的磁盤空間。

編輯my.ini或my.cnf 在innodb段中加入 innodb_file_per_table=1 # 1為啟用,0為禁用

通過mysql語句可以檢視該變量的值:mysql> show variables like '%per_table%';