【问题标题】:ibdata1 file size not increasing while mysql import is in process?mysql导入过程中ibdata1文件大小没有增加?
【发布时间】:2012-10-19 21:48:28
【问题描述】:

我正在尝试从本地 mysql 5.5 服务器上的英文 wiki 转储中导入 categorylinks sql 文件(大小接近 8 GB)。我是通过命令行完成的。导入过程自上周以来一直在进行,我可以通过检查 max(cl_from) 或使用显示当前插入查询的“show processlist”来肯定地验证数据是否已插入到 categorylinks 表中。

我唯一的困惑是 mysqlserver\data 文件夹中的 ibdata1 文件大小根本没有增加。我在某处读到 ibdata1 是包含 innodb 实际数据的文件。那么在执行插入查询以将数据插入到 categorylinks 表中时,ibdata1 文件大小不应该增加吗?

【问题讨论】:

  • 这真的取决于。 ibdata1 文件是 InnoDB 数据库的默认文件。但是,空间是预先分配的,文件只会根据需要增长。如果您的初始文件大小为50MB,而您只有20MB 的数据,那么该文件将位于50MB
  • 另外,你可以告诉 InnoDB 使用带有 innodb_file_path 变量的完全不同的文件。您还可以使用innodb_file_per_table 告诉它为每个表提供自己的文件。

标签: mysql wiki


【解决方案1】:

您的 my.cnf 很可能启用了 innodb_file_per_table

禁用 innodb_file_per_table 后,进入 ibdata1:

启用 innodb_file_per_table 后,每个 InnoDB 表及其索引都存储在其各自 DB 文件夹下的 .ibd 文件中。比如mydb.mytable对于datadir/var/lib/mysql的存储如下:

  • /var/lib/mysql/mydb/mytable.frm
  • /var/lib/mysql/mydb/mytable.ibd

【讨论】:

  • 这话有点真实。但是,我相信即使禁用了innodb_file_per_table,该文件也可能不会增长。如果数据库中的数据量小于表空间的初始大小,就会出现这种情况。有关“自动扩展”文件,请参阅 dev.mysql.com/doc/refman/5.0/en/innodb-configuration.html
  • 由于元数据、双写缓冲区、插入缓冲区和 MVCC,它仍可能增长。它只会增长得更慢。如果重新加载 mysqldump,则每个扩展 INSERT 的行块可能足够小,可以在没有额外增长的情况下进行处理。如果数据足够广泛,那么增长确实会到来。
  • 我不完全确定我理解你的意思。 MySQL 文档暗示该文件仅根据需要以恒定的量增长。它并不是说某些组件不计入此限制。我没有对数据库服务器的这一方面给予足够的关注,无法确切地知道它是如何工作的。如果您只是暗示data 始终与metadataadministrative information 共存,那么我同意这一点。
  • 我正在添加更多细节。我没有启用 innodb_file_per_table 并且我没有看到每个表的任何单独的 ibd 文件。为 ibddata1 文件修改的日期每分钟更改一次,但大小甚至不会增加一位(几乎是 53GB)。我从现在开始监测 4-5 天。也许,原始数据已经首先复制到该文件中,现在唯一要做的是索引管理或答案中上面提到的点,在最坏的情况下可能只需要重新洗牌? (我对此完全陌生,所以请多多包涵)。
猜你喜欢
  • 2012-04-16
  • 2017-04-28
  • 1970-01-01
  • 2014-02-25
  • 1970-01-01
  • 1970-01-01
  • 2012-09-15
  • 1970-01-01
  • 2017-02-16
相关资源
最近更新 更多