MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  ...  /  InnoDB データディクショナリの操作のトラブルシューティング

15.21.3 InnoDB データディクショナリの操作のトラブルシューティング

テーブル定義に関する情報は、InnoDB data dictionary に格納されます。 データファイルを移動すると、ディクショナリデータに一貫性がなくなる可能性があります。

データディクショナリの破損や一貫性の問題によって InnoDB を起動できない場合は、手動のリカバリに関する情報について、セクション15.21.2「InnoDB のリカバリの強制的な実行」を参照してください。

データファイルを開けません

innodb_file_per_table が有効な場合 (デフォルト)、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 インスタンスにリストアする方法について説明します。 システムテーブルスペースが消失またはリカバリ不能で、新しい MySQL インスタンスで .ibd ファイルのバックアップをリストアする場合は、このプロシージャを使用できます。

プロシージャは、general tablespace .ibd ファイルではサポートされていません。

この手順では、.ibd ファイルのバックアップのみがあり、孤立した .ibd ファイルを最初に作成したのと同じバージョンの MySQL にリカバリしており、.ibd ファイルのバックアップがクリーンであることを前提としています。 クリーンバックアップの作成の詳細は、セクション15.6.1.4「InnoDB テーブルの移動またはコピー」 を参照してください。

この手順には、セクション15.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=utf8;
  2. 新しく作成したテーブルのテーブルスペースを破棄します。

    mysql> ALTER TABLE sakila.actor DISCARD TABLESPACE;
  3. 孤立した .ibd ファイルをバックアップディレクトリから新しいデータベースディレクトリにコピーします。

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

関連キーワード:  InnoDB, テーブル, 構成, スペース, 圧縮, ロック, インデックス, INFORMATION, SCHEMA, 情報