MYSQL8 通过ibd文件恢复表数据

数据无价,操作前,建议先备份
前提条件
表结构一致:

源数据库和目标数据库中的表结构必须完全相同。这包括表的列定义、索引、约束等。
表使用 InnoDB 存储引擎:

这种迁移方法仅适用于使用 InnoDB 存储引擎的表,因为 .ibd 文件是 InnoDB 表的表空间文件。
数据库版本兼容:

源数据库和目标数据库的 MySQL 或 MariaDB 版本应该兼容。理想情况下,两个数据库的版本应该相同或非常接近,以避免潜在的兼容性问题。
表未被使用:

在执行 FLUSH TABLES … FOR EXPORT 和 DISCARD TABLESPACE 操作时,确保表未被其他事务或会话使用。
文件系统权限:

确保你有足够的文件系统权限来复制和修改 .ibd 和 .cfg 文件。通常,这需要 root 权限或数据库服务用户(如 mysql 用户)的权限。
数据库服务用户权限:

确保数据库服务用户(如 mysql 用户)对目标数据库目录具有读写权限。
关闭外键检查:

如果表中有外键约束,可能需要在导入表空间之前临时禁用外键检查。
注意事项
备份数据:

在进行任何操作之前,务必备份源数据库和目标数据库的数据,以防止数据丢失。
一致性检查:

在导入表空间后,检查表的数据一致性和完整性,确保数据没有损坏。
表定义文件:

确保在导出表空间时生成了表定义文件(.cfg 文件),并在导入时一并复制到目标数据库。
数据库日志:

在操作过程中,检查数据库日志文件以获取更多信息和错误提示。
禁用外键检查(如果有外键):

在导入表空间之前,可以临时禁用外键检查,以避免外键约束问题。

SET foreign_key_checks = 0;
ALTER TABLE table_name IMPORT TABLESPACE;
SET foreign_key_checks = 1;

操作步骤如下:

1.新建一个与原表结构相同的表,如果不记得的话,也可通过ibd文件查询表结构,方法如下:

先进入存放ibd文件的位置, 输入指令ibd2sdi --dump-file name.txt name.ibd

MYSQL8 通过ibd文件恢复表数据

查看解析后的txt文件,可以看到8.0版本的mysql把表结构、索引全部都放到了表数据文件ibd文件中了(然后你就可以在数据库中创建结构相同的表了)

 2.移除表空间

alter table table_name DISCARD TABLESPACE

3.关闭mysql服务,将备份的ibd文件,放到mysql->data->创建的数据库名称->,将ibd拷贝到此目录下,可通过以下方式查询

- 使用sql查询数据目录
show global variables like '%datadir%';

4.启动mysql服务,重新导入表空间

alter table table_name IMPORT TABLESPACE

 5.注意点

        数据表的结构一定要和恢复前的数据表结构一致

        原ibd文件时的数据库版本要和当前数据库版本一致(如8.0.11和8.0.23版本不同会导致复原失败)

6.小技巧批量操作:

首先通过navicat 执行show tables; 然后复制所有表名粘贴到linux中的一个文本中

MYSQL8 通过ibd文件恢复表数据
MYSQL8 通过ibd文件恢复表数据

执行下面的命令,将会生成执行移除所有表空间的语句

awk '{print "ALTER TABLE "$0 " DISCARD  TABLESPACE;"}' aa.txt
MYSQL8 通过ibd文件恢复表数据

如果是导入表空间同样,只是将上面的语句中 DISCARD 换成 IMPORT,完整语句如下

awk '{print "ALTER TABLE "$0 " IMPORT  TABLESPACE;"}' aa.txt
MYSQL8 通过ibd文件恢复表数据
声明: 本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
Mysql

MySQL 8.0字符集新纪元:utf8mb3与utf8mb4全面解析,utf8成历史

2024-12-12 11:57:07

Mysql

centos 7 下MySQL的root用户密码忘记解决方法

2024-12-17 12:12:47

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索