计算机
类型
可以朗读
语音朗读
211千字
字数
2021-04-01
发行日期
展开全部
主编推荐语
从主库端到从库端,带你深入解析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 模拟测试
展开全部
出版方
电子工业出版社
电子工业出版社成立于1982年10月,是国务院独资、工信部直属的中央级科技与教育出版社,是专业的信息技术知识集成和服务提供商。经过三十多年的建设与发展,已成为一家以科技和教育出版、期刊、网络、行业支撑服务、数字出版、软件研发、软科学研究、职业培训和教育为核心业务的现代知识服务集团。出版物内容涵盖了电子信息技术的各个分支及工业技术、经济管理、科普与少儿、社科人文等领域,综合出版能力位居全国出版行业前列。