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

truncating 8gb of mysql table data does not mean freeing up 8gb of diskspace?

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

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。我原以为它会下降到 87G,因为 MySQL 命令似乎表明我摆脱了 8GB 的​​数据。为什么会出现差异?

创建 table 后,它位于 table 空间 - 一个预先分配的(基本上是固定的起始大小)文件或文件集。删除 table 中的数据对 table 空间的影响很小,它保持相同的大小。如果将来要使用 table,删除现有的 "empty" table 空间文件可能不是一个好主意。截断 table 会删除 table.

中的所有行

我没有尝试缩小 table 空间,但请查看此更改 table 空间帮助: 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

我猜你想删除一个数据文件。