学习资料:
MySQL是怎样运行的:从根儿上理解MySQL
1. 服务端和客户端
使用数据库也是用客户端去和服务端通信,在安装时,mysqld命令就是服务器端的执行命令,mysql就是客户端的执行命令。
其实过程就是:
- 启动服务端和客户端的进程;
- 客户端和服务端进来通信;
- 客户端将一段文本(sql语句)发送给服务端;
- 服务端接收该文本,进行处理,然后返回结果;
- 客户端收到结果,展示。
客户端去和服务端通信的连接方式有三种:
- TCP/IP;
- 命名管道或共享内存——windows;
- Unix套接字(Socket)——类Unix;
服务端在处理客户端发来的文本时,主要包括三个部分:
-
连接管理
一个服务端上可能连接多个客户端,每个客户端进程连接到服务端,服务器进程就会创建一个线程来处理与其的交互,但是在该客户端断开连接的时候,服务器并不会销毁线程,而是缓存,用于分配给新的客户端连接,避免了频繁的创建和销毁线程开支,这也对应着并发连接数的设置。 -
解析和优化
对于客户端传递过来的sql文本,要经过查询缓存、语法解析、查询优化三个步骤,才能读懂这段文本的意思,然后生成执行计划。就像读懂了设计图纸,然后再排期、开干! -
存储引擎
在上面,都没有去访问真正的表格和数据,都是在Mysql Server层面做的逻辑工作,因为无论是表格,还是一行一行的记录,其实都是逻辑层面,具体在物理上如何表示记录,磁盘是如何存储的,这属于存储引擎的工作。
存储引擎有很多种,各自的存储结果和算法都不用,以API的形式给Mysql Server提供调用接口。
注:语法解析其实包括了很多步:词法解析、语法分析、语义分析等
2. 配置
就像手机你也设置密码,提醒事项等这种东西一样,Mysql也可以配置,有一些是默认配置。
2.1 在命令行中配置
也就是在使用 mysql,mysqld时,进行的配置,其一般形式为:
mysqld --选项1[=值1] --选项2[=值2] … --选项n[=值n]
例如配置默认存储引擎:
mysqld --default-storage-engine=MyISAM
2.2 配置文件
上面是在命令行中配置的,也就是针对那一次连接进行的配置,可以将其配置为文件,这个好理解。
配置文件中的格式基本为:
[mysqld]
\# 注释
option1
option2 = value2
例如:
[server]
( …)
[mysqld]
( …)
[client]
( …)
[mysql]
( …)
2.3 配置优先级
在配置文件中,以最后一个配置为准。
命令行的优先级高于配置文件。
2.3 系统变量
show [global|session] variable [like 'xxx']
可以在服务器程序运行过程中进行动态修改,而无需重启服务!
系统变量分为两种不同的作用范围:
- Global
- Session
顾名思义,一个是全局的,一个是针对每一个连接的客户端的配置。设置方法如下:
set [global|session] 系统变量名=值
不写的话,默认是session,正常,这样更安全。
2.4 状态变量
如果说上面是设置的话,那么状态变量就是用来查看的了,是在程序运行过程中,系统产生的一些状态信息,
show [global|session] status [like 'xxx']