MySQL的启动程序:

mysqld:代表着mysql服务器程序,执行就可以启动一个服务器进行。不常用。
mysqld_safe:是一个启动脚本,间接调用mysqld,另外还启动一个守护进程,还会降服务器错误日志定位到文件中。
mysql.server:间接调用mysqld_safe,启动/停止mysql程序:mysql.server start/stop
mysqld_multi:运行多个MySQL服务器进程。

启动Mysql客户端:

mysql -h主机名 -P端口号 -u用户名 -p密码
访问本机的MySQL服务"-h"可以不写,
访问的MySQL服务端口为3306时"-P"可以不写,
当前登录的用户名和要登录MySQL的用户名一直时"-u"可以不写。

退出MySQL客户端:

quit、exit、\q其中任意一个命令都可以

客户端与服务器连接的过程:

Windwos系统:
命名管道进行进程间通讯:
服务端启动命令加上:–enable-named-pipe
客户端启动命令加上:–pipe
共享内存进行进程间通讯:
客户端和服务端必须运行在同一台主机中!
服务端启动命令加上:–shared-memory
客户端启动命令加上:–protocol=memory
Unix系统:
Unix域套接字文件:
服务端启动命令加上:–protocol=socket,默认监听/tmp/mysql.sock文件
修改监听的套接字文件:–socket=监听的套接字文件
客户端启动命令加上:–socket=监听的套接字文件

服务器处理客户端请求:

MySQL语句执行流程:

mysql的进程名 mysql进程名是什么_MySQL


连接管理:

有一个连接的线程池,每一个客户端连接到服务端的时候,都会有一个线程来专门处理它们之间的交互。


如果客户端和服务端不运行在一个主机上的时候,还采用了SSL进行通信保证数据传输的安全性。


解析与优化:
查询缓存:

MySQL每次执行查询请求的时候,都会把请求和结果

缓存

起来,如果再有一模一样的请求,直接查缓存。


但是查询请求要完全一致,有任何内容的不一致都会导致缓存不命中。


如果查询请求包含系统参数,是不会进行缓存的。


缓存是客户端共享的,A查询了之后的缓存B也能用。


同时,在对数据进行修改之后(insert、update、truncate、alter、drop……)对于那个表的缓存将无效并被删除。


因为维护缓存也需要开销,所以从MySQL 5.7.20开始,不推荐使用查询缓存,并在MySQL 8.0中删除。
语法解析:

服务端收到客户端发送的请求时候,首先会对请求内容进行分析,判断语法是否正确,然后执行对应的查询。


包含词法解析、语法分析、语义分析……阶段


查询优化:

因为我们写的MySQL语句执行起来效率可能并不是很高,MySQL的优化程序会对我们的语句做一些优化。


存储引擎:

怎么记录表数据、怎么读取表数据、……都是存储引擎负责的。

常用存储引擎:

ARCHIVE 用于数据存档(行被插入后不能再修改)
BLACKHOLE 丢弃写操作,读操作会返回空内容
CSV 在存储数据时,以逗号分隔各个数据项
FEDERATED 用来访问远程表
InnoDB 具备外键支持功能的事务存储引擎
MEMORY 置于内存的表
MERGE 用来管理多个MyISAM表构成的表集合
MyISAM 主要的非事务处理存储引擎
NDB MySQL集群专用存储引擎

关于存储引擎的操作:

查看当前服务器程序支持的存储引擎:
SHOW ENGINES;
创建表时指定存储引擎:
建表语句后面跟ENGINE = 存储引擎名称;
修改表的存储引擎:
ALTER TABLE 表名 ENGINE= 存储引擎名称;
查看表的存储引擎:
可以使用 “SHOW CREATE TABLE 表名” 查看表创建信息,里面就含有存储引擎