对 MySQL InnoDB 表的更改 - 涉及哪些文件以及为什么?

发布于 2024-07-29 08:28:44 字数 461 浏览 11 评论 0原文

当更改 InnoDB MySQL 表的内容时,文件系统上的以下文件似乎涉及/更改:

  • /path/to/mysql/data/[database]/[table].ibd(由于到innodb_file_per_table
  • /path/to/mysql/data/data/ib_logfile0
  • /path/to/mysql/data/data/ib_logfile1
  • /path/to/mysql/data/data/ibdata1

对于每个文件:

  1. 文件何时创建?
  2. 文件什么时候会被写入?
  3. 什么时候会读取该文件?
  4. 如果文件损坏或删除会产生什么后果?

When changing the content of an InnoDB MySQL table the following files on the file system appears to be involved/changed:

  • /path/to/mysql/data/[database]/[table].ibd (due to innodb_file_per_table)
  • /path/to/mysql/data/data/ib_logfile0
  • /path/to/mysql/data/data/ib_logfile1
  • /path/to/mysql/data/data/ibdata1

For each of these files:

  1. When is the file created?
  2. When will the file be written to?
  3. When will the file be read from?
  4. What would be the consequence if the file is corrupt or deleted?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦太阳 2024-08-05 08:28:44
/path/to/mysql/data/[database]/[table].ibd (due to innodb_file_per_table)

这是您存储数据的地方。 它们是在您创建表时创建的。

/path/to/mysql/data/data/ib_logfile0
/path/to/mysql/data/data/ib_logfile1

这些是日志文件

所有数据更改都会按顺序写入日志文件,这允许预写日志记录(对于事务至关重要)

/path/to/mysql/data/data/ibdata1

这是存储系统数据和UNDO数据的位置。

如果没有找到ibdataMySQL会认为InnoDB引擎没有初始化,而只是创建新的ibdata。 与日志文件相同。

如果对表发出查询,并且未找到 .ibd 文件,MySQL 将失败并显示以下消息:

尽管存在表的.frm 文件,但无法从InnoDB 的内部数据字典中找到表database/table。 也许您已经删除并重新创建了 InnoDB 数据文件,但忘记删除 InnoDB 表对应的 .frm 文件,或者您
已将 .frm 文件移至另一个数据库?

/path/to/mysql/data/[database]/[table].ibd (due to innodb_file_per_table)

This is where you data are stored. They are created when you create the tables.

/path/to/mysql/data/data/ib_logfile0
/path/to/mysql/data/data/ib_logfile1

These are logfiles.

All data changes are written into the logfiles sequentially, which allows write-ahead logging (crucial for transactions)

/path/to/mysql/data/data/ibdata1

This is where system data and UNDO data are stored.

If ibdata is not found, MySQL will think that InnoDB engine is not initialized and just create the new ibdata. Same with logfiles.

If a query is issued against a table, and .ibd file is not found, MySQL will fail with this message:

Cannot find table database/table from the internal data dictionary of InnoDB though the .frm file for the table exists. Maybe you have deleted and recreated InnoDB data files but have forgotten to delete the corresponding .frm files of InnoDB tables, or you
have moved .frm files to another database?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文