mysql官方文档
如果您有文件的“ 干净 ”备份 .ibd,则可以将其还原到其原始来源的MySQL安装中,如下所示:
- 自复制.ibd文件以来,该表一定不能删除或截断,因为这样做会更改存储在表空间中的表ID。
- 发出以下ALTER TABLE语句以删除当前.ibd文件:
ALTER TABLE tbl_name DISCARD TABLESPACE;
- 将备份.ibd文件复制到正确的数据库目录。
- 发出以下ALTER TABLE语句,告诉InnoDB您将新 .ibd文件用于表:
ALTER TABLE tbl_name IMPORT TABLESPACE;
注意
该ALTER TABLE … IMPORT TABLESPACE功能不对导入的数据施加外键约束。
在这种情况下,“ 干净的 ” .ibd 文件备份是可以满足以下要求的文件备份:
- .ibd文件 中没有事务未提交的修改 。
- .ibd文件 中没有未合并的插入缓冲区条目 。
- 清除已从.ibd文件中删除所有删除标记的索引记录 。
- mysqld已将.ibd文件的所有修改页从缓冲池刷新 到文件。
您可以.ibd使用以下方法制作干净的备份文件:
- 停止mysqld服务器上的所有活动并提交所有事务。
- 等待直到SHOW ENGINE INNODB STATUS显示数据库中没有活动的事务,并且主线程状态 InnoDB为Waiting
for server activity。然后,您可以复制该 .ibd文件。
实际步骤
1.创建数据表a
2. ALTER TABLE a DISCARD TABLESPACE;
3.将数据表文件a.ibd拷贝到数据库的目录下
4.ALTER TABLE a IMPORT TABLESPACE;