mysql innodb 引擎 truncate 或 delete 表後,並未釋放表空間

分析項目問題時,發現統計表中數據量近 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

所以直接按第一步操作即可。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章