mysql是目前各大公司通用的数据库。无论在工作时还是在面试,都会接触到MySQL涉及到的相关问题。
优势:
- 免费
- 体积小,速度快
- 简单易用,维护成本低
- 兼容性好,支持多种操作系统
- 支持多种开发语言
- 易扩展、集群、高可用
- 支持事务、MVCC、4种隔离级别等
当然,在我们使用mysql时,会遇到各种问题:死锁、延迟、字符集错误、慢查询等等。所以,需要深入学习其原理才能快速定位问题,解决问题。
体系结构
MySQL的体系结构图
MySQL体系结构由4部分组成
Client Connectors层
作用:负责处理客户端的连接请求,与客户端创建连接。
几乎支持所有的服务端的语言
MySQL Server层
连接池Connection Pool
- 负责处理和存储数据库与客户端的连接(一个线程管理一个连接)
- 其中含有用户认证模块(用户身份验证和鉴权及安全管理)
系统管理和工具集Services & Utilities
- 提供备份恢复、安全管理、集群管理服务和工具
SQL接口 SQL Interface
- 负责接收客户端发送的各种SQL语句,如:DML、DDL、储存过程等
解析器Parser
- 对SQL语句进行语法解析生成解析树
查询优化器Opyimizer
- 根据解析树生成执行计划,并选择合适的索引,然后按照执行计划SQL语句并与各个存储引擎交互
缓存Caches
- MySQL表缓存,记录缓存,也包含各个存储引擎的缓存部分,也会存储一些权限和session级别的缓存
StorageEngines存储引擎层
插件式的存储引擎:任何只要定义好与MySQL Server交互的接口,任何引擎都可以访问MySQL
存储引擎包括MyISAM、InnoDB、支持归档的Archive 、内存Memory等
重点储存引擎:InnoDB、MyISAM
系统文件层
文件的物理储存,包括通用查询日志、二进制日志,数据文件,错误日志,慢查询日志,全日志,redo/undo日志等
错误日志:
- MySQL运行过程中产生的错误信息
- 查看错误日志:
show variabes like '%log_error%'
通用查询日志:
- MySQL运行过程中产生的一般查询信息
- 查看通用查询日志:
show variabes like '%general%'
二进制日志:
- 记录MySQL数据量执行插入、修改、删除的操作,包括SQL语句执行的时间和时长
恢复数据库的数据和实现MySQL主从复制都通过二进制日志
show variables like '%log_bin%' //查看是否开启二进制日志 show variables like '%binlog%' // 查看二进制日志参数 show binary logs // 查看日志文件
慢查询日志
记录了SQL语句执行时间超过指定的时间(默认时间是10s)
show variables like '%slow_query%' //查看是否开启了慢查询日志 show variables like '%long_query_time%' //查询慢查询设置时间
数据文件
- 主要包含:db.opt文件、frm文件、MYD文件、MYI文件、ibd文件、ibdata文件、ibdata1文件、ib_logfile0和ib_logfile1文件
配置文件
- MySQL的所有配置信息
- Unix/Linux系统是my,cnf文件,Windows系统是my.ini文件。