文档首页
MySQL 9.0 参考手册
相关文档 下载此手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  故障排除 InnoDB 数据字典操作

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 |
    +----------+