MySQL应用架构的演变过程
- 单机单库 : 储只需要一个MySQL Instance 就能满足数据读取和写入需求
- 主从架构 : 主库抗写压力,通过从库来分担读压力
- 分库分表 : 垂直拆分每一个实例都是拥有全部数据的,水平拆分任何实例都只有全量的1/n的数据
- 云数据库 : 服务提供商负责解决可配置性,可扩展性,多用户存储结构设计等这些疑难问题
MySql 体系架构
网络连接层 :负责处理客户端的连接请求,与客户端创建连接。
服务层 : Connection Pool、Service & utilities、SQL interface、Parser解析器、Optimizer 查询优化器、Caches 缓存等模块
存储引擎层 :
MyISAM、InnoDB,以及支持归档的Archive和内存的Memory等. 正确定义与MySQL Server交互的接口,任何引擎都可以访问MySQL系统文件层 : 文件的物理存储层,包括二进制日志、数据文件、错误日志、慢查询日志、全日志、redo/undo 日志等.

- 查询缓存:Server 如果在查询缓存中发现了这条 SQL 语句,就会直接将结果返回给客户端;如果没有,就进入到解析器阶段。 MySQL8.0 之后就抛弃了这个功能。
- 解析器:在解析器中对 SQL 语句进行语法分析、语义分析。
- 优化器:在优化器中会确定 SQL 语句的执行路径,比如是根据全表检索,还是根据索引来检索等。
- 执行器:在执行之前需要判断该用户是否具备权限,如果具备权限就执行 SQL 查询并返回结果。在 MySQL8.0 以下的版本,如果设置了查询缓存,这时会将查询结果进行缓存。
部分文件
- 错误日志
show variables like '%log_error%'; - 通用查询日志
show variables like '%general%'; - 慢查询日志
show variables like '%slow_query%'; - 慢查询时长
show variables like '%long_query_time%'; - 设置慢查询
set long_query_time=5; - 配置文件路径
show variables like '%datadir%';
db.opt 文件:记录这个库的默认使用的字符集和校验规则。
frm 文件:存储与表相关的元数据(meta)信息,包括表结构的定义信息等,每一张表都会有一个frm 文件。
配置文件(my.conf,my.ini等),
pid 文件 (存放进程 id),
socket 文件 (可以不通过 TCP/IP 网络,而直接使用 unix socket 来连接 MySql)
日志系统 示例
undo log :
ibdata1(共享表空间),ibd(独享表空间)redo log :
ib_logfile0、ib_logfile1bin log :
Redo Log是属于InnoDB引擎功能,Binlog是属于MySQL Server自带功能,并且是以二进制文件记录。Redo Log属于物理日志,记录该数据页更新状态内容,Binlog是逻辑日志,记录更新过程。Redo Log日志是循环写,日志空间大小是固定,Binlog是追加写入,写完一个写下一个,不会覆盖使用。Redo Log作为服务器异常宕机后事务数据自动恢复使用,Binlog可以作为主从复制和数据恢复使用。Binlog没有自动crash-safe能力。