mysql从frm⽂件恢复table表结构的3种⽅法【推荐】mysql 正常运⾏的时候,查看 table 的结构并不是困难的事。
但是有时 mysql 发⽣故障,这种⽅法便不再可⾏。
当遇到故障,通常使⽤新的 mysql 实例来恢复当前的数据。
建表是⾮常重要的步骤,我们必须有其它的⽅法来寻 table 的结构。
table 结构定义在哪⾥
通常关注的⽤户数据,底层都实际存储在 mysql 数据⽬录。
其它的元数据也不例外,⽐如 table 表结构的定义。mysql下载完如何使用
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.
$ 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 > 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种⽅法,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。在此也⾮常感谢⼤家对⽹站的⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。