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语句作为流程介绍

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-03-31 03:04:04       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-31 03:04:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-31 03:04:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-31 03:04:04       20 阅读

热门阅读

  1. 花钱的艺术:消费和投资如何分配

    2024-03-31 03:04:04       16 阅读
  2. WebAPI调优

    2024-03-31 03:04:04       16 阅读
  3. LeetCode-热题100:208. 实现 Trie (前缀树)

    2024-03-31 03:04:04       19 阅读
  4. Vuex工作机制

    2024-03-31 03:04:04       18 阅读
  5. 2024 蓝桥打卡Day27

    2024-03-31 03:04:04       18 阅读
  6. PTA - 转换函数使用

    2024-03-31 03:04:04       24 阅读
  7. 如何做一个知识博主? 思考 + 提问

    2024-03-31 03:04:04       19 阅读
  8. vue 预览v-html 富文本里的图片 使用vant

    2024-03-31 03:04:04       16 阅读
  9. 21.59万

    21.59万

    2024-03-31 03:04:04      19 阅读
  10. 蓝桥杯2016年第十三届省赛真题-承压计算

    2024-03-31 03:04:04       19 阅读