文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手冊頁 (TGZ) - 258.5Kb
手冊頁 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  疑難排解 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 |
    +----------+