MySQL安装后,包含一个“mysqld”服务器进程、客户端应用程序用于本地或远程连接,及一些本地安装的mysql非客户端程序。用户通过mysql客户端应用程序连接MySQL服务器发起数据请求。
当MySQL的客户端与服务器进行通信时,客户端和服务器可以使用不同的操作系统,例如,客户端使用Windows,服务器使用Linux,客户端通过TCP/IP协议连接至服务器。
MySQL是一个单进程多线程的服务器,MySQL进程的名称为“mysqld”,它负责管理数据库在磁盘和内存中的访问,支持多个存储引擎、支持事务和非事务的表,并且能够优化内存的使用。“mysqld”进程由三层结构构成:
- 连接层:负责处理连接。
- SQL层:处理应用程序发送的SQL查询。
- 存储层:用于数据存储,可以将数据在不同的物理媒体上存储为不同的格式和结构。
连接层
连接层为每个连接分配一个线程,该线程用来控制查询的执行。当连接通过用户名/密码的认证后,该连接可以发送SQL查询。连接层接受通过TCP/IP、Unix socket、shared memory,及Named pipes协议的应用程序连接。连接协议通过客户端的库及驱动实施,连接协议的速度因本地设置而异。上述协议中,MySQL可以通过TCP/IP协议在网络间传送消息,其他的协议仅支持在本地使用,也就是意味着客户端和服务器必须在同一台主机上。
TCP/IP协议除了用于网络间的远程连接,也可以用于本地连接。使用TCP/IP协议时需要使用IP地址或者DNS名称标识主机,并使用端口号标识服务。MySQL的默认端口号为3306。当主机名使用“localhost”时,MySQL将认为用户使用Unix的socket进行通信,使用“127.0.0.1”IP地址时,将使用TCP/IP协议进行通信。
Unix的sockets通信是进程间通信的一种形式,用于在同一机器上的两个进程之间形成的双向通信链路的一端,要求服务器创建一个socket文件,客户端通过该文件进行连接。例如,
mysql -S /var/lib/mysql/mysql.sock -uroot -P
当用户使用window时,可以通过shared memory和Named pipes进行连接。使用shared memory时,服务器将创建一个共享的内存块,客户端进程将使用该内存块与服务器进行通信。
Named pipes在window上的工作方式与Unix的socket比较相像,服务器创建一个named pipe,客户端通过该named pipe与服务器建立连接。
注意:Named pipe与shared memory两种连接方式不支持使用MySQL的X协议。
当连接使用TCP/IP协议时,可以通过下面的方法对连接进行加密。
主机上装有OpenSSL时,MySQL可以通过“mysql-ssl-rsa-setup”工具创建SSL密钥,之后将客户端的密钥复制到客户端,客户端可以使用密钥启用远程加密连接。
连接线程
服务器为每个活动的客户端连接创建一个连接线程,通过该客户端执行的全部语句将使用该线程,当客户端断开时,服务器将销毁该线程。服务器创建和销毁线程时,它必须事先分配一个专用的内存构造用于客户端的连接,当频繁建立销毁连接时,会为系统带来性能上的影响。MySQL在企业版中提供了线程池插件,该插件可以将线程进行分组管理,每组线程在任意时间点上只允许一个运行时间短的语句,线程组可以为运行时间长的语句额外创建一个线程,并且能够根据事务关系区分语句的优先级。
以上内容是关于MySQL服务器的连接层的介绍。感谢关注“MySQL解决方案工程师”
声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/191014.html