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

2023-11-18

需求

在某些特殊的场景下,例如你的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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 短文简单理解遗传算法和代码审计应用思路

    短文简单理解遗传算法和代码审计应用思路 如何理解遗传算法 假设小明爷爷DNA之中带有A字段 小明爸也有 小明也有 说明A字段会遗传 如果A是存在危险函数 这就是遗传 同样的在代码之中多数存在包含关系 也称为调用 所以危险函数是可以被 遗传
  • 深度学习——图像增强 小组代码

    TJU暑期的深度学习训练营 这是人脸识别运用图像增强后的一段代码 import os shutil unzip tjudataset zip base dir tjudataset read data train dir os path j
  • vuecli打包时去掉console.log

    1 安装babel plugin transform remove console插件 npm i save dev babel plugin transform remove console 2 在babel config js中配置 c
  • Centos7 MySQL8 主从同步提示:Fatal error: The slave I/O thread stops because master and slave have equal

    报错信息 在搭建Mysql主从架构过程中 由于从服务器是克隆的主服务器系统 导致主从Mysql uuid相同 Slave IO无法启动 报错如下 Last IO Error Fatal error The slave I O thread
  • JavaScript中的关键字“VAR”使用详解

    JavaScript的变量也是有作用域的 只是它非常的笼统 就分为全局变量和函数变量 作为全局变量的时候 有没有var 都没有关系 但是 在function中 有var就表示是局部变量 没有var就表示是全局变量 JScript的语法教程里
  • Window10 安装Linux子系统

    为Window10 安装Linux子系统 WSL是win10 的Linux的子系统 相比虚拟机有更多的优势 对系统资源占用少 切换系统之间较为的方便 安装步骤 安装WSL要求Win10系统在1607版本以上 查看自己的版本是否符合要求 开启
  • charles 抓取微信pc客户端小程序https traffics

    preface 今天看了下 pc端小程序的ui 展示 有一丢丢bug 以后肯定会更好的 最近微信 更新了 pc 客户端 小程序是可以直接在 pc 端 查看的 这一个功能真是太棒了 我们可以不连手机 直接在 电脑上进行 某些 抓包 测试了 1
  • MySql创建存储过程(procedure)

    如果存储过程中含有动态SQL语句 在触发器中调用该存储过程时会报错ERROR 1336 0A000 Dynamic SQL is not allowed in stored function or trigger 该错误的含义是 函数或者触
  • JS中的aes加密解密

    javascript中的aes加密解密 aes加密一般通过制定的秘钥进行加密和解密操作 页面上得引入aes的js文件 然后直接调用即可 文件我会贴出来 function pwd keys pwd是密码明文 keys是指定的秘钥 这个func
  • 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。并排序[c实现]

    void merge int nums1 int nums1Size int m int nums2 int nums2Size int n int end1 m 1 int end2 n 1 int end n m 1 while end
  • 最新 Mac 安装python+anaconda+tensorflow

    最新 Mac 安装python anaconda tensorflow pytorch 全步骤 版本 一 正常情况三步安装 二 第二步 第三步超时 显示错误如下 添加镜像 三 zsh conmmand not found 四 jupyter
  • SQL SERVER 提取字符串中数字

    对一个字符串进行提取 获取其中数字部分 方法如下 IF OBJECT ID DBO GET NUMBER IS NOT NULL DROP FUNCTION dbo GET NUMBER GO CREATE FUNCTION dbo GET
  • 集装箱装柜计算机器在线,装箱大师在线计算教程

    原创装箱大师在线计算教程 编辑 小葫芦 来源 PC下载网时间 2018 01 08 10 34 38 1 对于从事装箱设计工作的小伙伴来说 如何高效快速的装箱一直是个难题 不过装箱大师这款软件可以帮助大家解决这个难题 接下来小编就来教大家如
  • UPnP的介绍和理解

    在远程服务器开了一个节点B 然后在自己电脑上启动两个节点A C 用了 bootnodes B命令 A和C都能把B节点添加到自己的列表里 但是A和C不能互相发现是为什么 按理来说B应该把自己知道的节点列表都告诉给他相连的节点吧 答案是 它们会
  • 崇德科技深交所上市:上半年营收2.6亿募资10亿 市值48亿

    雷递网 雷建平 9月20日 湖南崇德科技股份有限公司 简称 崇德科技 证券代码 301548 今日在深交所创业板上市 崇德科技本次发行1500万股 发行价66 8元 募资10亿元 崇德科技原计划募资5 3亿元 这意味着超募了近5亿元 崇德科
  • K9s之Kubernetes集群管理交互工具实践

    文章目录 0x01 基础简介 0x02 安装实践 安装流程 配置示例 0x02 命令实践 命令参数 简单使用 0x01 基础简介 K9s Kubernetes CLI To Manage Your Clusters In Style 描述
  • 快速排序 详解(快速排序 双路快排 三路快排)

    注 内容 图片来自于慕课网liuyubobobo老师的课程 官方代码链接 https github com liuyubobobo Play with Algorithms 快速排序 快速排序可以说是20世纪最伟大的算法之一了 相信都有所耳
  • Stm32 一键下载电路详解

    文章目录 前言 一键下载 一键下载原理 硬件原理图 跳帽与启动 存储映射 串口下载程序由来 一键下载流程 通过 USB 控制机器复位握手 解读 前言 最近在又要折腾 stm32 了 所以翻出了角落里的开发板 先复习下怎么一键下载来着 一键下
  • linux中安装mysql时报错解决方案

    转载于http www cnblogs com xiaolang8762400 p 6950920 html 找了很久才找到 谢谢大神 本人需要找的问题主要是安装时出错的解决方法 本人的文件版本跟原创的版本有点不一样 需要哪个版本自行选择
  • 实战:从Mysql数据库frm文件中,提取表结构创建SQL语句

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