mysql基础原理

MySQL应用架构的演变过程

  1. 单机单库 : 储只需要一个MySQL Instance 就能满足数据读取和写入需求
  2. 主从架构 : 主库抗写压力,通过从库来分担读压力
  3. 分库分表 : 垂直拆分每一个实例都是拥有全部数据的,水平拆分任何实例都只有全量的1/n的数据
  4. 云数据库 : 服务提供商负责解决可配置性,可扩展性,多用户存储结构设计等这些疑难问题

MySql 体系架构

  1. 网络连接层 :负责处理客户端的连接请求,与客户端创建连接。

  2. 服务层 : Connection Pool、Service & utilities、SQL interface、Parser解析器、Optimizer 查询优化器、Caches 缓存等模块

  3. 存储引擎层 : MyISAMInnoDB,以及支持归档的 Archive 和内存的 Memory等. 正确定义与 MySQL Server 交互的接口,任何引擎都可以访问MySQL

  4. 系统文件层 : 文件的物理存储层,包括二进制日志、数据文件、错误日志、慢查询日志、全日志、redo/undo 日志等.

  1. 查询缓存:Server 如果在查询缓存中发现了这条 SQL 语句,就会直接将结果返回给客户端;如果没有,就进入到解析器阶段。 MySQL8.0 之后就抛弃了这个功能。
  2. 解析器:在解析器中对 SQL 语句进行语法分析、语义分析。
  3. 优化器:在优化器中会确定 SQL 语句的执行路径,比如是根据全表检索,还是根据索引来检索等。
  4. 执行器:在执行之前需要判断该用户是否具备权限,如果具备权限就执行 SQL 查询并返回结果。在 MySQL8.0 以下的版本,如果设置了查询缓存,这时会将查询结果进行缓存。

部分文件

  1. 错误日志 show variables like '%log_error%';
  2. 通用查询日志 show variables like '%general%';
  3. 慢查询日志 show variables like '%slow_query%';
  4. 慢查询时长 show variables like '%long_query_time%';
  5. 设置慢查询 set long_query_time=5;
  6. 配置文件路径 show variables like '%datadir%';

db.opt 文件:记录这个库的默认使用的字符集和校验规则。
frm 文件:存储与表相关的元数据(meta)信息,包括表结构的定义信息等,每一张表都会有一个frm 文件。

配置文件(my.conf,my.ini等),

pid 文件 (存放进程 id),

socket 文件 (可以不通过 TCP/IP 网络,而直接使用 unix socket 来连接 MySql)

日志系统 示例

  1. undo log : ibdata1(共享表空间), ibd(独享表空间)

  2. redo log : ib_logfile0、ib_logfile1

  3. bin log :

  1. Redo Log 是属于 InnoDB 引擎功能,Binlog 是属于 MySQL Server 自带功能,并且是以二进制文件记录。
  2. Redo Log 属于物理日志,记录该数据页更新状态内容,Binlog 是逻辑日志,记录更新过程。
  3. Redo Log 日志是循环写,日志空间大小是固定,Binlog 是追加写入,写完一个写下一个,不会覆盖使用。
  4. Redo Log 作为服务器异常宕机后事务数据自动恢复使用,Binlog 可以作为主从复制和数据恢复使用。Binlog 没有自动 crash-safe 能力。