书籍详情
《深入理解MySQL主从原理》[45M]百度网盘|亲测有效|pdf下载
  • 深入理解MySQL主从原理

  • 出版社:木垛图书旗舰店
  • 出版时间:2021-03
  • 热度:4627
  • 上架时间:2024-06-30 09:08:33
  • 价格:0.0
书籍下载
书籍预览
免责声明

本站支持尊重有效期内的版权/著作权,所有的资源均来自于互联网网友分享或网盘资源,一旦发现资源涉及侵权,将立即删除。希望所有用户一同监督并反馈问题,如有侵权请联系站长或发送邮件到ebook666@outlook.com,本站将立马改正

内容介绍

基本信息

  • 商品名称:深入理解MySQL主从原理
  • 作者:高鹏
  • 定价:89
  • 出版社:电子工业
  • 书号:9787121406584

其他参考信息(以实物为准)

  • 出版时间:2021-03-01
  • 印刷时间:2021-03-01
  • 版次:1
  • 印次:1
  • 开本:
  • 页数:

内容提要

在超大规模流量的分布式系统环境下,无论是从系统性能的角度,还是从数据安全性的角度,掌握MySQL主从原理,都是当下技术人员的 基本功。MySQL主从原理是高可用架构的基石,即便是MGR这种集群架构也可以看到主从的影子。要解决一个问题或者故障, 快的方式就是了解它的原理,快速定位问题。本书从源码层面抽丝剥茧般地描述MySQL主从原理,全面地介绍了GTID相关的知识点,并解析了主要Event的生成、作用和格式,以及线程的初步知识、MDL LOCK、排序等热门话题和主从相关的案例。无论是MySQL DBA和MySQL源码爱好者,还是刚进入数据库行业的小白读者,通过阅读本书,都能通过源码级分析, 好地理解和使用MySQL主从复制技术。

作者简介

高鹏(网名八怪),现任中亦安图科技有限公司数据库专家,2008年开始从事Oracle/MySQL相关工作,Oracle OCM、MySQL源码爱好者,知数堂8期学员。有丰富的数据库性能调优、故障诊断经验。

目录

