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
命令。
写在最后
在使用上,可以多个工具都测试一下,对比哪个工具恢复的命令更为完善可取,选择最佳的。
参考:
mysql 从 frm 文件恢复 table 表结构的3种方法的更多相关文章
- 通过替换frm文件方式修改表结构
版本:5.6.16 在自己的虚拟环境中,测试创建一个表,表结构如下:mysql> drop table yoon_temp;Query OK, 0 rows affected (0.09 sec ...
- mysql使用“.frm”文件恢复表结构
mysql创建每张表后都会在“mysql安装目录/data/数据库名/”目录下创建一个“表名.frm”文件. 该.frm文件并不能直接打开,但是它可以帮助你恢复你的表结构~~ 具体操作如下: 我现在准 ...
- MySQL只有.frm文件恢复表结构
http://www.ttlsa.com/mysql/mysql-utilities-mysqlfrm/ 以诊断模式读取目录中的所有的FRM文件: D:\Program Files (x86)\Eas ...
- mysql 复制表数据,表结构的3种方法
什么时候我们会用到复制表?例如:我现在对一张表进行操作,但是怕误删数据,所以在同一个数据库中建一个表结构一样,表数据也一样的表,以作备份.如果用mysqldump比较麻烦,备份.MYD,.MYI这样的 ...
- 查看mysql表结构的几种方法
desc 表名; show columns from 表名; describe 表名; show create table 表名; use information_schemaselect * fro ...
- Oracle查看表结构的几种方法
1,DESCRIBE 命令 使用方法如下: SQL> describe nchar_tst(nchar_tst为表名) 显示的结果如下: 名称 ...
- Oracle查看表结构的几种方法(转后加工)
1. DESCRIBE 命令使用方法如下:SQL> describe WX_ADVANCEUP (WX_ADVANCEUP为表名)显示的结果如下: 名称 ...
- mysql开启远程登陆(修改数据表和授权两种方法)
一.确认防火墙没有阻止3306端口(一般服务器默认会屏蔽掉) windows防火墙例外设置方法 控制面板(右上角选择查看方式为大图标)---防火墙---高级设置---高级设置---出站规则---最右边 ...
- MySQL 利用frm文件和ibd文件恢复表结构和表数据
文章目录 frm文件和ibd文件简介 frm文件恢复表结构 ibd文件恢复表数据 通过脚本利用ibd文件恢复数据 通过shell脚本导出mysql所有库的所有表的表结构 frm文件和ibd文件简介 在 ...
随机推荐
- python第十五课——全局变量and局部变量
全局变量&局部变量: 全局变量的特点: 1).直接定义在.py文件中(函数外)的变量(全局位置) 2).作用域比较大,可以被此文件中的任何函数所使用 局部变量的特点:1).定义在函数内部(函数 ...
- python第十四课--排序及自定义函数
1.排序 特点: 1).升序:从小到大 2).降序:从大到小 课堂实现选择排序:参看老郭选择排序.py文件 2.函数:(方法/method) 自定义函数: 概念:它表示一段作用范围(作用域),当中封装 ...
- shell基础--字符串和变量的操作
一.统计字符串长度 1.wc –L [root@~_~day4]# echo "hello" | wc -L 5 2.expr length string [root@~_~day ...
- CVE-2017-8046 复现与分析
环境搭建 使用的项目为https://github.com/spring-guides/gs-accessing-data-rest.git里面的complete,直接用IDEA导入,并修改pom.x ...
- selenium+python unittest实践过程之问题杂集
1.列表选择项后直接获取文本内容获取不到,应该获取选择后显示的button的值 2.取值后的值带有空格,可以使用.strip()删除前后空格,以便断言 3.取值后有些值需要对类型进行转换才能断言成功 ...
- 集合之保持compareTo和equals同步
在Java中我们常使用Comparable接口来实现排序,其中compareTo是实现该接口方法.我们知道compareTo返回0表示两个对象相等,返回正数表示大于,返回负数表示小于.同时我们也知道e ...
- iredmail 设置
一些问题和修改 1.收邮件很慢安装完毕后,测试会发现 发送邮件都是秒到,但收邮件特别慢 长达十几分钟,这是因为iredmail的灰名单规则导致的(需要外部邮箱进行3次投递才接收,防止垃圾邮件),禁用灰 ...
- Spring Cloud和Dubbo整合开发笔记(1)
一.需求背景: 公司内部老项目微服务技术栈使用Dubbo, 新项目技术栈使用主流的Spring Cloud相关组件开发,新旧项目涉及交互调用,无法直接通信数据传递. 老项目基于Dubbo,重构代码升级 ...
- 解决Xcode 7 http无法使用的问题
在info.plist文件中添加 <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbit ...
- iOS字体相关
1.使用自定义字体 (1)将字体文件导入项目 (2)在info.plist文件中添加 Fonts provided by application (3)获取字体在项目中的名称 for fontFami ...