Py学习  »  DATABASE

目录升级 | 《深入理解MySQL主从原理32讲》完结篇

老叶茶馆 • 4 年前 • 901 次点击  

导读:

高鹏(网名八怪),《深入理解MySQL主从原理32讲》系列文的作者。本系列通过GTID部分、Event部分、主库部分、从库部分四大块来详细讲解主从原理

点击下图可订阅



《深入理解MySQL主从原理32讲》作者八怪(高鹏),现任易极付高级DBA 从事Oracle/MySQL相关工作10余年,Oracle OCM,有丰富的数据库性能调优,故障诊断经验。
现全部32节系列文章已全部更新完毕,本文补充了该系列的详细目录,并在知数堂进行首发。借此也对本次系列专栏做一次总结。


欢迎大家继续与我进行交流,讨论。技术无边界,学习无止境。



一、目录详情

 


第1节:GTID的基本概念

  • 1.1 GTID的作用
  • 1.2 GTID的基本表示
  • 1.3 server_uuid的生成
  • 1.4 GTID的生成
  • 1.5 GTID_LOG_EVENT和PREVIOUS_GTIDS_LOG_EVENT简介
  • 1.6 gtid_executed表的作用

第2节:mysql.gtid_executed表/gtid_executed变量/gtid_purged变量的更改时机

  • 2.1 mysql.gtid_executed表/gtid_executed变量/gtid_purged变量的作用
  • 2.2 修改时机图解
  • 2.3 主库修改时机
  • 2.4 从库修改时机
  • 2.5 通用修改时机
  • 2.6 通用更改时机源码函数简析

第3节:GTID模块初始化简介和参数binlog_gtid_simple_recovery

  • 3.1 简化的初始化流程图
  • 3.2 步骤解析

第4节:GTID中的运维

  • 4.1 如何跳过一个事务
  • 4.2 mysqldump导出行为的改变
  • 4.3 搭建GTID AUTO_POSITION MODE模式的主从
  • 4.4 主从切换
  • 4.5 gitd_mode参数的含义
  • 4.6.online开启GTID
  • 4.7 offline开启GTID
  • 4.8 开启GTID的注意事项
  • 4.9 ONGOING_ANONYMOUS_TRANSACTION_COUNT统计值的变更时机
  • 4.10 设置MASTER_AUTO_POSITION = 1的影响
  • 4.11 offline开启GTID丢失数据的测试
第5节:Binary log Event 的总体格式
  • 5.1 binary log综述
  • 5.2 Event的总体格式
  • 5.3 Event header和Event footer
  • 5.4 具体解析
  • 5.5 本系列将介绍Event的type code
第6节:⎡重点⎦Event FORMAT_DESCRIPTION_EVENT/PREVIOUS_GTIDS_LOG_EVENT
  • 6.1 FORMAT_DESCRIPTION_EVENT
     6.1.1 FORMAT_DESCRIPTION_EVENT的作用
     6.1.2 源码重要接口
     6.1.3 主体格式
     6.1.4 实例解析
     6.1.5 生成时机
  • 6.2 PREVIOUS_GTIDS_LOG_EVENT
     6.2.1 PREVIOUS_GTIDS_LOG_EVENT的作用
     6.2.2 源码重要接口
     6.2.3 主体格式
     6.2.4 实例解析
     6.2.5 生成时机
第7节:重点⎦Event GTID_LOG_EVENT
  • 7.1 GTID_LOG_EVENT
    7.1.1 GTID_LOG_EVENT的作用
    7.1.2 源码重要接口
    7.1.3 主体格式
    7.1.4 简单解析
    7.1.5 生成时机
    7.1.6 ANONYMOUS_GTID_LOG_EVENT
    7.1.7 GTID 三种模式
第8节:重点⎦Event QUERY_EVENT/MAP_EVENT
  • 8.1 QUERY_EVENT
    8.1.1 QUERY_EVENT的作用
    8.1.2 源码重要接口
    8.1.3 主体格式
    8.1.4 实例解析
    8.1.5 生成时机
  • 8.2 MAP_EVENT
    8.2.1 MAP_EVENT的作用
    8.2.2 源码重要接口
    8.2.3 主体格式
    8.2.4 实例解析
    8.2.5 生成时机
