封面
版权信息
作者简介
内容简介
专家赞誉
前言
读者服务
第1章 GTID
1.1 GTID的基本概念
1.1.1 GTID的作用
1.1.2 GTID的基本表示
1.1.3 server_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发现问题
- APP免费
2.8.1 工具简介
- APP免费
2.8.2 分析长期未提交的事务
- APP免费
2.8.3 分析大事务
- APP免费
2.8.4 分析binary log中Event的生成速度
- APP免费
2.8.5 分析每个表生成了多少个DML Event
- APP免费
2.8.6 工具展示
- APP免费
第3章 主库
- APP免费
3.1 binlog cache简介
- APP免费
3.1.1 binlog cache综述
- APP免费
3.1.2 使用binlog cache的流程
- APP免费
3.1.3 参数binlog_cache_size的作用及其初始化
- APP免费
3.1.4 临时文件的分配和使用
- APP免费
3.1.5 参数max_binlog_cache_size的作用
- APP免费
3.1.6 如何观察到临时文件
- APP免费
3.2 事务Event的生成和写入流程
- APP免费
3.2.1 流程综述
- APP免费
3.2.2 删除阶段流程
- APP免费
3.2.3 提交阶段流程
- APP免费
3.2.4 两个注意点
- APP免费
3.3 MySQL层事务提交流程简析
- APP免费
3.3.1 参数设置
- APP免费
3.3.2 总体流程图
- APP免费
3.3.3 步骤解析第一阶段
- APP免费
3.3.4 步骤解析第二阶段(FLUSH阶段)
- APP免费
3.3.5 步骤解析第三阶段(SYNC阶段)
- APP免费
3.3.6 步骤解析第四阶段(COMMIT阶段)
- APP免费
3.3.7 步骤解析第五阶段
- APP免费
3.3.8 提交阶段的注意点
- APP免费
3.4 基于WRITESET的并行复制方式
- APP免费
3.4.1 奇怪的last commit
- APP免费
3.4.2 WRITESET是什么
- APP免费
3.4.3 WRITESET的生成
- APP免费
3.4.4 add_pke函数的流程
- APP免费
3.4.5 WRITESET设置对last commit的处理方式
- APP免费
3.4.6 WRITESET的历史MAP
- APP免费
3.4.7 WRITESET的并行复制对last commit的处理流程
- APP免费
3.4.8 WRITESET_SESSION的方式
- APP免费
3.4.9 关于参数binlog_transaction_dependency_history_size的说明
- APP免费
3.4.10 没有主键的情况
- APP免费
3.4.11 为什么同一个session执行的事务能生成同样的last commit
- APP免费
3.4.12 WRITESET并行复制方式的优缺点
- APP免费
3.5 主库的DUMP线程
- APP免费
3.5.1 POSITION MODE和GTID AUTO_POSITION MODE的不同点
- APP免费
3.5.2 流程图
- APP免费
3.5.3 步骤解析
- APP免费
3.5.4 重点说明
- APP免费
3.6 DUMP线程查找和过滤GTID的基本算法
- APP免费
3.6.1 环境假设
- APP免费
3.6.2 检查从库的GTID是否大于主库的GTID
- APP免费
3.6.3 检查需要的binary log是否已经清理
- APP免费
3.6.4 实际扫描binary log
- APP免费
3.6.5 GTID过滤
- APP免费
第4章 从库
- APP免费
4.1 从库MTS多线程并行回放(一)
- APP免费
4.1.1 MTS综述
- APP免费
4.1.2 协调线程的分发机制
- APP免费
4.1.3 步骤解析
- APP免费
4.1.4 并行回放判定一例
- APP免费
4.2 从库MTS多线程并行回放(二)
- APP免费
4.2.1 工作线程执行Event
- APP免费
4.2.2 MTS检查点中的重要概念
- APP免费
4.2.3 MTS中执行检查点的流程
- APP免费
4.2.4 MTS的关键点
- APP免费
4.3 MTS中的“gap”测试和参数lave_preserve_commit_order
- APP免费
4.3.1 MTS中的“gap”测试
- APP免费
4.3.2 参数slave_preserve_commit_order的影响
- APP免费
4.4 从库的I/O线程
- APP免费
4.4.1 引入
- APP免费
4.4.2 I/O线程的启动流程图
- APP免费
4.4.3 流程解析
- APP免费
4.5 从库的SQL线程(MTS协调线程)和参数sql_slave_skip_counter
- APP免费
4.5.1 SQL线程的功能
- APP免费
4.5.2 流程图
- APP免费
4.5.3 重要步骤说明
- APP免费
4.5.4 各个Event做了什么
- APP免费
4.6 从库数据的查找和参数slave_rows_search_algorithms
- APP免费
4.6.1 从一个例子出发
- APP免费
4.6.2 确认查找数据的方式
- APP免费
4.6.3 ROW_LOOKUP_HASH_SCAN方式的数据查找
- APP免费
4.6.4 从库数据查找的要点
- APP免费
4.7 从库的关闭和异常恢复流程
- APP免费
4.7.1 正常的stop slave流程
- APP免费
4.7.2 stop slave为什么会慢
- APP免费
4.7.3 从库启动需要读取的信息
- APP免费
4.7.4 关于repository表的事务性
- APP免费
4.7.5 相关参数
- APP免费
4.7.6 恢复流程
- APP免费
4.8 安全高效的从库设置
- APP免费
4.8.1 从库参数设置建议
- APP免费
4.8.2 单SQL线程模式
- APP免费
4.8.3 MTS
- APP免费
4.8.4 一个非安全设置的例子
- APP免费
4.8.5 参数sync_relay_log的影响
- APP免费
4.9 从库Seconds_Behind_Master的计算方式
- APP免费
4.9.1 Seconds_Behind_Master的计算方式
- APP免费
4.9.2 影响Seconds_Behind_Master的因素
- APP免费
4.9.3 不同操作计算延迟的方式
- APP免费
4.9.4 MTS中Seconds_Behind_Master计算误差测试
- APP免费
4.9.5 手动修改系统时间导致Seconds_Behind_Master为0
- APP免费
4.10 Seconds_Behind_Master延迟场景归纳
- APP免费
4.10.1 延迟场景
- APP免费
4.10.2 相关测试
- APP免费
4.10.3 延迟诊断的方法论
- APP免费
第5章 案例解析
- APP免费
5.1 线程简介和MySQL调试环境搭建
- APP免费
5.1.1 线程简介
- APP免费
5.1.2 PID、LWP ID、Thread TID
- APP免费
5.1.3 MySQL线程和系统LWP ID的关系
- APP免费
5.1.4 调试环境的搭建
- APP免费
5.1.5 调试环境的使用
- APP免费
5.2 MySQL排序详细解析
- APP免费
5.2.1 为什么要讨论排序
- APP免费
5.2.2 从一个问题出发
- APP免费
5.2.3 测试案例
- APP免费
5.2.4 阶段1:确认排序字段及顺序
- APP免费
5.2.5 阶段2:计算sort字段长度
- APP免费
5.2.6 阶段3:计算额外字段的空间
- APP免费
5.2.7 阶段4:确认每行的长度
- APP免费
5.2.8 阶段5:确认最大内存分配
- APP免费
5.2.9 阶段6:读取数据进行内存排序
- APP免费
5.2.10 阶段7:排序方式总结输出
- APP免费
5.2.11 阶段8:进行最终排序
- APP免费
5.2.12 排序的其他问题
- APP免费
5.2.13 使用OPTIMIZER_TRACE查看排序信息
- APP免费
5.2.14 回到问题本身
- APP免费
5.2.15 答疑
- APP免费
5.3 MySQL中的MDL Lock简介
- APP免费
5.3.1 MDL Lock综述
- APP免费
5.3.2 重要数据结构和概念
- APP免费
5.3.3 为MDL Lock增加打印函数
- APP免费
5.3.4 在合适的位置增加打印函数
- APP免费
5.3.5 常见MDL Lock类型的加锁测试
- APP免费
5.4 奇怪的FTWRL堵塞案例
- APP免费
5.4.1 两个不同的现象
- APP免费
5.4.2 sleep 函数生效点
- APP免费
5.4.3 FTWRL做了什么工作
- APP免费
5.4.4 例5-3步骤解析
- APP免费
5.4.5 例5-4步骤解析
- APP免费
5.4.6 FTWRL堵塞和被堵塞的简单总结
- APP免费
5.5 产生大量小relay log故障案例
- APP免费
5.5.1 案例现象
- APP免费
5.5.2 参数slave_net_timeout分析
- APP免费
5.5.3 原因剖析
- APP免费
5.5.4 案例模拟
- APP免费
5.5.5 实现方式
- APP免费
5.6 从库system lock状态原因简析
- APP免费
5.6.1 binary log的写入时间和Event中的时间
- APP免费
5.6.2 问题由来
- APP免费
5.6.3 从库system lock延迟的原因
- APP免费
5.6.4 system lock问题分析
- APP免费
5.6.5 模拟测试
- APP免费
封底
更新时间:2021-04-16 16:30:21