MySQL5.7源码分析--连接

一、连接协议支持

mysql支持4种通信协议:TCP/IP协议、Unix Socket协议、Share Memory协议、NT管道

windows支持三种连接方式:TCP/IP协议、Share Memory协议、NT管道

unix支持两种连接方式:TCP/IP协议、Unix Socket协议

协议介绍如下:

1.TCP/IP协议

> 传输控制协议(Transmission

Control Protocol)/互联网协议(Internet

Protocol),是一套被用于连接互联网上各主机的通信协议。TCP/IP一开始是用于UNIX操作系统建立互联网通信的。现在它已经成为了一种网络数据传输的事实标准。即便那些拥有自己通信协议的网络操作系统,如Netware也支持TCP/IP协议。

2. Unix Socket协议

> 在计算机世界,一个socket是一种内部进程通信形式,它被用于在相同主机上形成进程间的双向通信连接点(在本地系统上的一个物理文件)。

3. Share Memory协议

> 一个在程序间传送数据的有效方法。一个程序会建立一个内存区以提供其它受允许的进程进行访问。Windows显式”passive”连接模式仅可工作于(Windows系统)主机中。

4. NT管道

>这种命名管道设计更偏向于客户端-服务器通信,它们更像socket:除了用于通常的读写操作外,Windows命名管道也同时对server应用支持显式”passive”被动连接模式。仅在单独(Windows平台)主机中运行。

二、连接管理 ----没考虑到线程池

1.命名管道连接处理线程

handle_connections_namedpipes()

2.共享内存连接处理线程

handle_connections_shared_memory

3.socket连接处理线程 -unix socket和tcp/ip都在其中实现

handle_connections_sockets_thread

4.连接完成后,创建线程,加入全局线程调度,并进行连接处理,涉及以下函数

create_new_thread(thd);
add_global_thread(thd);
create_thread_to_handle_connection(thd);

三、连接处理

主要在create_thread_to_handle_connection()函数中,主要有两个步骤

1.查看有没有缓存线程可用,如果有,就唤醒线程去处理该请求

2.如果没有缓存线程可用,则创建新线程处理该请求

之后主要赚以下操作:

1.权限认证

在thd_prepare_connection()函数中,做了host、用户名、密码等安全认知

2.等待数据接收

在以下循环中做了数据读取,指令分发功能

 while (thd_is_connection_alive(thd)){mysql_audit_release(thd);if (do_command(thd))break;}

可以执行的指令主要包括一下指令:

COM_SLEEP,

COM_QUIT,

COM_INIT_DB,

COM_QUERY,

COM_FIELD_LIST,

COM_CREATE_DB,

COM_DROP_DB,

COM_REFRESH,

COM_SHUTDOWN,

COM_STATISTICS,

COM_PROCESS_INFO,

COM_CONNECT,

COM_PROCESS_KILL,

COM_DEBUG,

COM_PING,

COM_TIME,

COM_DELAYED_INSERT,

COM_CHANGE_USER,

COM_BINLOG_DUMP,

COM_TABLE_DUMP,

COM_CONNECT_OUT,

COM_REGISTER_SLAVE,

COM_STMT_PREPARE,

COM_STMT_EXECUTE,

COM_STMT_SEND_LONG_DATA,

COM_STMT_CLOSE,

COM_STMT_RESET,

COM_SET_OPTION,

COM_STMT_FETCH,

COM_DAEMON,

COM_BINLOG_DUMP_GTID,

COM_END

因为不同指令功能较多,下面将以select语句作为流程介绍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/778992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】动态内存分配 与 对象的动态建立与释放

目录 动态建立和释放动态创建数组销毁堆对象销毁动态创建的数组 对象的动态建立与释放 动态建立和释放 new操作符动态分配内存建立的变量,称为“堆对象”或者“在动态存储中分配”。 new运算符创建的堆对象一直存在,直到使用delete运算符显示的销毁。ne…

[flask]http请求//获取请求体数据

