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

 更新时间:2018年09月27日 14:54:37   作者:Dive into byte  
这篇文章主要介绍了mysql 从 frm 文件恢复 table 表结构的3种方法 ,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

mysql 正常运行的时候,查看 table 的结构并不是困难的事。

 但是有时 mysql 发生故障,这种方法便不再可行。

当遇到故障,通常使用新的 mysql 实例来恢复当前的数据。

建表是非常重要的步骤,我们必须有其它的方法来寻找 table 的结构。

table 结构定义在哪里

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

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

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

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

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

解析 table 结构

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

mysqlfrm

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

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

$ tar -xvzf mysql-utilities-1.6.5.tar.gz
$ cd mysql-utilities-1.6.5
$ python setup.py build
$ python setup.py install

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

直接分析

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

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

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

借助 mysql 实例分析

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

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

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

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

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

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

dbsake

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

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

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

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

online service

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

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

写在最后

在使用上,可以多个工具都测试一下,对比哪个工具恢复的命令更为完善可取,选择最佳的。

参考:

•mysqlfrm official doc

•dbsake project doc

总结

以上所述是小编给大家介绍的mysql 从 frm 文件恢复 table 表结构的3种方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • 解析远程连接管理其他机器上的MYSQL数据库

    解析远程连接管理其他机器上的MYSQL数据库

    本篇文章是对远程连接管理其他机器上的MYSQL数据库进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • Mysql中的日期时间函数小结

    Mysql中的日期时间函数小结

    本文主要介绍了Mysql中的日期时间函数小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • mysql多实例部署实例教程

    mysql多实例部署实例教程

    这篇文章主要介绍了mysql多实例部署,主要包括软件下载、配置用户并解压二进制程序至/usr/local下及创建各实例数据存放的目录,本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • MySQL正则表达式入门教程

    MySQL正则表达式入门教程

    这篇文章主要介绍了MySQL正则表达式,一个简单的MySQL正则表达式入门教程,需要的朋友可以参考下
    2014-04-04
  • MySQL数据库之字符集 character

    MySQL数据库之字符集 character

    这篇文章主要介绍了MySQL数据库之字符集 character,文章基于MySQL的的相关资料展开详细介绍,具有一定的参考价值需要的小伙伴可以参考一下
    2022-05-05
  • 详解如何在阿里云服务器安装Mysql数据库

    详解如何在阿里云服务器安装Mysql数据库

    这篇文章主要介绍了详解如何在阿里云服务器安装Mysql数据库,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • MySql避免重复插入记录的几种方法

    MySql避免重复插入记录的几种方法

    本文章来给大家提供三种在mysql中避免重复插入记录方法,主要是讲到了ignore,Replace,ON DUPLICATE KEY UPDATE三种方法,有需要的朋友可以参考一下
    2013-08-08
  • 在Mac系统上配置MySQL以及Squel Pro

    在Mac系统上配置MySQL以及Squel Pro

    给大家讲述一下如何在MAC苹果系统上配置MYSQL数据库以及Squel Pro的方法。
    2017-11-11
  • MySQL无法启动几种常见问题小结

    MySQL无法启动几种常见问题小结

    在群里看到有新同学还在问MySQL无法启动的问题,于是总结了几个常见情况与解决方法,需要的朋友可以参考下
    2013-09-09
  • MySQL存储过程相互调用并获得错误码示例

    MySQL存储过程相互调用并获得错误码示例

    这篇文章主要介绍了MySQL存储过程相互调用并获得错误码,需要的朋友可以参考下
    2014-03-03

最新评论