第9节:重点⎦Event WRITE_ROWS_EVENT/DELETE_ROWS_EVENT
  • 9.1 WRITE_ROWS_EVENT
    9.1.1 WRITE_ROWS_EVENT 的作用
    9.1.2 源码重要接口
    9.1.3 主体格式
    9.1.4 实例解析
    9.1.5 生成时机
    9.1.6 修改数据不止一行的情况
    9.1.7 写入binlog cache时机
  • 9.2 DELETE_ROWS_EVENT
    9.2.1 DELETE_ROWS_EVENT 的作用
    9.2.2 源码重要接口
    9.2.3 主体格式
    9.2.4 实例解析
第10节:重点⎦Event UPDATE_ROWS_EVENT/XID_EVENT
  • 10.1 UPDATE_ROWS_EVENT
    10.1.1 UPDATE_ROWS_EVENT 的作用
    10.1.2 源码重要接口
    10.1.3 主体格式
    10.1.4 实例解析
  • 10.2 XID_EVENT
    10.2.1 XID的作用
    10.2.2 XID_EVENT的作用
    10.2.3 源码重要接口
    10.2.4 主体格式
    10.2.5 实例解析
    10.2.6 生成时机
第11节:参数binlog_row_image的影响
  • 11.1 参数影响
  • 11.2 过滤方式
  • 11.3 DML Event中的标识
第12节:巧用Event发现问题
  • 12.1 分析长期未提交的事务
  • 12.2 分析大事务
  • 12.3 分析binary log中Event的生成速度
  • 12.4 分析每个表生成了多少DML Event
  • 12.5 工具展示
第13节:binlog cache简介
  • 13.1 binlog cache总体图解
  • 13.2 使用binlog cache的大概流程
  • 13.3 binlog_cache_size作用及其初始化
  • 13.4 binlog cache临时文件的分配和使用
  • 13.5 参数max_binlog_cache_size的作用
  • 13.6 如何观察到binlog cache临时文件的存在
第14节:事务Event的生成和写入流程
  • 14.1 整体流程图解
  • 14.2 删除阶段
  • 14.3 提交阶段
第15节:MySQL层事务提交流程简析
  • 15.1 参数设置和说明
  • 15.2 总体流程图
  • 15.3 步骤解析第一阶段
  • 15.4 步骤解析第二阶段
  • 15.5 步骤解析第三阶段
  • 15.6 步骤解析第三阶段
  • 15.7 步骤解析第五阶段
  • 15.8 总结
第16节:基于WRITESET的并行复制方式
  • 16.1 奇怪的last commit
  • 16.2 Writeset是什么
  • 16.3 Writeset的生成
  • 16.4 函数add_pke的大概流程
  • 16.5 Writeset设置对last commit的处理方式
  • 16.6 Writeset的历史MAP
  • 16.7 Writeset的并行复制对last commit的处理流程
  • 16.8 WRITESET_SESSION的方式
  • 16.9 关于binlog_transaction_dependency_history_size参数说明
  • 16.10 没有主键的情况
  • 16.11 为什么同一个session执行的事务也能生成同样的last commit
第17节:主库的DUMP线程
  • 17.1 POSITION MODE模式和GTID AUTO_POSITION MODE模式的不同
    17.1.1 POSITION模式
    17.1.2 AUTO_POSITION模式
  • 17.2 流程图
  • 17.3 步骤解析
  • 17.4 总结
第18节:DUMP线程查找和过滤GTID的基本算法
  • 18.1 环境假设
  • 18.2 检查从库的GTID是否大于主库的GTID
  • 18.3 根据GTID检查从库需要的binary log是否已经被清理
  • 18.4 实际扫描主库的binary log,检查从库需要的binary log是否已经被清理
  • 18.5 进行GTID的过滤,决定发送哪些事务给从库
第19节:从库MTS多线程并行回放(一)
  • 19.1 综述
  • 19.2 协调线程的分发机制图解
  • 19.3 步骤解析
  • 19.4 并行回放判定的例子
第20节:从库MTS多线程并行回放(二)
  • 20.1 工作线程执行Event
  • 20.2 MTS中检查点中的重要概念
  • 20.3 MTS中的检查点的流程图解
  • 20.4 总结
第21节:MTS中GAP测试和参数slave_preserve_commit_order
  • 21.1 MTS中GAP测试
  • 21.2 参数slave_preserve_commit_order的影响
第22节:从库的IO线程
  • 22.1 IO线程的启动流程图
  • 22.2 流程解析
第23节:从库的SQL线程(MTS协调线程)和参数sql_slave_skip_counter
  • 23.1 流程图
  • 23.2 重要步骤说明
  • 23.3 各个Event大概做了什么
    23.3.1 GTID_EVENT
    23.3.2 QUERY_EVENT
    23.3.3 MAP_EVENT
    23.3.4 DELETE_EVENT
    23.3.5 XID_EVENT
