【mysql是怎样运行的】-客户端与服务器连接

1. 几种连接方式

1.1 TCP/IP

  • 数据库服务器进程和客户端进程可能运行在不同的主机中,它们之间必须通过网络进行通信。MySQL采用TCP作为服务器和客户端之间的网络通信协议。在网络环境下,每台计算机都有一个唯一的IP地址,如果某个进程需要采用TCP协议进行网络通信,就可以向操作系统申请一个端口号。端口号是一个整数值, 它的取值范围是 0 ~ 65535.。这样,网络中的其他进程就可以通过 IP地址+端口号的方式与这个进程建立连接,这样进程之间就可以通过网络进行通信。
  • 服务器默认端口号3306,可以通过 -P 参数来指定其他端口号:
#启动服务器程序的命令行中增加指定端口
#这样 MySQL 服务器在启动时就会去监听指定的端口号 3307
mysqld -P3307
  • 果客户端进程想要使用 TCP/IP 网络与服务器进程进行通信,那么在使用 mysql 命令启动客户端程序时,如下命令:
#IP地址就是-h后面,它是服务器进程所在主机的主机名IP
mysql -h127.0.0.1 -uroot -P3307 -p密码

1.2 命名管道和共享内存

  • Windows 用户,可以考虑在客户端进程和服务器进程之间使用命名管道或共享内存进行通信
  • 使用命名管道进行进程间通信:需要在启动服务器程序的命令中加上 --enable-named-pipe 参数,然后在启动客户端程序的命令中加上 --pipe 或者--protocol=pipe 参数.
  • 使用共享内存进行进程间通信:需要在启动服务器程序的命令中加上 --shared-memory参数。在成功启动服务器后,共享内存便成为本地客户端程序的默认连接方式。我们也可以在启动客户端程序的命令中加上 --protocol=memory 参数来显式指定使用共享内存进行通信
    需要注意的是,使用共享内存进行通信的服务器进程和客户端进程必须位于同一台 Windows主机中

1.3 UNIX 域套接字

  • 如果服务器进程和客户端进程都运行在操作系统为类 UNIX 的同一台机器上,则可以使用UNIX域套接字进行进程间通信.
  • 如果在启动客户端程序没有指定主机名
  • 或者指定的主机名为 localhost,
  • 又或者指定了- -protocol=socket 的启动参数,那么服务器程序和客户端程序之间就可以通过 UNIX域套接字进行通信了

2. 服务器处理客户端请求

  • 无论客户端进程和服务器进程采用哪种方式进行通信,最后实现的效果都是客户端进程向服务器进程发送一段文本 ( MySQL 语句) 。服务器进程处理后再向客户端进程返回一段文本(处理结果)。
  • 客户端可以向服务器发送增删改查等各类请求。
  • 以select查询为例子,如图:服务器程序在处理来自客户端的查询请求时 , 大致需要分为 3 部分 :
    连接管理、解析与优化、存储引擎.
    在这里插入图片描述

2.1 连接管理

  • 客户端进程可以采用前面介绍的TCP/IP、命名管道或共享内存、 UNIX域套接字等几种方式与服务器进程建立连接.
  • 每当有一个客户端进程连接到服务器进程时,服务器进程都会创建一个线程专门处理与这个客户端的交互; 当该客户端退出时会与服务器断开连接, 服务器并不会立即把与该客户端交互的线程销毁, 而是把它缓存起来 , 在另一个新的客户端再进行连接时,把这个缓存的线程分配给该新客户端,这样就不用频繁地创建和销毁线程。
  • 客户端程序发起连接时,需要携带主机信息、用户名、密码等信息,服务器程序会对客户端程序提供的这些信息进行认证,如果认证失败 , 服务器程序会拒绝连接。

2.2 解析与优化

  • 查询缓存MySQL服务器程序处理查询请求的过程会把刚刚处理过的查询请求和结果缓存起来 . 如果下一次有同样的请求过来,直接从缓存中查找结果就好了,就不用再去底层的表中查找了。这个查询缓存可以在不同的客户端之间共享,也就是说,如果客户端 A 刚刚发送了 一个查询请求,而客户端 B 之后发送了同样的查询请求,那么客户端 B 的这次查询就可以直接使用查询缓存中的数据了。 (如果两个查询请求有任何字符上的不同(例如,空格、注释、大小写等,如NOW()函数)都会导致缓存不会命中,在mysql8.0已经直接删除缓存)。
  • MySQL 的缓存系统会监测涉及的每张表,只要该表的结构或者数据被修改,比如对该表使用了的INSERT、 UPDATE、 DELETE、TRUNCATE TABLE 、 ALTER TABLE 、 DROP TABLE 或 DROP DATABASE 语句 , 则与该表有关的所有查询缓存都将变为无效并从查询缓存中删除
  • 语法解析:客户端发送的是一段文本, MySQL 服务器程序首先对这段文本进行分析 , 判断请求的语法是否正确,然后从文本中将要查询的表、各种查询条件都提取出来放到 MySQL 服务器内部使
    用的一些数据结构上
  • 查询优化:MySQL 的优化程序会对我们的语句做一些优化,如外连接转换为内连接、表达式简化 、子查询转为连接等一堆东西

2.3 存储引擎

  • MySQL 服务器处理请求的过程简单地划分为 server 层和存储引擎层。连接管理、查询缓存、语法解析、查询优化这些并不涉及真实数据存取的功能划分为 server 层的功能,存取真实数据的功能划分为存储引擎层的功能。各种不同的存储引擎为server层提供统一的调用接口。
  • server层在判断某条记录符合要求之后,其实是先将其发送到一个缓冲区,待到该缓冲区满了,才会向客户端发送真正的记录。
  • 创建引擎语句:
CREATE TABLE 表名(
语句,
) ENGINE 存储引擎名称;

#如果表已经建好了,可以继续修改
ALTER TABLE 表名 ENGINE = 存储引擎名称;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值