伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

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

来源:本站原创 浏览:92次 时间:2022-11-14

需求

在某些特殊的场景下,例如你的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 mysqldmysql74835  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: test1Create 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_ci1 row in set (0.03 sec)ERROR:No query specified

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

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net