MySQL的Bug之一:InnoDB ibdata1 never shrinks after data is removed
問題描述
當(dāng)innodb引擎使用單個(gè)文件進(jìn)行存儲(chǔ)的時(shí)候,當(dāng)對(duì)數(shù)據(jù)庫中數(shù)據(jù)進(jìn)行刪除的時(shí)候,文件的大小并不會(huì)發(fā)生變化,意味著文件將會(huì)越來越大并且即使刪除也沒辦法 讓其釋放磁盤的空間。
驗(yàn)證過程
創(chuàng)建一個(gè)測(cè)試使用的表,如下創(chuàng)建好t這樣的一個(gè)表。

創(chuàng)建簡(jiǎn)單的存儲(chǔ)過程來批量的插入數(shù)據(jù)。

查看開始前的文件的大小

當(dāng)批量插入接近十萬的數(shù)據(jù)后

然后進(jìn)行刪除操作

占用磁盤空間并未減少
解決方案
兩種方式:
1. 先備份后刪除然后進(jìn)行導(dǎo)入
mysqldump -uxxx -pxxx --all-databases > db.sql
service mysql stop
rm ibdata
rm ×log文件
service mysql start
mysql -uxxx -pxxx db.sql
2. 把表設(shè)置為單表存儲(chǔ)的形式,這樣每個(gè)表中的數(shù)據(jù)單獨(dú)存儲(chǔ),在刪除數(shù)據(jù)的時(shí)候,會(huì)隨著數(shù)據(jù)的刪除而釋放存儲(chǔ)空間。
set global innodb_file_per_table = on
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。
您可能感興趣的文章:- mysql 精簡(jiǎn)過程(刪除一些文件)
- linux下mysql自動(dòng)備份數(shù)據(jù)庫與自動(dòng)刪除臨時(shí)文件
- mysql備份腳本以及刪除前5天的備份文件
- php上傳文件并存儲(chǔ)到mysql數(shù)據(jù)庫的方法
- MySQL 刪除數(shù)據(jù)庫中重復(fù)數(shù)據(jù)方法小結(jié)
- MYSQL刪除表中的指定ID數(shù)據(jù)
- MySQL數(shù)據(jù)庫中刪除重復(fù)記錄的方法總結(jié)[推薦]
- Mysql InnoDB刪除數(shù)據(jù)后釋放磁盤空間的方法