第24节:从库数据的查找和参数slave_rows_search_algorithms
  • 24.1 从一个例子出发
    24.1.1 从库普通索引的扫描方式
    24.1.2 从库主键唯一键的扫描方式
    24.1.3 从库没有索引的扫描方式
  • 24.2 确认查找数据的方式(图解)
  • 24.3 ROW_LOOKUP_HASH_SCAN方式的数据查找
  • 24.4 slave_rows_search_algorithms参数总结
第25节:从库的关闭和恢复流程
  • 25.1 正常的STOP SLAVE流程
  • 25.2 STOP SLAVE为什么会慢
  • 25.3 从库启动需要读取的信息
  • 25.4 关于repository表的事务性
  • 25.5 相关参数
  • 25.6 恢复流程图解
第26节:合理的从库设置
  • 26.1 合理设置图解
  • 26.2 单SQL线程
    26.2.1 POSITION MODE模式
    26.2.2 GTID AUTO_POSITION MODE模式
  • 26.3 MTS
    26.3.1 POSITION MODE模式
    26.3.2 GTID AUTO_POSITION MODE模式
  • 26.4 一个非安全设置导致问题的例子
  • 26.5 总结
第27节:从库Seconds_Behind_Master的计算方式
  • 27.1 Seconds_Behind_Master计算的方式
  • 27.2 影响Seconds_Behind_Master计算的因素
  • 27.3 Seconds_Behind_Master计算方式总结
  • 27.4 MTS中Seconds_Behind_Master计算误差的测试
  • 27.5 手动修改从库系统时间,导致Seconds_Behind_Master为0
第28节:从库Seconds_Behind_Master延迟总结
  • 28.1 延迟情况总结
    28.1.1 第一类
    28.1.2 第二类
  • 28.2 相关测试
    28.2.1 Innodb层的行锁造成的延迟
    28.2.2 MySQL层的MDL LOCK造成的延迟
  • 28.3 总结
第29节:线程简介和MySQL调试环境搭建
  • 29.1 线程简介
  • 29.2 PID、LWP ID、Thread TID
  • 29.3 如何将MySQL的线程和LWP ID进行对应
  • 29.4 调试环境搭建
  • 29.5 使用调试环境证明问题的一个例子
第30节:死锁漫谈
本节由杨奇龙编写
  • 30.1 前言
  • 30.2 死锁
  • 30.3 MySQL的处理死锁机制
    30.3.1 死锁检测
    30.3.2 如何处理死锁
  • 30.4 Innodb 的锁类型
  • 30.5 锁信息解析
  • 30.6 Innodb 不同事务加锁类型
  • 30.7 如何查看死锁
  • 30.8 如何尽可能避免死锁
第31节:Innodb Buffer Pool的三种Page和链表
本节由王航威编写
  • 31.1 Innodb Buffer Pool 简介
  • 31.2 三种Page
    31.2.1 Free Page
    31.2.2 Clean Page
    31.2.3 Dirty Page
  • 31.3 三种链表
    31.3.1 LRU 链表
    31.3.2 Flush 链表
    31.3.3 Free 链表
  • 31.4 LRU 链表和Flush链表的区别
  • 31.5 触发刷脏页的条件
  • 31.6 总结
第32节:利用performance_schema获取造成死锁的语句
本节由田兴椿编写
  • 32.1 开启相关统计的方法
  • 32.2 根据死锁信息来获取造成死锁的语句
  • 32.3 总结



二、节选章节

以下为节选的6篇文章,想了解更多的内容可以订阅《深入理解MySQL主从原理32讲》专栏


《深入理解MySQL主从原理32讲》推荐篇
第15节、MySQL层事务提交流程简析
第16节、基于WRITESET的并行复制方式
第24节、从库数据查找和参数slave_rows_search_algorithms
第28节、从库Seconds_Behind_Master延迟总结
第29节、线程简介和MySQL调试环境搭建

写在最后,再次感谢翟卫祥、叶金荣、吴炳锡、李真旭、杨奇龙百忙之中为本系列作推荐序,特别感谢叶金荣为本系列校稿。


识别下方二维码添加作者为好友

END



点击下图小程序订阅

《深入理解MySQL主从原理32讲》专栏

可了解更多八怪技术文章








扫码加入MySQL技术Q群

(群号:793818397)

   




Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/49378
 
901 次点击