展开全部

主编推荐语

从主库端到从库端,带你深入解析MySQL主从构架的运行原理。

内容简介

在超大规模流量的分布式系统环境下,无论是从系统性能的角度,还是从数据安全性的角度,掌握MySQL主从原理,都是当下技术人员的必备基本功。

MySQL主从原理是高可用架构的基石,即便是MGR这种集群架构也可以看到主从的影子。要解决一个问题或者故障,最快的方式就是了解它的原理,快速定位问题。

本书从源码层面抽丝剥茧般地描述MySQL主从原理,全面地介绍了GTID相关的知识点,并解析了主要Event的生成、作用和格式,以及线程的初步知识、MDLLOCK、排序等热门话题和主从相关的案例。

无论是MySQLDBA和MySQL源码爱好者,还是刚进入数据库行业的小白读者,通过阅读本书,都能通过源码级分析,更好地理解和使用MySQL主从复制技术。

目录

  • 版权信息
  • 内容简介
  • 专家赞誉
  • 前言
  • 读者服务
  • 第1章 GTID
  • 1.1 GTID的基本概念
  • 1.1.1 GTID的作用
  • 1.1.2 GTID的基本表示
  • 1.1.3 schmerver_uuid的生成
  • 1.1.4 GTID的生成
  • 1.1.5 GTID_EVENT和PREVIOUS_GTIDS_LOG_EVENT简介
  • 1.1.6 gtid_executed表的作用
  • 1.2 mysql.gtid_executed表、gtid_executed变量、gtid_purged变量的修改时机
  • 1.2.1 定义
  • 1.2.2 主库修改时机
  • 1.2.3 从库修改时机
  • 1.2.4 通用修改时机
  • 1.2.5 通用修改时机源码函数简析
  • 1.3 GTID模块初始化简介和参数binlog_gtid_simple_recovery
  • 1.3.1 GTID模块初始化流程图
  • 1.3.2 步骤解析
  • 1.4 GTID中的运维
  • 1.4.1 跳过一个事务
  • 1.4.2 mysqldump导出行为的改变
  • 1.4.3 搭建GTID AUTO_POSITION MODE的主从
  • 1.4.4 主从切换
  • 1.4.5 参数gitd_mode的含义
  • 1.4.6 在线开启GTID
  • 1.4.7 离线开启GTID
  • 1.4.8 开启GTID的注意事项
  • 1.4.9 统计值ONGOING_ANONYMOUS_TRANSACTION_COUNT的变更时机
  • 1.4.10 设置MASTER_AUTO_POSITION = 1的影响
  • 1.4.11 离线开启GTID丢失数据的测试
  • 第2章 Event
  • 2.1 binary log Event 的总体格式
  • 2.1.1 引言
  • 2.1.2 binary log综述
  • 2.1.3 Event的总体格式
  • 2.1.4 Event header和Event footer
  • 2.1.5 具体解析
  • 2.1.6 本书涉及的Event类型
  • 2.2 重点Event之 FORMAT_DESCRIPTION_EVENT和PREVIOUS_GTIDS_LOG_EVENT
  • 2.2.1 FORMAT_DESCRIPTION_EVENT
  • 2.2.2 PREVIOUS_GTIDS_LOG_EVENT
  • 2.3 重点Event之GTID_EVENT
  • 2.3.1 GTID_EVENT的作用
  • 2.3.2 源码重要接口
  • 2.3.3 主体格式
  • 2.3.4 简单解析
  • 2.3.5 生成时机
  • 2.3.6 ANONYMOUS_GTID_EVENT
  • 2.3.7 GTID的三种模式
  • 2.4 重点Event之QUERY_EVENT和MAP_EVENT
  • 2.4.1 QUERY_EVENT
  • 2.4.2 MAP_EVENT
  • 2.5 重点Event之WRITE_EVENT和DELETE_EVENT
  • 2.5.1 WRITE_EVENT
  • 2.5.2 DELETE_EVENT
  • 2.6 重点Event之UPDATE_EVENT和XID_EVENT
  • 2.6.1 UPDATE_EVENT
  • 2.6.2 XID_EVENT
  • 2.7 参数binlog_row_image的影响
  • 2.7.1 参数影响
  • 2.7.2 过滤方式
  • 2.7.3 DML Event中的标识
  • 2.8 巧用Event发现问题
  • 2.8.1 工具简介
  • 2.8.2 分析长期未提交的事务
  • 2.8.3 分析大事务
  • 2.8.4 分析binary log中Event的生成速度
  • 2.8.5 分析每个表生成了多少个DML Event
  • 2.8.6 工具展示
  • 第3章 主库
  • 3.1 binlog cache简介
  • 3.1.1 binlog cache综述
  • 3.1.2 使用binlog cache的流程
  • 3.1.3 参数binlog_cache_size的作用及其初始化
  • 3.1.4 临时文件的分配和使用
  • 3.1.5 参数max_binlog_cache_size的作用
  • 3.1.6 如何观察到临时文件
  • 3.2 事务Event的生成和写入流程
  • 3.2.1 流程综述
  • 3.2.2 删除阶段流程
  • 3.2.3 提交阶段流程
  • 3.2.4 两个注意点
  • 3.3 MySQL层事务提交流程简析
  • 3.3.1 参数设置
  • 3.3.2 总体流程图
  • 3.3.3 步骤解析第一阶段
  • 3.3.4 步骤解析第二阶段(FLUSH阶段)
  • 3.3.5 步骤解析第三阶段(SYNC阶段)
  • 3.3.6 步骤解析第四阶段(COMMIT阶段)
  • 3.3.7 步骤解析第五阶段
  • 3.3.8 提交阶段的注意点
  • 3.4 基于WRITESET的并行复制方式
  • 3.4.1 奇怪的last commit
  • 3.4.2 WRITESET是什么
  • 3.4.3 WRITESET的生成
  • 3.4.4 add_pke函数的流程
  • 3.4.5 WRITESET设置对last commit的处理方式
  • 3.4.6 WRITESET的历史MAP
  • 3.4.7 WRITESET的并行复制对last commit的处理流程
  • 3.4.8 WRITESET_SESSION的方式
  • 3.4.9 关于参数binlog_transaction_dependency_history_size的说明
  • 3.4.10 没有主键的情况
  • 3.4.11 为什么同一个session执行的事务能生成同样的last commit
  • 3.4.12 WRITESET并行复制方式的优缺点
  • 3.5 主库的DUMP线程
  • 3.5.1 POSITION MODE和GTID AUTO_POSITION MODE的不同点
  • 3.5.2 流程图
  • 3.5.3 步骤解析
  • 3.5.4 重点说明
  • 3.6 DUMP线程查找和过滤GTID的基本算法
  • 3.6.1 环境假设
  • 3.6.2 检查从库的GTID是否大于主库的GTID
  • 3.6.3 检查需要的binary log是否已经清理
  • 3.6.4 实际扫描binary log
  • 3.6.5 GTID过滤
  • 第4章 从库
  • 4.1 从库MTS多线程并行回放(一)
  • 4.1.1 MTS综述
  • 4.1.2 协调线程的分发机制
  • 4.1.3 步骤解析
  • 4.1.4 并行回放判定一例
  • 4.2 从库MTS多线程并行回放(二)
  • 4.2.1 工作线程执行Event
  • 4.2.2 MTS检查点中的重要概念
  • 4.2.3 MTS中执行检查点的流程
  • 4.2.4 MTS的关键点
  • 4.3 MTS中的“gap”测试和参数lave_preserve_commit_order
  • 4.3.1 MTS中的“gap”测试
  • 4.3.2 参数slave_preserve_commit_order的影响
  • 4.4 从库的I/O线程
  • 4.4.1 引入
  • 4.4.2 I/O线程的启动流程图
  • 4.4.3 流程解析
  • 4.5 从库的SQL线程(MTS协调线程)和参数sql_slave_skip_counter
  • 4.5.1 SQL线程的功能
  • 4.5.2 流程图
  • 4.5.3 重要步骤说明
  • 4.5.4 各个Event做了什么
  • 4.6 从库数据的查找和参数slave_rows_search_algorithms
  • 4.6.1 从一个例子出发
  • 4.6.2 确认查找数据的方式
  • 4.6.3 ROW_LOOKUP_HASH_SCAN方式的数据查找
  • 4.6.4 从库数据查找的要点
  • 4.7 从库的关闭和异常恢复流程
  • 4.7.1 正常的stop slave流程
  • 4.7.2 stop slave为什么会慢
  • 4.7.3 从库启动需要读取的信息
  • 4.7.4 关于repository表的事务性
  • 4.7.5 相关参数
  • 4.7.6 恢复流程
  • 4.8 安全高效的从库设置
  • 4.8.1 从库参数设置建议
  • 4.8.2 单SQL线程模式
  • 4.8.3 MTS
  • 4.8.4 一个非安全设置的例子
  • 4.8.5 参数sync_relay_log的影响
  • 4.9 从库Seconds_Behind_Master的计算方式
  • 4.9.1 Seconds_Behind_Master的计算方式
  • 4.9.2 影响Seconds_Behind_Master的因素
  • 4.9.3 不同操作计算延迟的方式
  • 4.9.4 MTS中Seconds_Behind_Master计算误差测试
  • 4.9.5 手动修改系统时间导致Seconds_Behind_Master为0
  • 4.10 Seconds_Behind_Master延迟场景归纳
  • 4.10.1 延迟场景
  • 4.10.2 相关测试
  • 4.10.3 延迟诊断的方法论
  • 第5章 案例解析
  • 5.1 线程简介和MySQL调试环境搭建
  • 5.1.1 线程简介
  • 5.1.2 PID、LWP ID、Thread TID
  • 5.1.3 MySQL线程和系统LWP ID的关系
  • 5.1.4 调试环境的搭建
  • 5.1.5 调试环境的使用
  • 5.2 MySQL排序详细解析
  • 5.2.1 为什么要讨论排序
  • 5.2.2 从一个问题出发
  • 5.2.3 测试案例
  • 5.2.4 阶段1:确认排序字段及顺序
  • 5.2.5 阶段2:计算sort字段长度
  • 5.2.6 阶段3:计算额外字段的空间
  • 5.2.7 阶段4:确认每行的长度
  • 5.2.8 阶段5:确认最大内存分配
  • 5.2.9 阶段6:读取数据进行内存排序
  • 5.2.10 阶段7:排序方式总结输出
  • 5.2.11 阶段8:进行最终排序
  • 5.2.12 排序的其他问题
  • 5.2.13 使用OPTIMIZER_TRACE查看排序信息
  • 5.2.14 回到问题本身
  • 5.2.15 答疑
  • 5.3 MySQL中的MDL Lock简介
  • 5.3.1 MDL Lock综述
  • 5.3.2 重要数据结构和概念
  • 5.3.3 为MDL Lock增加打印函数
  • 5.3.4 在合适的位置增加打印函数
  • 5.3.5 常见MDL Lock类型的加锁测试
  • 5.4 奇怪的FTWRL堵塞案例
  • 5.4.1 两个不同的现象
  • 5.4.2 sleep 函数生效点
  • 5.4.3 FTWRL做了什么工作
  • 5.4.4 例5-3步骤解析
  • 5.4.5 例5-4步骤解析
  • 5.4.6 FTWRL堵塞和被堵塞的简单总结
  • 5.5 产生大量小relay log故障案例
  • 5.5.1 案例现象
  • 5.5.2 参数slave_net_timeout分析
  • 5.5.3 原因剖析
  • 5.5.4 案例模拟
  • 5.5.5 实现方式
  • 5.6 从库system lock状态原因简析
  • 5.6.1 binary log的写入时间和Event中的时间
  • 5.6.2 问题由来
  • 5.6.3 从库system lock延迟的原因
  • 5.6.4 system lock问题分析
  • 5.6.5 模拟测试
展开全部

评分及书评

评分不足
1个评分

出版方

电子工业出版社

电子工业出版社成立于1982年10月,是国务院独资、工信部直属的中央级科技与教育出版社,是专业的信息技术知识集成和服务提供商。经过三十多年的建设与发展,已成为一家以科技和教育出版、期刊、网络、行业支撑服务、数字出版、软件研发、软科学研究、职业培训和教育为核心业务的现代知识服务集团。出版物内容涵盖了电子信息技术的各个分支及工业技术、经济管理、科普与少儿、社科人文等领域,综合出版能力位居全国出版行业前列。