MySQL的服务器程序和客户端程序

我的电脑安装目录:

/opt/homebrew/Cellar/mysql/8.0.27/

启动MySQL服务器程序

mysqld不常用,常用mysqld_safe,它的优点:

  • 间接调用mysqld并持续监控服务器的运行状态。
  • 当服务器进程出现错误,可以帮助重启服务器程序。
  • 输出错误日志

mysql.server间接地调用mysqld_safe:

1
2
mysql.server start
mysql.server stop

mysqld_multi可以启动或停止多个服务器进程,也能报告他们的运行状态。

mysqld_safemysql.servermysqld_multi都是基于mysqld的shell脚本。

启动MySQL客服端程序

1
mysql -h主机名 -u用户们 -p密码

关闭客服端命令:

quit
exit
\q

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

客服端进程向服务器进程发送请求并得到响应的过程本质上是一个**==进程间通信==**的过程。MySQL支持几种进程通信方式。

1 TCP/IP

mysql服务端进程默认监听3306端口,使用-P修改:

1
mysqld -P3307

客服端程序连接:

1
mysql -uroot -h127.0.0.1 -P3307 -p

2 命名管道和共享内存

windows特有的。

  • 命名管道。分别在启动服务器程序和客服端程序时加上,--enable-named-pipe--pipe/--protocal=pipe
  • 共享内存。分别在启动服务器程序和客服端程序时加上,--shared-memory--protocal==memory

3 Unix域套接字

在类Unix的同一台机器上。

如果在启动客服端程序时没有指定主机名,或者指定的主机名为localhost,或者指定了--protocol=socket那么服务器程序和客服端程序就可以通过Unix域套接字通信了。

服务器程序默认监听的Unix域套接字文件/tmp/mysql.sock,修改方式:

1
mysqld --socket=/tmp/a.txt

对应的客服端程序启动时修改为:

1
mysql -hlocalhost -uroot --socket=/tmp/a.txt -p

服务器处理客服端请求

无论那种通信方式,最后都是实现客服端进程向服务器进程发送一段文本(MySQL语句),服务器进程处理后再向客服端进程返回一段文本(处理结果)。

服务端处理客服端的查询请求时,大致分为3部分:

1.连接管理

每当一个客户端进程连接到服务器进程时,服务器进程都会创建一个线程专门处理与这个客户端的交互;断开后线程不会被立即销毁,而是缓存起来,当另一个新的客户端再进行连接时,就会把这个线程分配给该新的客户端。

当然也需要限制可以同时连接到服务器的客服端数量。

2.解析与优化

  • 查询缓存

MySQL5.7.20开始不推荐使用查询缓存,MySQL8.0直接删除了。

  • 语法解析

从本质上说,这个从指定的文本中提取出需要的信息是一个编译过程,涉及词法解析、语法分析、语义分析等阶段。

  • 查询优化

对我们的语句做一些优化,如外连接转换为内连接、表达式简化、子查询转为连接等等,最中结果是生成一个==执行计划==。

3.存储引擎

在物理上如何表示记录(逻辑上表是有一行一行的记录组成的),怎么从表中读取数据以及怎么把数据写入具体的物理存储器上,都是存储引擎负责的事情。

常用存储引擎

存储引擎的一些操作

当前服务器程序支持的存储引擎

1
Show Engines;

结果中,Support列表示是否可用;Savepoints表示是否支持事务的部分回滚。

设置表的存储引擎

1
2
3
4
5
6
-- 1.创建时
Create Table 表名(
) Engine = 存储引擎名称;

-- 2.修改
Alter Table 表名 Engine = 存储引擎名称;