此过程描述如何将每个文件的 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数据字典操作故障排除
原文地址:http://blog.51cto.com/linux10000/2177277
时间: 2024-10-10 21:10:09