MySQL基于ibd恢复表数据
2022-12-17 本文已影响0人
伊夫_艾尔斯
如果你有.ibd文件的一个干净的备份,你可以按如下操作恢复它到MySQL中:
- 在接收数据的数据库中,基于原表结构创建对应的数据表;
- 执行如下ALTER TABLE语句(tbl_name: 你自己的表名,下同):
ALTER TABLE tbl_name DISCARD TABLESPACE;
警告: 这个语句删除当前.ibd文件。
- 把备份的.ibd文件放到新数据库的数据目录:
- 数据目录查找方式:
SHOW GLOBAL VARIABLES LIKE '%datadir%';
- 修改ibd文件所属权限(非常重要,不然执行下一步时会提示表不存在)
chown mysql:mysql tbl_name.ibd
- 发出这个ALTER TABLE语句:
ALTER TABLE tbl_name IMPORT TABLESPACE;
在上文中,一个.ibd文件干净的备份意为:
-
.ibd文件里没有尚未提交的事务做的修改。
-
.ibd文件里无未合并的插入混充条目。
-
净化已经从.ibd文件移除所有已标注删除的索引记录。
-
mysqld已经把.ibd文件的所有已修改页面从缓冲池 刷新到文件。
你可以用下列方法生成一个.ibd文件的干净备份:
-
停止所有来自mysqld服务器的活动,并提交所有事务。
-
等待直至SHOW INNODB STATUS显示在数据库被已经没有激活的事务,并且InnoDB主线程的状态是Waiting for server activity。然后你就可以复制.ibd文件了。