需求

在某些特殊的场景下,例如你的mysql数据库无法启动,需要你将表的ibd文件拷贝到另一个数据库中,恢复业务数据库,恢复业务数据的前提,是你需要在另一个数据库中,创建好一模一样的表结构。这时你就需要从Mysql数据库的frm文件中,提取表结构创建sql语句。

要想读取frm文件中的表结构,你需要先安装mysql的工具集rpm包,我安装的是mysql-utilities-1.6.5-1.el7.noarch.rpm这个版本,这个包可以从mysql官方网站下载,他依赖mysql-connector-python包,所以也需要从官网下载。

安装过程如下所示

[root@mysql ~]# yum install mysql-connector-python-2.1.8-1.el7.x86_64.rpm
[root@mysql ~]# yum install mysql-utilities-1.6.5-1.el7.noarch.rpm

有的朋友可能有疑问,既然你的mysql数据库已经无法启动了,那mysqlfrm能否提取到表结构创建sql语句呢,下面就来实战测试一下

检查是否有mysqld服务进程

[mysql@mysql ~]$ ps -ef|grep -i mysqldmysql
74835  70672  0 16:45 pts/1    00:00:00 grep --color=auto -i mysqld

使用mysqlfrm提取表结构

[mysql@mysql testdb]$ mysqlfrm --diagnostic /data/mysql/data/3306/testdb/test1.frm
# WARNING: Cannot generate character set or collation names without the --server option.
# CAUTION: The diagnostic mode is a best-effort parse of the .frm file. As such, it may not identify all of the components of the table correctly. This is especially true for damaged files. It will also not read the default values for the columns and the resulting statement may not be syntactically correct.
# Reading .frm file for /data/mysql/data/3306/testdb/test1.frm:
# The .frm file is a TABLE.
# CREATE TABLE Statement:CREATE TABLE `testdb`.`test1` (`id` int(11) NOT NULL,`name1` char(40) NOT NULL,`name2` char(80) NOT NULL,
PRIMARY KEY `PRIMARY` (`id`)
) ENGINE=InnoDB;#...done.

可以看到,已经提取到test1的表结构创建sql语句了,那来看看,提取到的语句是否是正确的。

[root@localhost] 16:53:24 [testdb]>show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| test1            |
+------------------+
1 row in set (0.00 sec)[root@localhost] 16:53:32 [testdb]>show create table test1\G;
*************************** 1. row ***************************Table: test1
Create Table: CREATE TABLE `test1` (`id` int(11) NOT NULL,`name1` char(10) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',`name2` char(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
1 row in set (0.03 sec)ERROR:
No query specified

对比一下原始表结构和提取出来的表结构,是不是发现有不一样的地方,这是因为mysqlfrm在不连接数据库提取表结构sql语句时,是无法知道用什么字符集的。在这个测试表,用的字符集是utf8mb4,一个字符占用4个字节长度,所以在这里,还需要将char,varchar的长度除4,才是正确的表结构sql语句。

参考链接 :
https://mp.weixin.qq.com/s/sijelEbIE4BTUZBmfFZ4Sw

实战:从Mysql数据库frm文件中,提取表结构创建SQL语句相关推荐

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

    mysql 正常运行的时候,查看 table 的结构并不是困难的事. 但是有时 mysql 发生故障,这种方法便不再可行. 当遇到故障,通常使用新的 mysql 实例来恢复当前的数据. 建表是非常重要 ...

  2. MYSQL数据文件--.frm文件(只有.frm文件时的表结构恢复)

    了解MYSQL的都知道,在MYSQL中建立任何一张数据表,在其数据目录对应的数据库目录下都有对应表的.frm文件,.frm文件是用来保存每个数据表的元数据(meta)信息,包括表结构的定义等,.frm ...

  3. mysql表只有frm文件_MYSQL数据文件--.frm文件(只有.frm文件时的表结构恢复)

    了解MYSQL的都知道,在MYSQL中建立任何一张数据表,在其数据目录对应的数据库目录下都有对应表的.frm文件,.frm文件是用来保存每个数据表的元数据(meta)信息,包括表结构的定义等,.frm ...

  4. mysql数据库information_schema库中的表说明

    过去我们常用命令 show databases show tables show processlist 其实这些都是来自于information_schema.当我开始了解information_s ...

  5. 命令行客户端MySQL基本命令的使用(登录、登出、数据库操作的SQL语句、表结构的SQL语句、表数据操作的SQL语句)

    1. 登录和登出数据库 登录数据库: 输入下面命令: mysql -uroot -p 说明: -u 后面是登录的用户名  [写成-u root也是可以的] -p 后面是登录密码, 如果不填写, 回车之 ...

  6. MySQL数据库学习笔记(三)----基本的SQL语句

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  7. springboot+Mybatis+MySql 一个update标签中执行多条update sql语句

    MySql默认是不支持这种骚操作的,但是并不代表不能实现,只需要在jdbc的配置文件中稍做配置: 配置文件:jdbc.properties driver=com.mysql.jdbc.Driver u ...

  8. 在mysql中修改表名的sql语句 1

    在使用mysql时,经常遇到表名不符合规范或标准,但是表里已经有大量的数据了,如何保留数据,只更改表名呢? 可以通过建一个相同的表结构的表,把原来的数据导入到新表中,但是这样视乎很麻烦. 能否简单使用 ...

  9. 读数据库所有表和表结构的sql语句了(mssql)

    SQL获取所有数据库名.表名.储存过程以及参数列表 1.获取所有用户名: SELECT name FROM Sysusers where status='2' and islogin='1' islo ...

最新文章

  1. python 遍历字符串
  2. spring读取配置文件初始化容器操作总结
  3. jQuery addClass,removeClass,class属性增删
  4. 【Android Protobuf 序列化】Protobuf 使用 ( protobuf-gradle-plugin 插件简介 | Android Studio 中配置插件 | AS 中编译源文件 )
  5. 传递结构体变量解决方案,资料整理一
  6. C代码开发遇到的问题 变量初始化和结构体指针移动
  7. Mule ESB,ActiveMQ和DLQ
  8. tensorflow一步一步实现一个线性回归预测模型
  9. 论文页眉奇偶页不同怎么设置_什么!论文排版这么简单的吗?!
  10. C语言编写FFT程序
  11. pdf转word完全免费软件
  12. Nacos 原理 Jraft Distro Grpc 持续跟新中...
  13. 新浪微博注册页面的用户体验分析报告(转载)
  14. CF447A DZY Loves Hash 模拟
  15. [励志]知乎热门:做事情三分钟热度怎么破?
  16. 阅读《时间,管理把握最宝贵的财富》摘录(1)
  17. 算法交易系列研究之一
  18. ERP软件主要的作用有哪些?
  19. 华为nova7 pro怎么升级鸿蒙,华为nova7升级到EMUI11,8大功能提升,带来更新体验
  20. wireshark 分析理解DHCP流程

热门文章

  1. python urlopen_Python爬虫教程-02-使用urlopen
  2. python scrapy框架爬虫当当图书网
  3. 股票软件开发中全推与点播的区别
  4. QThread(一)
  5. python微控制器编程从零开始下载_Python微控制器编程从零开始(使用MicroPython)...
  6. 深度学习(deep learning)优化调参细节(trick)
  7. JSP页面添加播放视频功能
  8. 常见错误及细小知识点锦集
  9. PHP检测每一段代码执行时间
  10. 初笔,JAVA.HelloWorld代码详解