import jsonfrom flask import Flask, requestapp Flask(__name__)app.route("/form1", methods["post"]) def form1():"""获取客户端请求的请求体[表单]:return:""""""获取表单数据请求url:&qu…

2024-03-29 问AI: 介绍一下ASM模型( Active Shape Model )

文心一言 ASM模型,即Active Shape Model(主动形状模型),是Cootes于1995年提出的一种经典的人脸关键点检测算法。它基于点分布模型(Point Distribution Model, PDM)的算法,是一种对目标物体进行…

网络安全卷么?

官方宣传的是对的网络安全现在是朝阳行业,缺口是很大 不过网络安全行业就是需要技术很多的人达不到企业要求才导致人才缺口大 初级的现在有很多的运维人员转网络安全,初级也会慢慢的卷起来,但是岗位多不用怕,以后各大去也都会要网…

解决dtypes.py:513: FutureWarning:...系列问题【TensorFlow】

前情提要 我的TensorFlow版本是2.4.0,python环境是3.8.19 问题 在训练模型时出现以下报错: D:\anaconda3\envs\env_tf\lib\site-packages\tensorflow\python\framework\dtypes.py:513: FutureWarning: In the future np.object will be defined as t…

Git Fork后的仓库内容和原仓库保持一致

Git Fork后的仓库内容和原仓库保持一致 ①Fork原仓库内容到自己仓库 ②将项目内容下载到本地 ③使用git命令获取原仓库内容,将原仓库的最新内容合并到自己的分支上并推送 下面从第三步开始演示~ 这里以码云上的若依项目为演示项目 ③使用git命令获取原仓库内容 …

【八股】集合

HashMap HashMap是基于哈希表的Map接口实现,是非线程安全的。 JDK1.8之前 HashMap 底层是数组链表实现的,数组是HashMap的主题,链表则是为了解决哈希冲突的。(拉链法) JDK1.8之后 HashMap 在解决哈希冲突的方法有了较…

基于龙芯2k1000 mips架构ddr调试心得(二)

1、内存控制器概述 龙芯处理器内部集成的内存控制器的设计遵守 DDR2/3 SDRAM 的行业标准(JESD79-2 和 JESD79-3)。在龙芯处理器中,所实现的所有内存读/写操作都遵守 JESD79-2B 及 JESD79-3 的规定。龙芯处理器支持最大 4 个 CS(由…

Spring Transaction 指定事务管理器问题

一,单个数据源,单个事务管理器与Transactional默认事务管理器名称不一致问题 在平时代码中使用声明性事务时,直接在方法上面加注解即可,如下 Transactional(rollbackFor Exception.class) 并没有指定事务管理器,为…

ESXi for ARM 1.15

官方文档页面已从 Flings 迁移到 ESXi-Arm Fling 1.15 Refresh - VMware Technology Network VMTN 下载地址为 https://customerconnect.vmware.com/downloads/get-download?downloadGroupESXI-ARM 需要VMware Customer Connect 账号登录。 更新如下: Changes …

探索直播美颜技术:计算机视觉在美颜SDK开发中的应用

下文,小编将深入探讨美颜技术在计算机视觉领域中的应用,特别是美颜SDK的开发过程,并剖析其技术原理和实现方法。 一、美颜技术的发展 这些算法往往难以满足用户对高质量美颜效果的需求,因此需要更加先进的技术手段来实现。 二、…

DM Mysql Oracle 日期函数 dameng

1. to_char 和 to_date 是oracle 和 DM 原生支持的日期函数 如下 YYYY-MM-DD HH24:MI:SS 纯大写纯小写都行 推荐使用 TO_CHAR 函数来格式化日期(而不推荐 DATE_FORMAT) SELECT to_char(SYSDATE, YYYY-MM-DD HH24:MI:SS) FROM dual;SELECT to_char(SYSDATE, yyyy-mm-dd h…

map与set容器常见操作详解(含示例代码及注意事项)

🎉个人名片: 🐼作者简介:一名乐于分享在学习道路上收获的大二在校生 🙈个人主页🎉:GOTXX 🐼个人WeChat:ILXOXVJE 🐼本文由GOTXX原创,首发CSDN&…

LeetCode-热题100:73. 矩阵置零

题目描述 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入: matrix [[1,1,1],[1,0,1],[1,1,1]] 输出: [[1,0,1],[0,0,0],[1,0,1]] 示例 2&…

企微侧边栏开发(内部应用内嵌H5)

一、背景 公司的业务需要用企业微信和客户进行沟通,而客户的个人信息基本都存储在内部CRM系统中,对于销售来说需要一边看企微,一边去内部CRM系统查询,比较麻烦,希望能在企微增加一个侧边栏展示客户的详细信息&#xf…

常见手撕项目C++

常见手撕项目C 设计模式单例模式饿汉模式懒汉模式 设计模式 单例模式 单例模式是一种常用的软件设计模式,其目的是确保一个类只有一个实例,并提供一个全局访问点来获取该实例。 优点: 资源控制:单例模式能够确保一个类只有一个实…

淘宝订单中的涉及红包检测、优惠券检测方案|工具|API

首先,检测订单红包的核心价值是什么? “红包的本质就是薅平台羊毛:不用怀疑,平台对于这种损害平台利益的行为肯定是最高等级的稽查”。那么,在日常运营中,需要尽可能过滤这类订单。 其次,如何使…

2024-03-28 问AI: 介绍一下AI 大神,Ian Goodfellow

文心一言 Ian Goodfellow是机器学习领域的知名学者,对深度学习领域有着重要贡献。他生于1985年,本科和硕士阶段就读于斯坦福大学,师从吴恩达。博士阶段,他跟随蒙特利尔大学的著名学者Yoshua Bengio研究机器学习,并在2…

SQL注入 (一)

一、sql注入的简介 将一段内容传入到目标网站,这段内容会被当做程序来执行 二、MySQL扩展补充 mysql的结构 库表名字段数据 mysql的用户 管理员:跨库、文件读写操作普通用户:猜解 判断目标网站的用户类别 白盒:读代码黑盒…

happybase基本操作方法

一、准备工作 (1)windows下安装happybase库: pip install happybase -i https://pypi.tuna.tsinghua.edu.cn/simple (2)确保HDFS、Hbase、Zookeeper服务正常运行: 启动HDFS命令:start-dfs.sh…