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%';