Изменения в таблице MySQL InnoDB - какие файлы задействованы и почему?

При изменении содержимого таблицы 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 ответ

Решение
/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 хотя .frm файл для таблицы существует. Может быть, вы удалили и воссоздали InnoDB файлы данных, но забыли удалить соответствующие .frm файлы InnoDB столы, или вы переехали .frm файлы в другую базу данных?

Другие вопросы по тегам