Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 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 文件恢复到另一个 MySQL 实例中。您可能会使用这个过程,如果系统表空间丢失或不可恢复,并且您想在新 MySQL 实例上恢复.ibd文件备份。

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

该过程假设您只有.ibd文件备份,您正在恢复到创建孤儿.ibd文件的同一版本MySQL,并且.ibd文件备份是干净的。请参阅第17.6.1.4节,“Moving or Copying InnoDB 表”了解创建干净备份的信息。

本过程中所述的表导入限制在第17.6.1.3节,“Importing 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 |
    +----------+