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.