Изменения в таблице MySQL InnoDB - какие файлы задействованы и почему?
-
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
Для каждого из этих файлов:
- Когда создается файл?
- Когда файл будет записан в?
- Когда файл будет прочитан из?
- Каковы будут последствия, если файл поврежден или удален?
Решение
/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
файлы в другую базу данных?