MySQL 技术内幕:InnoDB 存储引擎

🌙
手机阅读
本文目录结构

MySQL 技术内幕

编辑推荐

畅销书全新升级,第 1 版广获好评;资深 MySQL 专家撰写,全球知名 MySQL 数据库服务提供商 Percona 公司 CTO 作序推荐,国内多位数据库专家联袂推荐基于 MySQL 5.6,结合源代码,从存储引擎内核角度对 InnoDB 的整体架构、核心实现和工作机制进行深入剖析

内容简介

《MySQL 技术内幕:InnoDB 存储引擎》由国内资深 MySQL 专家亲自执笔,国内外多位数据库专家联袂推荐。作为国内一本关于 InnoDB 的专著,本书的第 1 版广受好评,第 2 版不仅针对全新的 MySQL 5.6 对相关内容进行了全面的补充,还根据广大读者的反馈意见对第 1 版中存在的不足进行了完善,全书大约重写了 50%的内容。本书从源代码的角度深度解析了 InnoDB 的体系结构、实现原理、工作机制,并给出了大量实践,能帮助你系统而深入地掌握 InnoDB,更重要的是,它能为你设计管理高性能、高可用的数据库系统提供专业的指导。

《MySQL 技术内幕:InnoDB 存储引擎》一共 10 章,首先宏观地介绍了 MySQL 的体系结构和各种常见的存储引擎以及它们之间的比较;接着以 InnoDB 的内部实现为切入点,逐一详细讲解了 InnoDB 存储引擎内部的各个功能模块的实现原理,包括 InnoDB 存储引擎的体系结构、内存中的数据结构、基于 InnoDB 存储引擎的表和页的物理存储、索引与算法、文件、锁、事务、备份与恢复,以及 InnoDB 的性能调优等重要的知识;最后对 InnoDB 存储引擎源代码的编译和调试做了介绍,对大家阅读和理解 InnoDB 的源代码有重要的指导意义。

本书适合所有希望构建和管理高性能、高可用性的 MySQL 数据库系统的开发者和 DBA 阅读。

作者简介

姜承尧(David Jiang),资深 MySQL 数据库专家,擅长于数据库的故障诊断、性能调优、容灾处理、高可用和高扩展研究,同时一直致力于 MySQL 数据库底层实现原理的研究和探索。此外,对高性能数据库和数据仓库也有深刻而独到的理解。曾为 MySQL 编写了许多开源工具和性能扩展补丁,如广受好评的 InnoDB 引擎二级缓存项目。现任网易杭州研究院技术经理一职,负责 MySQL 数据库的内核开发,参与设计与开发 MySQL 数据库在网易云环境中的应用。曾担任久游网数据库工程部经理,曾领导并参与了多个大型核心数据库的设计、实施、管理和维护,实战经验非常丰富。活跃于开源数据库以及开源软件领域,是著名开源社区 ChinaUnix MySQL 版块的版主,热衷于与网友分享自己的心得和体会,深受社区欢迎。

除本书外,他还撰写了《MySQL 技术内幕:SQL 编程》,是本书的姊妹篇,颇受好评。

目录

第 1 章 MySQL 体系结构和存储引擎

  • 1.1 定义数据库和实例
  • 1.2 MySQL 体系结构
  • 1.3 MySQL 存储引擎
  • 1.3.1 InnoDB 存储引擎
  • 1.3.2 MyISAM 存储引擎
  • 1.3.3 NDB 存储引擎
  • 1.3.4 Memory 存储引擎
  • 1.3.5 Archive 存储引擎
  • 1.3.6 Federated 存储引擎
  • 1.3.7 Maria 存储引擎
  • 1.3.8 其他存储引擎
  • 1.4 各存储引擎之间的比较
  • 1.5 连接 MySQL
  • 1.5.1 TCP/IP
  • 1.5.2 命名管道和共享内存
  • 1.5.3 UNIX 域套接字
  • 1.6 小结

