
如何通过文件解析MySQL的表结构
发布日期:2021-05-08 15:26:34
浏览次数:13
分类:精选文章
本文共 4420 字,大约阅读时间需要 14 分钟。
文章目录
一、MySQL Utilities-mysqlfrm
恢复工具,读取frm文件并从中找到 表、 视图定义语句
注意:不能读取到外键约束和自增长序列再生实例模式:
指定-server选项连接到已经安装的实例。该过程不会改变原始frm文件,指定–port选项给再生实例使用,该端口不能与现有端口冲突,读取完frm文件后,再生实例会关闭,所有临时文件将被删除[root@zijie data]# mysqlfrm --server=master57 --user=root --port=3310 /data/mysql57/data/test/t2.frm --show-stat# Source on 127.0.0.1: ... connected.# Spawning server with --user=root.# Starting the spawned server on port 3310 ... done.# Reading .frm files## Reading the t2.frm file.## CREATE statement for /data/mysql57/data/test/t2.frm:#CREATE TABLE `test`.`t2` ( `id` int(11) NOT NULL, `name` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4# File Statistics:# Last Modified : Thu Jul 30 15:27:19 2020# Creation Time : Thu Jul 30 15:27:19 2020# Last Accessed : Thu Jul 30 15:27:19 2020# Mode : 33184# Size : 8586# Table Statistics:# Engine : HEAP# frm Version : 10# MySQL Version : 5.7.29# frm File_Version : 5# IO_SIZE : 4096# Def Partition Engine : None#...done.
诊断模式:
指定–diagnostic选项,byte-by-byte读取frm文件,尽可能多的恢复信息,该模式不能校验字符集[root@zijie data]# mysqlfrm --diagnostic /data/mysql57/data/test/t2.frm --show-stats# 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/mysql57/data/test/t2.frm:# The .frm file is a TABLE.# CREATE TABLE Statement:CREATE TABLE `test`.`t2` ( `id` int(11) NOT NULL, `name` varchar(80) DEFAULT NULL,PRIMARY KEY `PRIMARY` (`id`)) ENGINE=InnoDB;# File Statistics:# Last Modified : Thu Jul 30 14:24:12 2020# Creation Time : Thu Jul 30 14:24:12 2020# Last Accessed : Thu Jul 30 14:24:12 2020# Mode : 33184# Size : 8586# Table Statistics:# Engine : INNODB# frm Version : 10# MySQL Version : 5.7.29# frm File_Version : 5# IO_SIZE : 4096# Def Partition Engine : None#...done.
选项
–quiet 仅显示create语句和警告、错误信息 –show-stats 统计frm文件信息利用frm和ibd恢复数据
在某此情况下,数据库崩溃或者数据丢失,无法启动;除了常规的备份恢复,binlog闪回外,还可以利用备份的或者磁盘上的frm和ibd文件恢复数据,因为数据库存储的数据实际上还是存储在文件里的myisam引擎:直接复制这三个文件即可使用,不需要恢复
xxx.frm 表结构文件 xxx.MYD 数据文件 xxx.MYI 索引文件 innodb引擎: innodb某些元数据是存储在 ibdata1文件中的 xxx.frm 表结构文件 -> 使用mysqlfrm获取 xxx.ibd 数据和索引文件 -> 覆盖文件利用frm和ibd恢复数据操作流程
第一步:利用mysqlfrm工具恢复表结构
第二步:创建该表 第三步:卸载表空间 第四步:复制ibd文件 第五步:导入表空间 第六步:检查数据是否已恢复二、InnoDB表空间SDI提取程序ibd2sdi
MySQL8里没有了frm文件,但是官方提供了更好的支持-InnoDB表空间SDI提取程序ibd2sdi。
具体属性根据解析内容做过滤即可[root@zijie ~]# ibd2sdi /data/mysql8/data/test/t1#p#p_1.ibd | egrep 'name|column_type_utf8' "name": "t1", "name": "id", "column_type_utf8": "int unsigned", "name": "name", "column_type_utf8": "varchar(32)", "name": "age", "column_type_utf8": "int", "name": "create_time", "column_type_utf8": "datetime", "name": "mondify_time", "column_type_utf8": "timestamp", "name": "virjson", "column_type_utf8": "json", "name": "dounum", "column_type_utf8": "double", "name": "decnum", "column_type_utf8": "decimal(10,4)", "name": "flodum", "column_type_utf8": "float", "name": "comment", "column_type_utf8": "text", "name": "DB_TRX_ID", "column_type_utf8": "", "name": "DB_ROLL_PTR", "column_type_utf8": "", "name": "PRIMARY", "name": "idx_createtime", "name": "idx_mondify_time", "name": "idx_asd", "name": "idx_cremo", "name": "idx_name", "name": "p_1", "name": "p_2", "name": "p_3", "name": "p_4", "name": "p_5", "name": "p_6", "name": "p_max", "name": "test/t1#p#p_1", "filename": "./test/t1#p#p_1.ibd",
发表评论
最新留言
很好
[***.229.124.182]2025年04月16日 17时30分52秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
mybatis #{}和${}区别
2021-05-09
Java Objects工具类重点方法使用
2021-05-09
Java内存模型(JMM)
2021-05-09
AQS相关
2021-05-09
abp(net core)+easyui+efcore实现仓储管理系统——多语言(十)
2021-05-09
WCF学习之旅—第三个示例之一(二十七)
2021-05-09
java ThreadPoolExecutor初探
2021-05-09
Markdown进阶
2021-05-09
快速指数算法
2021-05-09
python去除字符串中的特殊字符(爬虫存储数据时会遇到不能作为文件名的字符串)
2021-05-09
PHP将网址快捷方式保存到桌面
2021-05-09
SpringCloud微服务(03):Hystrix组件,实现服务熔断
2021-05-09
Spring 框架基础(01):核心组件总结,基础环境搭建
2021-05-09
JavaEE基础(02):Servlet核心API用法详解
2021-05-09
SpringBoot2 整合Nacos组件,环境搭建和入门案例详解
2021-05-09
结构与算法(03):单向链表和双向链表
2021-05-09
Hadoop框架:MapReduce基本原理和入门案例
2021-05-09