MySQL 运维实战课
张新铭(俊达)
云掣科技资深数据库专家,前淘宝网、支付宝数据库专家
896 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已更新 27 讲/共 41 讲
第三章 InnoDB 存储引擎篇 (1讲)
MySQL 运维实战课
15
15
1.0x
00:00/00:00
登录|注册

25|数据库无法启动,如何读取InnoDB文件中的数据?(上)

你好,我是俊达。这一讲我们来了解下 InnoDB 的物理存储格式。
了解物理存储格式有什么作用呢?有时,由于系统表空间或其他物理文件损坏,数据库可能无法启动,即使设置了参数 innodb_force_recovery 还是无法启动。有时,由于误操作把表 DROP 了,或者是在文件系统层面把 ibd 文件删除了。
解决这些问题,正规的做法是做好备份、备库。但是在一些极端情况下,没有备份和备库,你还能把数据找回来吗?掌握 InnoDB 数据文件的格式后,理论上你可以解析 ibd 文件,提取出里面的数据。如果 ibd 文件被删除了,可以先使用文件恢复工具找回文件,然后再解析 ibd 文件。
另外,理解物理文件格式,也能帮你更好地掌握 InnoDB 内部原理,比如 B+ 树在物理上是怎么存储的,插入、删除、更新等操作具体做了什么,Buffer Pool 的结构到底是怎样的,Redo 和 Undo 是如何保证数据不丢的。
要理解 InnoDB 的物理存储结构,最好的方法是创建一些测试表,写入一些数据,然后用一些工具打开文件,理解文件中的每一个字节的含义。
我们先创建一个测试表,写入几行数据。
create table t_dynamic(
id varchar(30) not null,
c1 varchar(255),
c2 varchar(255),
c3 varchar(8200),
c4 text,
primary key(id)
) engine=innodb row_format=dynamic charset=latin1;
insert into t_dynamic(id, c1, c2, c3, c4)
values
('ROW_001', rpad('', 5, 'A1'), rpad('', 13, 'A2'),
rpad('',8123,'A3'), rpad('', 8124, 'A4')),
('ROW_003', rpad('', 5, 'B1'), rpad('', 13, 'B2'), null, rpad('', 129, 'B4')),
('ROW_002', rpad('', 5, 'E1'), rpad('', 13, 'E2'), null, rpad('', 22, 'E4')),
('ROW_007', rpad('', 5, 'D1'), rpad('', 13, 'D2'), null, rpad('', 27, 'D4')),
('ROW_004', rpad('', 5, 'F1'), rpad('', 13, 'F2'), null, rpad('', 24, 'F4')),
('ROW_005', rpad('', 5, 'C1'), rpad('', 13, 'C2'), null, rpad('', 35, 'C4')),
('ROW_006', rpad('', 5, 'G1'), rpad('', 13, 'G2'), null, rpad('', 26, 'G4')),
('ROW_008', rpad('', 5, 'H1'), rpad('', 13, 'H2'),
rpad('', 28, 'H3'), rpad('', 28, 'H4'));
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. InnoDB的物理存储格式对于数据库启动和数据完整性具有重要作用,可以通过理解物理文件格式来解析和提取InnoDB数据文件中的数据。 2. 理解InnoDB的物理存储结构有助于掌握InnoDB内部原理,包括B+树的存储方式、Buffer Pool的结构、Redo和Undo的数据保证机制等。 3. 了解InnoDB页面格式和页面头部信息有助于理解不同类型页面的存储格式和数据组织方式。 4. 页面尾部信息中的checksum存储有两份是为了检测数据是否损坏,确保数据写入磁盘的一致性和完整性。 5. 解读ibd文件的内容需要借助一些工具,如Hex Fiend,以十六进制的方式查看文件的内容,从中可以定位和理解页面中存储的数据。 6. InnoDB内部用来表示某个数据的存储地址时,有几种形式,包括(space_id, page_no, offset)、(page_no, offset)和(offset),这些形式对于定位数据在文件中的物理地址很重要。 7. 页面头部信息中的type字段用于标识页面中存储的数据类型,不同类型的页面以不同的格式存储数据,理解这些类型对于解析和理解页面数据很关键。 8. InnoDB将数据文件划分为页面进行管理,每个页面有固定的格式,包括页面头部信息、页面数据和页面尾部信息,理解页面的组成结构对于理解InnoDB的物理存储格式至关重要. 9. InnoDB行格式包括DYNAMIC、COMPACT、REDUNDANT和COMPRESSED这四种格式,可以在建表时通过row_format选项指定。 10. B+树页面由根页面(Root Page)、跳转页面(Branch Page)、叶子页面(Leaf Page)组成,每个页面包括头部信息、记录信息、空闲空间和目录项。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《MySQL 运维实战课》
新⼈⾸单¥59
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部