Поиск и устранение неполадок InnoDB Data Dictionary
Не удается открыть файл
Если InnoDB возвращает ошибку подобную следующей:
ERROR 1016: Can't open file: 'x.ibd'. (errno: 1)
возможно, существует файл-«сирота» .frm. В журнале ошибок (журнал ошибок) также может отображаться следующее:
InnoDB: Cannot find table test/x from the internal data dictionary InnoDB: of InnoDB though the .frm file for the table exists. Maybe you InnoDB: have deleted and recreated InnoDB data files but have forgotten InnoDB: to delete the corresponding .frm files of InnoDB tables?
В этом случае, как указано в сообщении, удалите файл-«сироту» .frm на файловой системе.
Удаление промежуточных таблиц-«сирот»
Промежуточная таблица-«сирота» может помешать вам удалить табличное пространство, даже если оно пусто, и обычно занимает лишнее место.
Она может появиться, если MariaDB завершается в середине операции ALTER TABLE ... ALGORITHM=INPLACE. Такие таблицы перечислены в таблице INFORMATION_SCHEMA.INNODB_SYS_TABLES и всегда начинаются с префикса #sql-ib. Сопутствующий файл .frm также начинается с #sql-, но имеет другое имя.
Чтобы идентифицировать таблицы-«сироты», выполните:
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME LIKE '%#sql%';
Когда innodb_file_per_table установлено, файл #sql-*.ibd также будет виден в каталоге базы данных.
Чтобы удалить промежуточную таблицу-«сироту»:
- Переименуйте файл
#sql-*.frm(в каталоге базы данных), чтобы он соответствовал имени базовой таблицы-«сироты», например:
mv #sql-36ab_2.frm #sql-ib87-856498050.frm
- Удалите таблицу, например:
DROP TABLE `#mysql50##sql-ib87-856498050`;
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/innodb-data-dictionary-troubleshooting/