首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非常大的MySQL数据库,删除了一列,并且数据库的大小增加了50%。

非常大的MySQL数据库,删除了一列,并且数据库的大小增加了50%。
EN

Stack Overflow用户
提问于 2014-07-03 02:28:19
回答 1查看 406关注 0票数 1

我有一个20 of的MySQL数据库,它在一个表中包含大约3000万行数据。我想删除该表中的一列,以清除一些空间。

我通过phpMyAdmin删除了该列,它花费了大约15分钟,并检查了服务器中的磁盘使用情况。在删除了一个填充了数据的列之后,它使用了从20 to到28 to的数据。

我做错什么了吗?我漏掉了什么明显的东西吗?

当我试图删除这个专栏的时候,我什么也没做。

Update:实际上,当我转到列出phpMyAdmin中的表的数据库摘要页面时,它也会列出它们的大小。表的大小加起来只有10 up。

当我通过df -h检查服务器上使用的大小时,它说/dev/vda使用的是28 is。

服务器上唯一的其他文件是几个小型PHP文件。是什么占据了这个18 gap的空白?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-03 02:43:05

最可能的解释是,您没有使用每个表的文件模式,而包含所有表和索引的ibdata1文件在ALTER中增加了。删除列时,MySQL必须创建表的新副本,将所有数据移到其中(减去已删除的列),然后删除原始表。在此过程接近结束时,需要同时存储两个表副本(减去在一个副本中删除的列)。然后,当它完成时,它会删除原来的副本,这样的空间在将来可以被重用。

不幸的是,有没有办法缩小ibdata1。它的大小仍然相当于它的高水位标志。要恢复磁盘空间,必须:

  1. 转储所有InnoDB表(或将它们临时转换为MyISAM )
  2. 关闭MySQL服务器
  3. 删除ibdata1和ib_logfile*
  4. 在您的innodb_file_per_table=1中设置my.cnf
  5. 重新启动。缺失的ibdata1将按初始默认大小创建。
  6. 导入你的数据。

现在,每个表将占用一个单独的文件。当您修改或优化它们时,它们将恢复空间。默认情况下,在MySQL 5.6中启用此模式。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24544016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档