第1章 GTID1
1.1 GTID的基本概念1
1.1.1 GTID的作用1
1.1.2 GTID的基本表示1
1.1.3 server_uuid的生成2
1.1.4 GTID的生成2
1.1.5 GTID_EVENT和PREVIOUS_GTIDS_LOG_EVENT简介3
1.1.6 gtid_executed表的作用4
1.2 mysql.gtid_executed表、gtid_executed变量、gtid_purged变量的修改时机5
1.2.1 定义5
1.2.2 主库修改时机7
1.2.3 从库修改时机8
1.2.4 通用修改时机10
1.2.5 通用修改时机源码函数简析10
1.3 GTID模块初始化简介和参数binlog_gtid_simple_recovery11
1.3.1 GTID模块初始化流程图12
1.3.2 步骤解析13
1.4 GTID中的运维16
1.4.1 跳过一个事务17
1.4.2 mysqldump导出行为的改变17
1.4.3 搭建GTID AUTO_POSITION MODE的主从18
1.4.4 主从切换20
1.4.5 参数gitd_mode的含义21
1.4.6 在线开启GTID21
1.4.7 离线开启GTID22
1.4.8 开启GTID的注意事项23
1.4.9 统计值ONGOING_ANONYMOUS_TRANSACTION_COUNT的变 时机23
1.4.10 设置MASTER_AUTO_POSITION = 1的影响25
1.4.11 离线开启GTID丢失数据的测试25
第2章 Event28
2.1 binary log Event 的总体格式28
2.1.1 引言28
2.1.2 binary log综述28
2.1.3 Event的总体格式29
2.1.4 Event header和Event footer29
2.1.5 具体解析30
2.1.6 本书涉及的Event类型31
2.2 重点Event之FORMAT_DESCRIPTION_EVENT和
PREVIOUS_GTIDS_LOG_EVENT32
2.2.1 FORMAT_DESCRIPTION_EVENT32
2.2.2 PREVIOUS_GTIDS_LOG_EVENT35
2.3 重点Event之GTID_EVENT39
2.3.1 GTID_EVENT的作用39
2.3.2 源码重要接口40
2.3.3 主体格式40
2.3.4 简单解析41
2.3.5 生成时机41
2.3.6 ANONYMOUS_GTID_EVENT41
2.3.7 GTID的三种模式42
2.4 重点Event之QUERY_EVENT和MAP_EVENT43
2.4.1 QUERY_EVENT43
2.4.2 MAP_EVENT46
2.5 重点Event之WRITE_EVENT和DELETE_EVENT51
2.5.1 WRITE_EVENT51
2.5.2 DELETE_EVENT57
2.6 重点Event之UPDATE_EVENT和XID_EVENT61
2.6.1 UPDATE_ROWS_EVENT61
2.6.2 XID_EVENT66
2.7 参数binlog_row_image的影响68
2.7.1 参数影响68
2.7.2 过滤方式70
2.7.3 DML Event中的标识70
2.8 巧用Event发现问题73
2.8.1 工具简介73
2.8.2 分析长期未提交的事务74
2.8.3 分析大事务75
2.8.4 分析binary log中Event的生成速度75
2.8.5 分析每个表生成了多少个DML Event75
2.8.6 工具展示75
第3章 主库79
3.1 binlog cache简介79
3.1.1 binlog cache综述79
3.1.2 使用binlog cache的流程80
3.1.3 参数binlog_cache_size的作用及其初始化80
3.1.4 临时文件的分配和使用81
3.1.5 参数max_binlog_cache_size的作用82
3.1.6 如何观察到临时文件82
3.2 事务Event的生成和写入流程83
3.2.1 流程综述83
3.2.2 删除阶段流程85
3.2.3 提交阶段流程85
3.2.4 两个注意点86
3.3 MySQL层事务提交流程简析86
3.3.1 参数设置86
3.3.2 总体流程图87
3.3.3 步骤解析 阶段90
3.3.4 步骤解析第二阶段(FLUSH阶段)90
3.3.5 步骤解析第三阶段(SYNC阶段)92
3.3.6 步骤解析第四阶段(COMMIT阶段)93
3.3.7 步骤解析第五阶段94
3.3.8 提交阶段的注意点95
3.4 基于WRITESET的并行复制方式95
3.4.1 奇怪的last commit96
3.4.2 WRITESET是什么96
3.4.3 WRITESET的生成97
3.4.4 add_pke函数的流程98
3.4.5 WRITESET设置对last commit的处理方式99
3.4.6 WRITESET的历史MAP100
3.4.7 WRITESET的并行复制对last commit的处理流程100
3.4.8 WRITESET_SESSION的方式104
3.4.9 关于参数binlog_transaction_dependency_history_size的说明104
3.4.10 没有主键的情况104
3.4.11 为什么同一个session执行的事务能生成同样的last commit105
3.4.12 WRITESET并行复制方式的优缺点105
3.5 主库的DUMP线程106
3.5.1 POSITION MODE和GTID AUTO_POSITION MODE的不同点106
3.5.2 流程图108
3.5.3 步骤解析109
3.5.4 重点说明112
3.6 DUMP线程查找和过滤GTID的基本算法113
3.6.1 环境假设113
3.6.2 检查从库的GTID是否大于主库的GTID114
3.6.3 检查需要的binary log是否已经清理114
3.6.4 实际扫描binary log115
3.6.5 GTID过滤115
第4章 从库117
4.1 从库MTS多线程并行回放(一)117
4.1.1 MTS综述117
4.1.2 协调线程的分发机制118
4.1.3 步骤解析120
4.1.4 并行回放判定一例124
4.2 从库MTS多线程并行回放(二)126
4.2.1 工作线程执行Event126
4.2.2 MTS检查点中的重要概念127
4.2.3 MTS中执行检查点的流程132
4.2.4 MTS的关键点136
4.3 MTS中的“gap”测试和参数lave_preserve_commit_ order136
4.3.1 MTS中的“gap”测试136
4.3.2 参数slave_preserve_commit_order的影响138
4.4 从库的I/O线程139
4.4.1 引入139
4.4.2 I/O线程的启动流程图140
4.4.3 流程解析142
4.5 从库的SQL线程(MTS协调线程)和参数sql_slave_skip_counter146
4.5.1 SQL线程的功能146
4.5.2 流程图146
4.5.3 重要步骤说明148
4.5.4 各个Event做了什么151
4.6 从库数据的查找和参数slave_rows_search_algorithms153
4.6.1 从一个例子出发153
4.6.2 确认查找数据的方式156
4.6.3 ROW_LOOKUP_HASH_SCAN方式的数据查找159
4.6.4 从库数据查找的要点161
4.7 从库的关闭和异常恢复流程162
4.7.1 正常的stop slave流程162
4.7.2 stop slave为什么会慢163
4.7.3 从库启动需要读取的信息164
4.7.4 关于repository表的事务性165
4.7.5 相关参数166
4.7.6 恢复流程167
4.8 安全高效的从库设置170
4.8.1 从库参数设置建议170
4.8.2 单SQL线程模式171
4.8.3 MTS174
4.8.4 一个非安全设置的例子176
4.8.5 参数sync_relay_log的影响177
4.9 从库Seconds_Behind_Master的计算方式177
4.9.1 Seconds_Behind_Master的计算方式178
4.9.2 影响Seconds_Behind_Master的因素178
4.9.3 不同操作计算延迟的方式181
4.9.4 MTS中Seconds_Behind_Master计算误差测试181
4.9.5 手动修改系统时间导致Seconds_Behind_Master为0183
4.10 Seconds_Behind_Master延迟场景归纳185
4.10.1 延迟场景185
4.10.2 相关测试186
4.10.3 延迟诊断的方法论189
第5章 案例解析190
5.1 线程简介和MySQL调试环境搭建190
5.1.1 线程简介190
5.1.2 PID、LWP ID、Thread TID192
5.1.3 MySQL线程和系统LWP ID的关系193
5.1.4 调试环境的搭建194
5.1.5 调试环境的使用197
5.2 MySQL排序详细解析198
5.2.1 为什么要讨论排序198
5.2.2 从一个问题出发199
5.2.3 测试案例200
5.2.4 阶段1:确认排序字段及顺序202
5.2.5 阶段2:计算sort字段长度202
5.2.6 阶段3:计算额外字段的空间203
5.2.7 阶段4:确认每行的长度205
5.2.8 阶段5:确认 大内存分配206
5.2.9 阶段6:读取数据进行内存排序207
5.2.10 阶段7:排序方式总结输出210
5.2.11 阶段8:进行 终排序211
5.2.12 排序的其他问题212
5.2.13 使用OPTIMIZER_TRACE查看排序信息214
5.2.14 回到问题本身215
5.2.15 答疑217
5.3 MySQL中的MDL Lock简介219
5.3.1 MDL Lock综述219
5.3.2 重要数据结构和概念220
5.3.3 为MDL Lock增加打印函数225
5.3.4 在合适的位置增加打印函数227
5.3.5 常见MDL Lock类型的加锁测试229
5.4 奇怪的FTWRL堵塞案例237
5.4.1 两个不同的现象237
5.4.2 sleep 函数生效点239
5.4.3 FTWRL做了什么工作240
5.4.4 例5-3步骤解析242
5.4.5 例5-4步骤解析243
5.4.6 FTWRL堵塞和被堵塞的简单总结244
5.5 产生大量小relay log故障案例245
5.5.1 案例现象245
5.5.2 参数slave_net_timeout分析245
5.5.3 原因剖析246
5.5.4 案例模拟246
5.5.5 实现方式248
5.6 从库system lock原因简析250
5.6.1 binary log的写入时间和Event中的时间250
5.6.2 问题由来251
5.6.3 从库system lock延迟的原因251
5.6.4 system lock问题分析252
5.6.5 模拟测试253