mysql客户端与服务端连接过程---mysql从入门到精通(一)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
全局流量管理 GTM,标准版 1个月
简介: mysql客户端与服务端连接过程---mysql从入门到精通(一)

大家都用过微信,微信是怎么通信的呢:

消息被客户端包装,把发送者和接受者都发给服务端。

服务端处理消息之后,再把发送者和接受者一起发送给接受者 的客户端。

Mysql的链接方式和微信一样,也是吧不同的客户端发来的消息,经过处理之后,再返回给客户端。


一、连接方式


1、TCP/IP


真实环境中,大部分的客户端和服务端都会运行在不同的主机中。每台计算器都有它的ip地址 ,mysql通过tcp作为客户端与服务端之间网络通信协议,先采用tcp协议进行网络方面需求,像操作系统申请 一个端口号,这是一个整数值(范围在0~65535),之后就通过ip+端口号来进行网络通信。

Mysql服务器启动的时候,默认会申请3306端口号,监听3306端口。如果3306被其他进程占领,那我们在链接的时候可以用-P3307来切换,注意是大写的P,小写的p代表密码。

Mysql -h 127.0.0.1  -u root -p

此处h代表host u代表user p代表password,点击回车键之后,输入密码,因为安全性问题,密码输入的时候是看不到的,如果直接输入密码,中间不可以有空格,比如这样Mysql -h 127.0.0.1  -u root -p123456。


2、命名管道和共享内存


如果你是windows用户可以启动命名管道和共享内存来进行通信,需要注意的是,用共享内存的时候,需要保证服务端客户端在同一台windows机器上。(不了解这两个也没事,并不影响我们接下来介绍mysql)


3、Unix域套接字文件


这个也可以了解下,如果使用的操作系统为类Unix系统,可以用Unix域套接字文件来进行通信,启动时候加参数

mysqld --socket=/tmp/a.txt

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

这样该客户端进程和服务器进程就可以通过路径为/tmp/a.txt的Unix域套接字文件进行通信了。


二、服务器处理客户端请求


不论什么连接方式,最后实现的都是,客户端进程向服务器进程发送一段mysql语句文本,服务端返回给客户端一段处理结果文本。那客服端接收到mysql语句文本之后,又是如何处理的呢?流程为,客户端发送增删查改请求,第一步为连接管理,第二步为解析与优化,第三步为存储引擎。


1、连接管理


客户端通过上面介绍的方法都可以连接服务端,每当有一个客户端进来时,服务端会创建一个专门的线程来管理这个客户端,当客户端断开连接的时候,当前线程也不会销毁,当新的客户端来时,用当前线程管理新的客户端,从而节省开销。

客户端连接的时候,会携带主键的信息,用户名,密码,如果认证失败,则拒绝连接,当客户端和服务端不在同一台机器的时候,会采用ssh(安全套节字)进行网络通信,保证数据传输安全性。


2、解析与优化


当有相同请求的时候,mysql会吧请求的数据缓存起来,下次任何客户端过来都能访问。  但如果两次sql多了一个空格或者注释,大小写不一样,也不会触发缓存,系统表比如mysql也不会发生缓存,还有如果有函数,比如now也不会触发缓存,因为每次查询的结果不一样,缓存就没必要。

缓存失效什么时候呢?只要这站表被insert,update,delete,drop等,就会把数据从高速缓存中清除。(缓存虽然可以提高查询性能,但也会造成开销,比如每次查询需要查询缓存里的检索,然后在更新缓存,维护改缓存的区域,mysql从5.7.20推荐健使用查询缓存,8.0之后删除)


3、语法解析


当没有当前缓存的时候,则开始正是查询,因为发过来的只是一段文本,需要把sql语句的一些表,查询的列,搜索条件等放在mysql服务器数据结构上,来编译解析当前文本。


4、查询优化


语法解析后,获取到了表,列和所搜条件,但sql语句的查询效率不高,mysql会对语句做些优化,比如表达式简化,子查询转为连接,外连接转为内连接等,优化的结果就是生成一个mysql的执行计划。我们也可以用EXPLAIN语句来检测sql语句怎么样。


5、存储引擎


查询优化完毕之后,这时候才去访问mysql真实的数据库,储存引擎,我们的表是一行一行数据组成的,怎么从表里读写数据,怎么把数据写入物理存储器上,这都是存储引擎干的事。


为了方便管理,人们把不涉及数据的部分,连接管理,查询缓存,语法解析,查询优化分为Mysql-Service,存储的部分叫存储引擎。当sqlservie调用存储引擎的时候,会直接调用底层api函数,获取返回数据。

我们常用的存储引擎有两种,默认的是innoDB,支持事务查询。Myisam非事务存储引擎。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
关系型数据库 MySQL 数据库
MySQL基本操作入门指南
MySQL基本操作入门指南
113 0
|
21天前
|
关系型数据库 MySQL 网络安全
DBeaver连接MySQL提示Access denied for user ‘‘@‘ip‘ (using password: YES)
“Access denied for user ''@'ip' (using password: YES)”错误通常与MySQL用户权限配置或网络设置有关。通过检查并正确配置用户名和密码、用户权限、MySQL配置文件及防火墙设置,可以有效解决此问题。希望本文能帮助您成功连接MySQL数据库。
34 4
|
1月前
|
安全 关系型数据库 MySQL
【赵渝强老师】MySQL的连接方式
本文介绍了MySQL数据库服务器启动后的三种连接方式:本地连接、远程连接和安全连接。详细步骤包括使用root用户登录、修改密码、创建新用户、授权及配置SSL等。并附有视频讲解,帮助读者更好地理解和操作。
116 1
|
2月前
|
SQL Java 关系型数据库
java连接mysql查询数据(基础版,无框架)
【10月更文挑战第12天】该示例展示了如何使用Java通过JDBC连接MySQL数据库并查询数据。首先在项目中引入`mysql-connector-java`依赖,然后通过`JdbcUtil`类中的`main`方法实现数据库连接、执行SQL查询及结果处理,最后关闭相关资源。
140 6
|
2月前
|
SQL JavaScript 关系型数据库
node博客小项目:接口开发、连接mysql数据库
【10月更文挑战第14天】node博客小项目:接口开发、连接mysql数据库
|
2月前
|
Java 关系型数据库 MySQL
【编程基础知识】Eclipse连接MySQL 8.0时的JDK版本和驱动问题全解析
本文详细解析了在使用Eclipse连接MySQL 8.0时常见的JDK版本不兼容、驱动类错误和时区设置问题,并提供了清晰的解决方案。通过正确配置JDK版本、选择合适的驱动类和设置时区,确保Java应用能够顺利连接MySQL 8.0。
248 1
|
2月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
202 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
3月前
|
关系型数据库 MySQL Python
mysql之python客户端封装类
mysql之python客户端封装类
|
2月前
|
SQL JavaScript 关系型数据库
Node.js 连接 MySQL
10月更文挑战第9天
31 0
|
2月前
|
关系型数据库 MySQL Linux
Navicat 连接 Windows、Linux系统下的MySQL 各种错误,修改密码。
使用Navicat连接Windows和Linux系统下的MySQL时可能遇到的四种错误及其解决方法,包括错误代码2003、1045和2013,以及如何修改MySQL密码。
272 0
下一篇
DataWorks