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

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的数据。为什么不一致?

最佳答案

创建表时,它位于表空间中—一个预先分配的(基本上是固定的起始大小)文件或一组文件。删除表中的数据对表空间的作用很小,它的大小保持不变。如果该表将在未来使用,摆脱现有的“空”表空间文件可能不是一个好主意。截断表将删除表中的所有行。
我没有试图缩小表空间,但是请看一下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

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

关于mysql - 截断mysql表数据8gb并不意味着释放8gb的磁盘空间?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27944954/

10-13 08:39
查看更多