MySQL 9.0 版本資訊
表格定義的相關資訊儲存在 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
檔案備份,則可以使用此程序。
此程序不支援一般表空間 .ibd
檔案。
此程序假設您只有 .ibd
檔案備份,您正在還原至最初建立孤立 .ibd
檔案的相同 MySQL 版本,而且 .ibd
檔案備份是乾淨的。請參閱 第 17.6.1.4 節,「移動或複製 InnoDB 表格」,以取得建立乾淨備份的相關資訊。
第 17.6.1.3 節,「匯入 InnoDB 表格」中概述的表格匯入限制適用於此程序。
在新 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;
捨棄新建立表格的表空間。
mysql> ALTER TABLE sakila.actor DISCARD TABLESPACE;
將孤立的
.ibd
檔案從您的備份目錄複製到新的資料庫目錄。$> cp /backup_directory/actor.ibd path/to/mysql-5.7/data/sakila/
確保
.ibd
檔案具有必要檔案權限。匯入孤立的
.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
查詢表格以驗證
.ibd
檔案是否已成功還原。mysql> SELECT COUNT(*) FROM sakila.actor; +----------+ | count(*) | +----------+ | 200 | +----------+