關於mysql中truncate


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM