Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Troubleshooting InnoDB Data Dictionary Operations

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 文件

该过程描述如何将孤立的每表 每表文件 .ibd 文件恢复到另一个 MySQL 实例中。您可能使用该过程,如果系统表空间丢失或不可恢复,并且您想在新 MySQL 实例中恢复 .ibd 文件备份。

该过程不支持 通用表空间 .ibd 文件。

该过程假设您只有 .ibd 文件备份,您正在恢复到最初创建孤立 .ibd 文件的同一版本的 MySQL 中,并且 .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 |
    +----------+