我运行以下查询以获取数据库大小:
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/