Spec-Zone.ru › MySQL 8.4

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-8.4-en/innodb-troubleshooting-datadict.html

Spec-Zone.ru

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