Изменения в таблице 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 ответ
/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
файлы в другую базу данных?