截断8gb的mysql表数据并不意味着释放8GB的磁盘空间?

时间:2015-01-14 14:11:51

标签: mysql bash

我运行以下查询来获取数据库大小:

SELECT table_schema                                        "DB Name", 
   Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB" 
FROM   information_schema.tables 
GROUP  BY table_schema; 

我注意到一个数据库占用了8GB。所以我进入该数据库并开始截断一些表。当我重新运行上面的查询时,它说我正在清理的一个数据库下降到200MB。

然后我进入bash并做了df -h,但我注意到我的磁盘使用率从95GB下降到93GB。因为MySQL命令似乎表明我已经摆脱了8GB的数据,所以我期待它降至87G。为什么会出现这种差异?

1 个答案:

答案 0 :(得分:0)

创建表时,它存在于表空间 - 预分配(基本上是固定的起始大小)文件或文件集中。删除表中的数据对表空间的影响很小,它保持相同的大小。如果该表将在未来使用,摆脱现有的"空"表空间文件可能不是一个好主意。截断表会删除表中的所有行。

我没有尝试缩小表空间,但看看这个alter tablespace帮助: http://dev.mysql.com/doc/refman/5.1/en/alter-tablespace.html

语法是:

ALTER TABLESPACE tablespace_name
    {ADD|DROP} DATAFILE 'file_name'
    [INITIAL_SIZE [=] size]
    [WAIT]
    ENGINE [=] engine_name

我猜你想要DROP一个数据文件。