分析項目問題時,發現統計表中數據量近 2000 萬行,然後使用 truncate 進行清除,清除後,發現表信息顯示的還是之前的近 2000 萬行,但是 id 確實是從 1 開始。
而且一查看錶空間,還是之前的沒變。
從而嘗試 delete 刪除表操作,然後再次創建表,發現還是一樣,有點奇怪!
網上一搜索才瞭解到 innodb 還有這種坑...
參考文章:
Mysql InnoDB刪除數據後釋放磁盤空間的方法
https://www.easck.com/cos/2019/0105/252584.shtml
mysql truncate table 磁盤空間未釋放解決方法
https://blog.csdn.net/weixin_42837024/article/details/101378250
要想釋放表空間,分2種情況:
1.創建數據庫的時候,設置了 innodb_file_per_table = 1
truncate table 表名
optimize 表名
會提示:
Table does not support optimize, doing recreate + analyze instead
但實際上,以及刪除成功了
2.創建數據庫未設置 innodb_file_per_table = 1(未嘗試!!!)
1>使用mysqldump命令將InnoDB數據庫導出
mysqldump -uroot -proot --quick --force --all-databases > mysqldump.sql
2>停止MySQL
service mysqld stop
3>刪除所有InnoDB數據庫文件和日誌
rm /usr/local/mysql/var/ibdata1
rm /usr/local/mysql/var/ib_logfile*
4>啓動MySQL並自動重建InnoDB數據庫文件和日誌文件
service mysqld start
5>導入前面備份的數據庫文件
mysql -uroot -proot < mysqldump.sql
項目用的 阿里雲數據庫,查看了下該配置項,正好設置的是:
innodb_file_per_table = 1
所以直接按第一步操作即可。