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

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

查看開(kāi)始前的文件的大小

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

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

占用磁盤(pá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í)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。
- MySQL刪除數(shù)據(jù)庫(kù)的方法舉例
- MySql中刪除數(shù)據(jù)表的方法詳解
- mysql如何刪除數(shù)據(jù)表和關(guān)聯(lián)的數(shù)據(jù)表刪除詳情
- Mysql如何刪除數(shù)據(jù)庫(kù)表中的某一列
- 淺談為什么MySQL不建議delete刪除數(shù)據(jù)
- Mysql刪除數(shù)據(jù)以及數(shù)據(jù)表的方法實(shí)例
- MySQL刪除數(shù)據(jù),表文件大小依然沒(méi)變的原因
- MySQL實(shí)現(xiàn)快速刪除所有表而不刪除數(shù)據(jù)庫(kù)的方法
- MySQL刪除數(shù)據(jù)庫(kù)的兩種方法
- mysql中刪除數(shù)據(jù)的四種方法小結(jié)
相關(guān)文章
MySQL讀寫(xiě)分離的項(xiàng)目時(shí)間實(shí)踐
本文主要介紹了MySQL數(shù)據(jù)庫(kù)的讀寫(xiě)分離技術(shù),包括一主一從和雙主雙從兩種架構(gòu),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-03-03
MySQL創(chuàng)建表時(shí)字符串的默認(rèn)值問(wèn)題
這篇文章主要介紹了MySQL創(chuàng)建表時(shí)字符串的默認(rèn)值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
Windows 10系統(tǒng)下徹底刪除卸載MySQL的方法教程
mysql數(shù)據(jù)庫(kù)的重新安裝是一個(gè)麻煩的問(wèn)題,很難卸除干凈,下面這篇文章主要給大家介紹了關(guān)于在Windows 10系統(tǒng)下徹底刪除卸載MySQL的方法教程,對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-07-07

