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

StackOverflow https://stackoverflow.com/questions/1201184

  •  05-07-2019
  •  | 
  •  

Вопрос

При изменении содержимого таблицы 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. Каковы будут последствия, если файл поврежден или удален?
Это было полезно?

Решение

/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 файлы в другую базу данных?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top