1

更改 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. 如果文件损坏或删除会有什么后果?
4

1 回答 1

4
/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

这些是logfiles

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

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

这是UNDO存储系统数据和数据的地方。

如果ibdata没有找到,MySQL会认为InnoDB引擎没有初始化,只是创建新的ibdata. 与 相同logfiles

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

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

于 2009-07-29T17:27:12.637 回答