Spec-Zone.ru › MySQL 9.2

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», применимы к этой процедуре.

  1. В новом экземпляре 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;
    
  2. Удалите табличное пространство вновь созданной таблицы.

    mysql> ALTER TABLE sakila.actor DISCARD TABLESPACE;
    
  3. Скопируйте файл с оборванными ссылками .ibd из вашей директории резервных копий в новую директорию базы данных.

    $> cp /backup_directory/actor.ibd path/to/mysql-5.7/data/sakila/
    
  4. Убедитесь, что у файла .ibd есть необходимые права доступа.

  5. Импортируйте файл с оборванными ссылками .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
    
  6. Выполните запрос к таблице, чтобы убедиться, что файл .ibd был успешно восстановлен.

    mysql> SELECT COUNT(*) FROM sakila.actor;
    +----------+
    | count(*) |
    +----------+
    |      200 |
    +----------+
    

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/innodb-troubleshooting-datadict.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API