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 命令。

写在最后

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

参考:

mysql frm 恢复_mysql 从 frm 文件恢复 table 表结构的3种方法相关推荐

  1. mysql 主从 索引_Mysql繁忙主从库在线修改表结构与添加索引问题

    本帖最后由 jan_1985 于 2014-1-15 13:28 编辑 Mysql繁忙主从库在线修改表结构与添加索引问题 一直以来,生产情况下都有修改索引和修改字段的需求,但是对锁表引起的访问不便是会 ...

  2. Mysql查看表结构的三种方法

    目录: mysql查看表结构 方法: show create table desc information_schema.COLUMNS 表结构: 获取所有的表结构及备注 根据库名导出所有表信息 根据 ...

  3. 查看mysql数据表结构的两种方法你会吗?

    教你如何查看数据表结构 当我们创建完表之后,如何查看表结构,以便于确认该表符合我们的预期呢,我们可以使用describe或者show create table命令来查看mysql数据表结构,下面我们就 ...

  4. mysql授权 改表_mysql开启远程登陆(修改数据表和授权两种方法)

    一.确认防火墙没有阻止3306端口(一般服务器默认会屏蔽掉) windows防火墙例外设置方法 控制面板(右上角选择查看方式为大图标)---防火墙---高级设置---高级设置---出站规则---最右边 ...

  5. c mysql 包含字符串_Mysql字符串字段判断是否包含某个字符串的2种方法

    假设有个表: 复制代码 代码如下:CREATE TABLE users(id int(6) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id),user_name VAR ...

  6. mysql 复制表数据,表结构的3种方法

    http://blog.51yip.com/mysql/1311.html 转载于:https://www.cnblogs.com/svennee/p/4084441.html

  7. mysql 二进制日志 解析c++_mysql二进制日志文件恢复数据库

    二进制日志的文件的作用 mysql二进制日志文件用来记录所有用户对数据库操作,即记录用户对数据库操作的sql语句.如果有此文件,当数据库发生意外时,可以通过此文件查看到用户在此文件记录的时间段内用户所 ...

  8. 文件 备份 服务器失败怎么办,SMO“恢复服务器失败”从文件恢复备份

    我正在使用以下代码使用C#和SMO恢复备份SQL数据库.SMO"恢复服务器失败"从文件恢复备份 void RestoreDatabaseWithSMO(string sConnec ...

  9. 文件 备份 服务器失败怎么办啊,SMO“恢复服务器失败”从文件恢复备份

    我正在使用以下代码使用C#和SMO恢复备份SQL数据库.SMO"恢复服务器失败"从文件恢复备份 void RestoreDatabaseWithSMO(string sConnec ...

最新文章

  1. linux 下 Nginx 0.8.40的安装
  2. request.getParameter和request.getAttribute之间的区别
  3. android 解决华为 SlidingMenu出现白屏
  4. 栈的顺序存储及实现(二)
  5. 扩散(信息学奥赛一本通-T1437)
  6. 【算法】斐波那契(黄金分割法) 查找算法
  7. 仿生软体机器人就业咋样_SRT近亿元B轮融资,中国软体机器人技术从空白到全球领先...
  8. Kettle下载资源
  9. 无人便利店代理前景分析
  10. 刚知道,qq聊天的时候可以这么装逼
  11. 在线旅游发展趋势分析
  12. vue后台管理系统计算入职天数
  13. java高级实训输出张三李四_假设某数据库表中有一个姓名字段,查找姓名为张三和李四的条件是...
  14. 海洋角度分析全球气候变暖停滞原因
  15. python实现触摸精灵功能_触摸精灵lua脚本实现微信群加好友功能
  16. Redis——Redis持久化
  17. STM32L431(CubeMX)使用DHT11读取环境温度与湿度并通过串口打印
  18. 全球及中国散热产业产销规模及投资盈利预测报告2021版
  19. localhost是什么?
  20. Android第一行代码——第三章:控件的使用方法5A-00-1A-C4-8C-55(2009+jjy)

热门文章

  1. android按钮周围阴影,Android 上的按钮填充和阴影
  2. 压缩包加密后门_加密后门:还有更多争论吗?
  3. 科学院开放资源github_什么是开放科学?
  4. 每日面试之Java集合
  5. CSS3 多列布局的column-gap 和 column-rule属性
  6. es6 Promise 的含义
  7. koa2 mysql 事务_mysqljs在koa2中的正确姿势
  8. 是单向链表吗_一步一步教你从零开始写C语言链表
  9. bapi sap 创建物料_DEMO: MIRO 根据物料创建贷项凭证BAPI_INCOMINGINVOICE_CREATE
  10. 黑群晖给局域网电脑发消息_老电脑搭建家用NAS,省钱又好用