ibdata文件有多大?

我的ibdata文件非常大,至less在我看来非常大。 这是过度还是不好?

-rw-rw---- 1 mysql mysql 15G Apr 18 10:11 ibdata1 

当这可能是一个问题

如果您在show table status上运行show table status ,并且Data_free字段占ibdata1文件大小的绝大部分,则可能会浪费大量空间。 大量的插入/删除会导致这个问题。 如果是这种情况,并且短暂的插入和删除操作占据了大部分数据,那么每个表格都有一个很好的文件格式。

这不是一个自动的“是”,但。 世界上有很多关于InnoDB文件内部碎片的讨论,但是把它们作为file-per-table放入文件系统只是将碎片移动到文件系统级而不是数据库级。

为什么这通常不是一个问题

把你的InnoDB文件想象成文件系统而不是文件。 如果你有很多文件,你需要一个大的文件系统。

大多数情况下,文件系统在处理太字节的数据和无数的文件方面做得非常好。 有时他们会遇到索引较差的问题(例如,在性能影响之前,对目录中文件数量的限制),但是现代文件系统的大部分可以很好地进入太字节范围。

InnoDB的function相同。 你的数据文件的大小可能是巨大的…和大型文件系统一样,这可能会导致备份数据时出现问题。 然而,就像把你的文件系统分割成多个分区不能解决这个问题一样,试图操纵innodb也是一样。 虽然你可以使用innodb_file_per_table ,但我很less推荐它。

就像你的文件系统一样,更好的答案是知道内部的限制,并在内部工作。 理解索引并适当地应用它们。 不要试图分裂InnoDB,这并不意味着这一点。

由于我正在努力地build设性地传达这个概念,所以下面这个快速阅读这个词比我更好: 太字节不是大数据,PB是 。

我记得一个非常古老的MySQL营销幻灯片,客户正在运行数TB的数据仓库。 多年前。 InnoDB或MyISAM,都可以工作。 这是标准的MySQL的东西。

不要冒汗15GB的数据库。

ibdata文件不会缩小 – 如果您最近删除了一些表或删除了很多行 – 您的configuration中的innodb将不会释放可用空间回到文件系统。 我build议你:

  • 备份所有的数据,例如mysqldump
  • 添加到my.cnf innodb_file_per_table指令
  • 重启mysql
  • 使用innodb引擎删除所有数据库
  • 停止mysql
  • 删除ibdata文件
  • rm ib_logfile [01]
  • 启动mysql,检查系统日志如果一切正常
  • 重新加载你的转储

通过这种方式,只要你删除innodb表/数据库,你将能够回收空间,关联的idb文件将被立即删除。