mysql 从 frm 文件恢复 table 表结构的3种方法

刺骨的言语ヽ痛彻心扉 2023-06-30 02:28 49阅读 0赞

文章目录

    • 一、 table 结构定义在哪里
    • 二、方法1:mysqlfrm
      • 1)、直接分析
      • 2)、借助 mysql 实例分析
    • 三、方法2:dbsake (推荐)
    • 四、方法3:online service

mysql 正常运行的时候,查看 table 的结构并不是困难的事。
但是有时 mysql 发生故障,这种方法便不再可行。

当遇到故障,通常使用新的 mysql 实例来恢复当前的数据。
创建表是非常重要的步骤,我们必须有其它的方法来寻找 table 的结构。

一、 table 结构定义在哪里

通常关注的用户数据,底层都实际存储在 mysql 数据目录。
其它的元数据也不例外,比如 table 表结构的定义。

mysql 数据目录文件结构是非常清晰的,

  • 目录对应数据库
  • frm 存储 table 结构的定义
  • ibd 存储 mysql 的元数据及其它

table 定义的结构,就存在于 frm 文件中,当然管理元数据的 ibd 也会有记录。

当存在 frm 文件的时候,恢复表结构相对容易。

但是如果执行了 drop table,便删除了 frm 文件,本文所提供的方法就爱莫能助了。
这种情况下,可以尝试从 ibdata 恢复表结构,这暂时不在下面的讨论范围内。

下面介绍 3 种从 frm 文件解析得到 create table 命令的方法。

二、方法1:mysqlfrm

mysqlfrm 是 mysql utilities 工具集 中的其中之一,
用于分析 frm 文件生成 create table 命令。
目前已经不再更新,部分功能并入了新版本的 mysql shell(version 8 及以后)。

mysql utilities 需要 python2 环境,安装非常简单。

  1. tar -xvzf mysql-utilities-1.6.5.tar.gz
  2. cd mysql-utilities-1.6.5
  3. python setup.py build
  4. python setup.py install

mysqlfrm 支持两类模式来解读 frm:

1)、直接分析

这种模式比较直接,逐个字节分析 frm 文件,尽可能的提取信息。

这种模式下,需要使用 —diagnostic 参数。

  1. $ mysqlfrm --diagnostic /data/sakila/actor.frm

2)、借助 mysql 实例分析

这种模式,借助新的 mysql 实例,从中完成 frm 的分析工作。
可以用两种方式来指定,如何开启新的 mysql 实例。

一,从当前的 mysql 服务中 spawn,使用 —server 指定 mysql 服务

  1. mysqlfrm --server=root:pass@localhost:3306 --port=3310 /data/sakila/actor.frm

二,启动新的 mysql 实例,使用 —basedir 指定 mysql 程序路径

  1. mysqlfrm --basedir=/usr/local/bin/mysql --port=3310 /data/sakila/actor.frm

–port 给新的实例指定端口,是为了避免与当前的 3306 端口出现冲突。

三、方法2:dbsake (推荐)

这是偶然发现的一个工具,文档中它这样介绍自己:

  1. dbsake - a (s)wiss-(a)rmy-(k)nif(e) for MySQL

作者一定是一个对 mysql 很有心得的人,工具从下载,安装到使用,简单,利落。

  1. curl -s get.dbsake.net > dbsake
  2. chmod u+x dbsake
  3. ./dbsake frmdump [frm-file-path]

操作步骤如下:
在这里插入图片描述

四、方法3:online service

有一些在线的服务,也关注这样的问题。
使用过的 twindb online,体验非常好,相关的工具集也很棒。

从 Recover Structure -> from .frm file 入口,上传 frm,就可以得到 create table 命令。

转自:https://www.jb51.net/article/148098.htm

发表评论

表情:
评论列表 (有 0 条评论,49人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQL frm文件恢复工具

    这个工具名为,它是一个命令行工具,可以在Linux和Windows系统上运行。它的主要功能是从已损坏或丢失的frm文件中提取表结构信息,并生成新的frm文件。是一个方便的...

    相关 mysql3方法

    一,先说一下为什么要分表 当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间