第 2 章 InnoDB 存储引擎

  • 2.1 InnoDB 存储引擎概述
  • 2.2 InnoDB 存储引擎的版本
  • 2.3 InnoDB 体系架构
  • 2.3.1 后台线程
  • 2.3.2 内存
  • 2.4 Checkpoint 技术
  • 2.5 Master Thread 工作方式
  • 2.5.1 InnoDB 1.0.x 版本之前的 Master Thread
  • 2.5.2 InnoDB1.2.x 版本之前的 Master Thread
  • 2.5.3 InnoDB1.2.x 版本的 Master Thread
  • 2.6 InnoDB 关键特性
  • 2.6.1 插入缓冲
  • 2.6.2 两次写
  • 2.6.3 自适应哈希索引
  • 2.6.4 异步 IO
  • 2.6.5 刷新邻接页
  • 2.7 启动、关闭与恢复
  • 2.8 小结

第 3 章 文件

  • 3.1 参数文件
  • 3.1.1 什么是参数
  • 3.1.2 参数类型
  • 3.2 日志文件
  • 3.2.1 错误日志
  • 3.2.2 慢查询日志
  • 3.2.3 查询日志
  • 3.2.4 二进制日志
  • 3.3 套接字文件
  • 3.4 pid 文件
  • 3.5 表结构定义文件
  • 3.6 InnoDB 存储引擎文件
  • 3.6.1 表空间文件
  • 3.6.2 重做日志文件
  • 3.7 小结

第 4 章 表

  • 4.1 索引组织表
  • 4.2 InnoDB 逻辑存储结构
  • 4.2.1 表空间
  • 4.2.2 段
  • 4.2.3 区
  • 4.2.4 页
  • 4.2.5 行
  • 4.3 InnoDB 行记录格式
  • 4.3.1 Compact 行记录格式
  • 4.3.2 Redundant 行记录格式
  • 4.3.3 行溢出数据
  • 4.3.4 Compressed 和 Dynamic 行记录格式
  • 4.3.5 CHAR 的行结构存储
  • 4.4 InnoDB 数据页结构
  • 4.4.1 File Header
  • 4.4.2 Page Header
  • 4.4.3 Infimum 和 Supremum Records
  • 4.4.4 User Records 和 Free Space
  • 4.4.5 Page Directory
  • 4.4.6 File Trailer
  • 4.4.7 InnoDB 数据页结构示例分析
  • 4.5 Named File Formats 机制
  • 4.6 约束
  • 4.6.1 数据完整性
  • 4.6.2 约束的创建和查找
  • 4.6.3 约束和索引的区别
  • 4.6.4 对错误数据的约束
  • 4.6.5 ENUM 和 SET 约束
  • 4.6.6 触发器与约束
  • 4.6.7 外键约束
  • 4.7 视图
  • 4.7.1 视图的作用
  • 4.7.2 物化视图
  • 4.8 分区表
  • 4.8.1 分区概述
  • 4.8.2 分区类型
  • 4.8.3 子分区
  • 4.8.4 分区中的 NULL 值
  • 4.8.5 分区和性能
  • 4.8.6 在表和分区间交换数据
  • 4.9 小结

第 5 章 索引与算法

  • 5.1 InnoDB 存储引擎索引概述
  • 5.2 数据结构与算法
  • 5.2.1 二分查找法
  • 5.2.2 二叉查找树和平衡二叉树
  • 5.3 B+ 树
  • 5.3.1 B+ 树的插入操作
  • 5.3.2 B+ 树的删除操作
  • 5.4 B+ 树索引
  • 5.4.1 聚集索引
  • 5.4.2 辅助索引
  • 5.4.3 B+ 树索引的分裂
  • 5.4.4 B+ 树索引的管理
  • 5.5 Cardinality 值
  • 5.5.1 什么是 Cardinality
  • 5.5.2 InnoDB 存储引擎的 Cardinality 统计
  • 5.6 B+ 树索引的使用
  • 5.6.1 不同应用中 B+ 树索引的使用
  • 5.6.2 联合索引
  • 5.6.3 覆盖索引
  • 5.6.4 优化器选择不使用索引的情况
  • 5.6.5 索引提示
  • 5.6.6 Multi-Range Read 优化
  • 5.6.7 Index Condition Pushdown(ICP)优化
  • 5.7 哈希算法
  • 5.7.1 哈希表
  • 5.7.2 InnoDB 存储引擎中的哈希算法
  • 5.7.3 自适应哈希索引
  • 5.8 全文检索
  • 5.8.1 概述
  • 5.8.2 倒排索引
  • 5.8.3 InnoDB 全文检索
  • 5.8.4 全文检索
  • 5.9 小结

