文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL 5.7 通过frm和ibd文件恢复数据

2023-10-20 08:24

关注

MySQL 5.7 通过解析frm和ibd文件恢复数据

.frm文件存储表结构
.ibd文件存储数据
以恢复表IP_PATENT_APPLICANT_LIST为例, 有待恢复表文件IP_PATENT_APPLICANT_LIST.frmIP_PATENT_APPLICANT_LIST.ibd

恢复表结构

dbsake解析frm

dbsake建议在linux系统或者wsl上操作(我在windows上执行dbsake失败), 本示例是在wsl上执行的

  1. 下载dbsake
    curl -s http://get.dbsake.net > dbsake
  2. 修改权限
    chmod u+x dbsake
  3. 解析frm
    ./dbsake frmdump /mnt/d/Desktop/IP_PATENT_APPLICANT_LIST.frm > /mnt/d/Desktop/IP_PATENT_APPLICANT_LIST.sql
  4. 执行IP_PATENT_APPLICANT_LIST.sql中的建表语句建表
  5. [可选]批量执行脚本
    目录结构
    transport.sh
    #!/bin/bash# 设置当前目录current_dir=$(pwd)# 定义路径frm_dir="$current_dir/frm"sql_dir="$current_dir/sql"# 检查目录是否存在,如果不存在则创建if [ ! -d "$sql_dir" ]; then  mkdir "$sql_dir"fi# 遍历frm目录中的所有文件for frm_file in "$frm_dir"/*.frm; do  # 提取文件名和扩展名  base_name=$(basename "$frm_file")  file_name="${base_name%.*}"  # 构建sql文件路径  sql_file="$sql_dir/$file_name.sql"  # 使用dbsake工具将frm文件转换为sql文件  ./dbsake frmdump "$frm_file" > "$sql_file"  # 检查转换是否成功  if [ $? -eq 0 ]; then    echo "转换成功: $frm_file -> $sql_file"  else    echo "转换失败: $frm_file"  fidone

部分frm文件用dbsake解析失败时, 就需要用到下面的"土方子"

土方子

  1. 创建一张同名表, 字段随便给一个即可, 此时MySQL的./data/路径下会生成一个frm和一个ibd文件;
    如果待恢复的表中不包含主键, 则在第1步和第7步的同名表创建时也不要指定主键, 否则会报错
    CREATE TABLE IP_PATENT_APPLICANT_LIST(`id` int, PRIMARY KEY(`id`)) ENGINE=InnoDB;
  2. 关闭MySQL服务
  3. 将待恢复的表的frm文件替换第1步中生成的frm文件
  4. 开启MySQL服务
  5. 查看MySQL的报错日志, 一般在安装目录下的data文件夹中的.err后缀的文件, docker MySQL则直接通过docker logs 命令查看即可, 查找类似下图报错信息:
    在这里插入图片描述
    如上图所示, 实际要恢复的表包含15个字段
  6. 删除第1步中创建的表
    DROP TABLE IP_PATENT_APPLICANT_LIST;
  7. 重新创建一张同名的包含15个字段的表
    CREATE TABLE IP_PATENT_APPLICANT_LIST(`id` int, `id1` int, `id2` int, `id3` int, `id4` int, `id5` int, `id6` int, `id7` int, `id8` int, `id9` int, `id10` int, `id11` int, `id12` int, `id13` int, `id14` int, PRIMARY KEY(`id`)) ENGINE=InnoDB;
  8. 重复第2 ~ 4步
  9. 执行SHOW CREATE TABLE IP_PATENT_APPLICANT_LIST命令查看建表语句
  10. 删除第7步创建的表
    DROP TABLE IP_PATENT_APPLICANT_LIST;
  11. 用第9步查到的建表语句重新建表, 能正常打开且表字段类型、索引、外键均正常即可

恢复数据

前提: 通过上述**“恢复表结构”**操作, 已完成数据表的创建

  1. 使当前.ibd的数据文件和.frm分离(此时mysql的data路径下, 对应的.ibd文件应该已经消失了)
    ALTER TABLE IP_PATENT_APPLICANT_LIST DISCARD TABLESPACE;
  2. 将要恢复数据的.ibd文件放到mysql的data路径下(我的mysql data路径是"F:\mysql-5.7.41-winx64\data\company"供参考, company为db名称)
  3. 使新的.ibd文件与.frm重新链接
    ALTER TABLE IP_PATENT_APPLICANT_LIST IMPORT TABLESPACE;
  4. 等待数据加载完成
  5. 能正常打开表, 且数据正常显示即可

参考(侵删): https://blog.csdn.net/zhchs2012/article/details/79013951, https://blog.csdn.net/wkh___/article/details/129841002

来源地址:https://blog.csdn.net/wacxf_lgl/article/details/130127091

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