mysql的程序结构和ssh十分相似。
mysql客户端/服务器结构(c/s)
(1)本地socket连接方式
socket=/tmp/mysql.sock
mysql -S /tmp/mysql.sock
说明:只能本地使用,不依赖于ip和端口
(2)远程tcpip链接方式
mysql -uroot -p123 -h 10.0.0.51 -P 3306 #u user #p password #h host #P port
服务端实例
实例:mysqld+工作线程+预分配的内存结构
功能:管理数据
mysqld程序结构
server层(连接层+sql层)+引擎层
连接层:
1.提供连接协议(socket,tcp/ip)
2.验证
3.提供专用链接线程
mysql>show pocesslist;
sql层
1.语法检查
2.语义(DDL,DCL,DML,DTL)
3.权限
4.解析预处理
a全表扫描
b索引
5.优化器:帮助我们选择则预处理的最优方案,基于cost
6.执行者:按照优化器的选择执行sql语句。
得出执行结果在内存的什么位置。
7.查询缓存(query_cache默认不开启)可以redis替代
8.日志记录(binlog二进制目录,glog需要人为开启)
存储引擎层:相当于linux文件系统和磁盘交互的模块。
mysql的逻辑结构
逻辑-抽象
mysql |
linux |
库:库名+库属性
|
目录:名字+属性 |
表:表名+表属性+表内容+表列
|
文件:文件名+文件属性+文件内容 |
mysql的物理结构
扇区:512b连续的一段磁盘空间,顺序读写。
段:一个表就是一个段,可以有一个或多个区构成
区:一个区(簇),默认1M,连续64个pages
页:默认16kb,连续4个os block,最小的io单元。