1. 程式人生 > >MySQL 8.0 恢復孤立文件每表ibd文件

MySQL 8.0 恢復孤立文件每表ibd文件

文件 without signed varchar tps file int 導入 概述

此過程描述如何將每個文件的 orphan 文件還原 .ibd到另一個MySQL實例。如果系統表空間丟失或不可恢復,並且您希望.idb 在新的MySQL實例上恢復文件備份,則可以使用此過程。

一般表空間 .ibd文件 不支持該過程 。

該過程假定您只有 .ibd文件備份,您正在恢復到最初創建孤立.idb文件的相同版本的MySQL ,並且該 .idb文件備份是幹凈的。有關創建幹凈備份的信息,請參見 第15.8.1.3節“移動或復制InnoDB表”。

第15.7.6節“將每個表的表空間復制到另一個實例”中 概述的表空間復制限制 適用於此過程。

在新的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;

丟棄新創建的表的表空間。

mysql> ALTER TABLE sakila.actor DISCARD TABLESPACE;

將.idb備份目錄中的孤立文件復制到新數據庫目錄。

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

參考文檔:InnoDB數據字典操作故障排除

MySQL 8.0 恢復孤立文件每表ibd文件