第 6 章 锁

  • 6.1 什么是锁
  • 6.2 lock 与 latch
  • 6.3 InnoDB 存储引擎中的锁
  • 6.3.1 锁的类型
  • 6.3.2 一致性非锁定读
  • 6.3.3 一致性锁定读
  • 6.3.4 自增长与锁
  • 6.3.5 外键和锁
  • 6.4 锁的算法
  • 6.4.1 行锁的 3 种算法
  • 6.4.2 解决 Phantom Problem
  • 6.5 锁问题
  • 6.5.1 脏读
  • 6.5.2 不可重复读
  • 6.5.3 丢失更新
  • 6.6 阻塞
  • 6.7 死锁
  • 6.7.1 死锁的概念
  • 6.7.2 死锁概率
  • 6.7.3 死锁的示例
  • 6.8 锁升级
  • 6.9 小结

第 7 章 事务

  • 7.1 认识事务
  • 7.1.1 概述
  • 7.1.2 分类
  • 7.2 事务的实现
  • 7.2.1 redo
  • 7.2.2 undo
  • 7.2.3 purge
  • 7.2.4 group commit
  • 7.3 事务控制语句
  • 7.4 隐式提交的 SQL 语句
  • 7.5 对于事务操作的统计
  • 7.6 事务的隔离级别
  • 7.7 分布式事务
  • 7.7.1 MySQL 数据库分布式事务
  • 7.7.2 内部 XA 事务
  • 7.8 不好的事务习惯
  • 7.8.1 在循环中提交
  • 7.8.2 使用自动提交
  • 7.8.3 使用自动回滚
  • 7.9 长事务
  • 7.10 小结

第 8 章 备份与恢复

  • 8.1 备份与恢复概述
  • 8.2 冷备
  • 8.3 逻辑备份
  • 8.3.1 mysqldump
  • 8.3.2 SELECT…INTO OUTFILE
  • 8.3.3 逻辑备份的恢复
  • 8.3.4 LOAD DATA INFILE
  • 8.3.5 mysqlimport
  • 8.4 二进制日志备份与恢复
  • 8.5 热备
  • 8.5.1 ibbackup
  • 8.5.2 XtraBackup
  • 8.5.3 XtraBackup 实现增量备份
  • 8.6 快照备份
  • 8.7 复制
  • 8.7.1 复制的工作原理
  • 8.7.2 快照 + 复制的备份架构
  • 8.8 小结

第 9 章 性能调优

  • 9.1 选择合适的 CPU
  • 9.2 内存的重要性
  • 9.3 硬盘对数据库性能的影响
  • 9.3.1 传统机械硬盘
  • 9.3.2 固态硬盘
  • 9.4 合理地设置 RAID
  • 9.4.1 RAID 类型
  • 9.4.2 RAID Write Back 功能
  • 9.4.3 RAID 配置工具
  • 9.5 操作系统的选择
  • 9.6 不同的文件系统对数据库性能的影响
  • 9.7 选择合适的基准测试工具
  • 9.7.1 sysbench
  • 9.7.2 mysql-tpcc
  • 9.8 小结

第 10 章 InnoDB 存储引擎源代码的编译和调试

  • 10.1 获取 InnoDB 存储引擎源代码
  • 10.2 InnoDB 源代码结构
  • 10.3 MySQL 5.1 版本编译和调试 InnoDB 源代码
  • 10.3.1 Windows 下的调试
  • 10.3.2 Linux 下的调试
  • 10.4 cmake 方式编译和调试 InnoDB 存储引擎
  • 10.5 小结

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了