17.20.4 Устранение неполадок с операциями словаря данных InnoDB
Информация о определениях таблиц хранится в InnoDB. Если вы перемещаете файлы данных, данные словаря могут стать несогласованными.
Если повреждение или несогласованность словаря данных препятствуют запуску InnoDB, см. Раздел 17.20.3, «Принудительное восстановление InnoDB» для получения информации о ручном восстановлении.
Ошибка открытия файла данных
При включенном параметре innodb_file_per_table (по умолчанию) при запуске могут появиться следующие сообщения, если отсутствует файл табличного пространства (файл .ibd):
[ERROR] InnoDB: Operating system error number 2 in a file operation.
[ERROR] InnoDB: The error means the system cannot find the path specified.
[ERROR] InnoDB: Cannot open datafile for read-only: './test/t1.ibd' OS error: 71
[Warning] InnoDB: Ignoring tablespace `test/t1` because it could not be opened.
Для устранения этих сообщений выполните оператор DROP
TABLE, чтобы удалить информацию о отсутствующей таблице из словаря данных.
Восстановление файлов ibd с оборванными ссылками типа file-per-table
Данная процедура описывает, как восстановить файлы с оборванными ссылками .ibd в другой экземпляр MySQL. Вы можете использовать эту процедуру, если системное табличное пространство потеряно или не подлежит восстановлению, и вы хотите восстановить резервные копии файлов .ibd в новом экземпляре MySQL.
Процедура не поддерживается для файлов .ibd.
Процедура предполагает, что у вас есть только резервные копии файлов .ibd, вы восстанавливаете в ту же версию MySQL, которая изначально создала файлы с оборванными ссылками .ibd, и что резервные копии файлов .ibd являются чистыми. См. Раздел 17.6.1.4, «Перемещение или копирование таблиц InnoDB» для получения информации о создании чистых резервных копий.
Ограничения импорта таблиц, описанные в Разделе 17.6.1.3, «Импорт таблиц InnoDB», применимы к этой процедуре.
-
В новом экземпляре MySQL пересоздайте таблицу в базе данных с тем же именем.
mysql>
CREATE DATABASE sakila;mysql>USE sakila;mysql>CREATE TABLE actor (->actor_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,->first_name VARCHAR(45) NOT NULL,->last_name VARCHAR(45) NOT NULL,->last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,->PRIMARY KEY (actor_id),->KEY idx_actor_last_name (last_name)->)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -
Удалите табличное пространство вновь созданной таблицы.
mysql>
ALTER TABLE sakila.actor DISCARD TABLESPACE; -
Скопируйте файл с оборванными ссылками
.ibdиз вашей директории резервных копий в новую директорию базы данных.$>
cp /backup_directory/actor.ibdpath/to/mysql-5.7/data/sakila/ Убедитесь, что у файла
.ibdесть необходимые права доступа.-
Импортируйте файл с оборванными ссылками
.ibd. Выводится предупреждение, указывающее, чтоInnoDBпытается импортировать файл без проверки схемы.mysql>
ALTER TABLE sakila.actor IMPORT TABLESPACE; SHOW WARNINGS;Query OK, 0 rows affected, 1 warning (0.15 sec) Warning | 1810 | InnoDB: IO Read error: (2, No such file or directory) Error opening './sakila/actor.cfg', will attempt to import without schema verification -
Выполните запрос к таблице, чтобы убедиться, что файл
.ibdбыл успешно восстановлен.mysql>
SELECT COUNT(*) FROM sakila.actor;+----------+ | count(*) | +----------+ | 200 | +----------+
© 2025 Oracle
Licensed under the GPLv2 License.