前言
整理了一些MySQL数据库相关流程图/原理图 , 做一下笔记 , 大家一起学习 。
1.mysql主从复制原理图
mysql主从复制原理是大厂后端的高频面试题 , 了解mysql主从复制原理非常有必要 。
主从复制原理 , 简言之 , 就三步曲 , 如下:
- 主数据库有个bin-log二进制文件 , 纪录了所有增删改Sql语句 。(binlog线程)
- 从数据库把主数据库的bin-log文件的sql语句复制过来 。(io线程)
- 从数据库的relay-log重做日志文件中再执行一次这些sql语句 。(Sql执行线程)
文章插图
上图主从复制分了五个步骤进行:
步骤一:主库的更新事件(update、insert、delete)被写到binlog
步骤二:从库发起连接 , 连接到主库 。
步骤三:此时主库创建一个binlog dump thread , 把binlog的内容发送到从库 。
步骤四:从库启动之后 , 创建一个I/O线程 , 读取主库传过来的binlog内容并写入到relay log
步骤五:还会创建一个SQL线程 , 从relay log里面读取内容 , 从Exec_Master_Log_Pos位置开始执行读取到的更新事件 , 将更新内容写入到slave的db
2.Mysql逻辑架构图
如果能在脑海中构建出MySql各组件之间如何协同工作的架构图 , 就会有助于深入理解MySql服务器
文章插图
Mysql逻辑架构图主要分三层:
1) 第一层负责连接处理 , 授权认证 , 安全等等
- 每个客户端连接都会在服务器进程中拥有一个线程 , 服务器维护了一个线程池 , 因此不需要为每一个新建的连接创建或者销毁线程 。
- 当客户端连接到Mysql服务器时 , 服务器对其进行认证 , 通过用户名和密码认证 , 也可以通过SSL证书进行认证 。
- 一旦客户端连接成功 , 服务器会继续验证客户端是否具有执行某个特定查询的权限 。
- 这一层包括查询解析 , 分析 , 优化 , 缓存以及所有的的内置函数 。
- 对于SELECT语句 , 在解析查询前 , 服务器会先检查查询缓存 , 如果能在其中找到对应的查询结果 , 则无需再进行查询解析、优化等过程 , 直接返回查询结果 。
- 所有跨存储引擎的功能都在这一层实现:存储过程 , 触发器 , 视图 。
- 存储引擎负责在MySQL中存储数据、提取数据 。
- 存储引擎通过API与上层进行通信 , 这些API屏蔽了不同存储引擎之间的差异 , 使得这些差异对上层查询过程透明 。
- 存储引擎不会去解析SQL , 不同存储引擎之间也不会相互通信 , 而只是简单地响应上层服务器的请求 。
从InnoDb 存储引擎的逻辑存储结构看 , 所有数据都被逻辑地存放在一个空间中 , 称之为表空间(tablespace) 。表空间又由段(segment) , 区(extent) , 页(page)组成 。页在一些文档中有时候也称为块(block) 。InnoDb 逻辑存储结构图如下:
文章插图
表空间(tablespace)
- 表空间是Innodb存储引擎逻辑的最高层 , 所有的数据都存放在表空间中 。
- 默认情况下 , Innodb存储引擎有一个共享表空间ibdata1,即所有数据都存放在这个表空间中内 。
- 如果启用了innodb_file_per_table参数 , 需要注意的是每张表的表空间内存放的只是数据、索引、和插入缓冲Bitmap , 其他类的数据 , 比如回滚(undo)信息、插入缓冲检索页、系统事物信息 , 二次写缓冲等还是放在原来的共享表内的 。
- 表空间由段组成 , 常见的段有数据段、索引段、回滚段等 。
- InnoDB存储引擎表是索引组织的 , 因此数据即索引 , 索引即数据 。数据段即为B+树的叶子结点 , 索引段即为B+树的非索引结点 。
- 在InnoDB存储引擎中对段的管理都是由引擎自身所完成 , DBA不能也没必要对其进行控制 。
推荐阅读
- mysql更新一条数据很慢,怎么办?
- 彩瓷茶具的相关信息
- MySQL 读写分离环境搭建
- 宋茶的相关器具
- 非常经典的用于WEB浏览器的相关黑客工具
- 数据库主机及数据库日志收集
- 与利润相关的计算公式 净利润计算公式
- mysql和postgresql时间戳设置
- 21分钟 MySQL 入门教程
- 听说过时序数据库吗?