MySQL frm 解析利器-mysqlfrm

我们都知道innodb存储引擎创建的表会生成frm和idb这两种格式文件,其中frm存放的时表结构,idb存放的就是真实的数据,那么我们能不能直接打开frm文件呢,答案是否定的,如果我们直接打开,看到的是一些乱字符串,那么我们有什么工具可以查看呢,今天就介绍一个frm 解析工具-mysqlfrm

首先我们要安装mysqlfrm

yum 安装

yum install mysqlfrm

源码下载安装

https://downloads.mysql.com/archives/utilities/

那我们如何使用呢:

下面我们验证一下:

mysqlfrm  --diagnostic 表结构名称

 mysqlfrm  --diagnostic sc_store_inventory_negative_gri.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 sc_store_inventory_negative_gri.frm:
# The .frm file is a TABLE.
# CREATE TABLE Statement:

CREATE TABLE `sc_store_inventory_negative_gri` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT comment '自增主键',
  `store_id` varchar(64) NOT NULL comment '餐厅编号',
  `warehouse_id` varchar(256) NOT NULL comment '仓库id',
  `business_day` datetime DEFAULT NULL comment '营业日',
  `gri_code` varchar(256) NOT NULL comment '五位码编号',
  `gri_name` varchar(1020) NOT NULL comment '五位码名称',
  `amt` decimal(18,6) NOT NULL comment '负库存uom数量',
  `uom_price` decimal(18,6) NOT NULL comment 'UOM平均价',
  `negative_cost` decimal(18,6) NOT NULL comment '负库存平均价总金额',
  `negative_rate` decimal(18,6) NOT NULL comment '负库存率',
  `sku_count` int(11) NOT NULL comment '盘点货品种数',
  `deleted` tinyint(1) NOT NULL comment '逻辑删除 0:未删除 1:已删除',
  `status` varchar(128) NOT NULL comment '数据状态(active,inactive,submit,confirmed)',
  `create_by` varchar(256) NOT NULL comment '创建人编号',
  `create_name` varchar(1020) NOT NULL comment '创建人',
  `create_time` datetime NOT NULL comment '创建时间',
  `modify_by` varchar(256) NOT NULL comment '修改人编号',
  `modify_name` varchar(1020) NOT NULL comment '修改人',
  `modify_time` datetime NOT NULL comment '修改时间',
  `update_tag` tinyint(1) NOT NULL comment '更新标志 0:未更新 1:已更新',
PRIMARY KEY `PRIMARY` (`id`),
UNIQUE KEY `unique_index` (`store_id`,`warehouse_id`,`business_day`,`gri_code`) USING BTREE
) ENGINE=InnoDB COMMENT '负库存报表五位码维度';

但如果遇到字段指定字符集的时候解析会出现如下问题:


CREATE TABLE `sc_count_overdue_info` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT comment 'id',
  `store_id` varchar(128) CHARACTER SET NOT NULL comment '门店编码',
  `business_day` varchar(128) CHARACTER SET NOT NULL comment '报表日期',
  `sku_code` varchar(64) CHARACTER SET NOT NULL comment 'sku编码',
  `sku_name` varchar(1020) CHARACTER SET NOT NULL comment '货品八位码名称',
  `gri_code` varchar(64) CHARACTER SET NOT NULL comment '货品五位码',
  `gri_name` varchar(1020) CHARACTER SET NOT NULL comment '五位码名称',
  `frequency` varchar(64) CHARACTER SET NOT NULL comment '盘点频率',
  `last_count_days` int(11) NOT NULL comment '距离上次盘点天数',
  `deleted` tinyint(1) NOT NULL comment '逻辑删除',
  `status` varchar(128) NOT NULL comment '数据状态(active,inactive,submit,confirmed)',
  `create_by` varchar(256) NOT NULL comment '创建人编号',
  `create_name` varchar(256) NOT NULL comment '创建人',
  `create_time` datetime DEFAULT NULL comment '创建时间',
  `modify_by` varchar(256) NOT NULL comment '修改人编号',
  `modify_name` varchar(256) NOT NULL comment '修改人',
  `modify_time` datetime DEFAULT NULL comment '修改时间',
  `update_tag` tinyint(1) NOT NULL comment '更新标志',
PRIMARY KEY `PRIMARY` (`id`),
UNIQUE KEY `unique_index` (`store_id`,`business_day`,`sku_code`,`frequency`)
) ENGINE=InnoDB COMMENT '超期未盘信息表';

字符集CHARACTER 是。如果想要得到字段字符集设置。还得加上参数连上mysql。

如:mysqlfrm  --diagnostic sc_count_overdue_info.frm  --server=用户:密码@localhost

CREATE TABLE `sc_count_overdue_info` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT comment 'id',
  `store_id` varchar(32) COLLATE `utf8mb4_general_ci` NOT NULL comment '门店编码',
  `business_day` varchar(32) COLLATE `utf8mb4_general_ci` NOT NULL comment '报表日期',
  `sku_code` varchar(16) COLLATE `utf8mb4_general_ci` NOT NULL comment 'sku编码',
  `sku_name` varchar(255) COLLATE `utf8mb4_general_ci` NOT NULL comment '货品八位码名称',
  `gri_code` varchar(16) COLLATE `utf8mb4_general_ci` NOT NULL comment '货品五位码',
  `gri_name` varchar(255) COLLATE `utf8mb4_general_ci` NOT NULL comment '五位码名称',
  `frequency` varchar(16) COLLATE `utf8mb4_general_ci` NOT NULL comment '盘点频率',
  `last_count_days` int(11) NOT NULL comment '距离上次盘点天数',
  `deleted` tinyint(1) NOT NULL comment '逻辑删除',
  `status` varchar(32) NOT NULL comment '数据状态(active,inactive,submit,confirmed)',
  `create_by` varchar(64) NOT NULL comment '创建人编号',
  `create_name` varchar(64) NOT NULL comment '创建人',
  `create_time` datetime DEFAULT NULL comment '创建时间',
  `modify_by` varchar(64) NOT NULL comment '修改人编号',
  `modify_name` varchar(64) NOT NULL comment '修改人',
  `modify_time` datetime DEFAULT NULL comment '修改时间',
  `update_tag` tinyint(1) NOT NULL comment '更新标志',
PRIMARY KEY `PRIMARY` (`id`),
UNIQUE KEY `unique_index` (`store_id`(32),`business_day`(32),`sku_code`,`frequency`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4, COMMENT '超期未盘信息表';

你可能感兴趣的:(mysql,数据库,mysqlfrm,frm,解析,UNKNOWN)