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