搜尋

首頁  >  問答  >  主體

mysql收缩空间的问题

今天转移数据库(从一个数据库到另一个数据库),转移了一部分之后发现硬盘快满了,于是就把就旧的数据库里已经转移完成的表删除了。
我是先TRUNCATE table_name,发现空间没有释放,又DROP TABLE table_name,发现空间还是没有释放。

我去网上搜了一下,发现收缩空间的命令都是针对表的,比如OPTIMIZE TABLE table_name。
我想请问一下,还有别的办法收缩空间吗?

大家讲道理大家讲道理2786 天前655

全部回覆(3)我來回復

  • 阿神

    阿神2017-04-17 14:53:54

    InnoDB引擎的特性就是這樣的。
    佔用空間的文件有bin-log文件(二進位日誌)和ibdata1(資料文件,表空間就是在這裡的)
    還有一些其他日誌(ib_logfile0)redo-log和undo-log。

    你執行TRUNCATE掉了數據,不會對上面這些檔案大小產生影響(減少),反而會增大,要記錄你這個TRUNCATE操作。資料既使被刪除了,ibdata1空間裡也不會被刪除的,因為要刪除裡面的數據,要移動大量磁碟空間。 innodb只是標誌那些資料頁是可以再次使用的,並沒有刪除這塊空間。通常mysql一啟動,會會佔用幾個G的ibdata1 ibdata2。先分配一塊大的磁碟,再慢慢使用,資料在物理上連續(效率高)。避免一直分配磁碟空間,產生很多碎片。

    除非你把整個data資料目錄目錄清除(相當於重裝mysql),再重新匯入資料。

    磁碟很便宜,掛幾塊大磁碟就行了。磁碟都沒有,玩什麼資料庫。

    回覆
    0
  • 怪我咯

    怪我咯2017-04-17 14:53:54

    不了解。但是如果買塊硬碟就能解決問題其實根本沒必要去想其它方案了,投入的綜合成本更高,而且發生了這種情況本身就說明你們確實要考慮磁碟空間問題了,比如磁碟陣列,資料表拆分,是否需要redis/memcached來幫助資料庫減壓等,這是更重要的事情。

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 14:53:54

    推薦一下,之前我也遇到過,後來處理了,寫過博客http://astarblog.cn/index.php/2016/04/27/339.html (這算廣告嗎?)

    回覆
    0
  • 取消回覆