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

时间:2009-07-29 15:39:38

标签: mysql innodb disaster-recovery

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

1 个答案:

答案 0 :(得分: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数据的地方。

如果找不到ibdataMySQL会认为InnoDB引擎未初始化,只需创建新的ibdata。与logfiles相同。

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

  

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