http://blog.itpub.net/29510932/viewspace-2129300/

初始化:

点击(此处)折叠或打开

  1. main
  2. |-mysqld
  3. |-my_init // 初始话线程变量,互斥量
  4. |-load_defaults // 获取配置
  5. |-init_common_variables // 初始化变量
  6. |-init_server_components // 初始化插件
  7. | |-plugin_init
  8. | | |-plugin_initialize
  9. | |-initialize_storage_engine
  10. |-network_init // 监听网络
  11. |-grant_init
  12. |-servers_init
  13. |-udf_init

插件启动:

点击(此处)折叠或打开

  1. main
  2. |-mysqld_main
  3. |-init_server_components
  4. |-plugin_init
  5. |-plugin_initialize
  6. |-ha_initialize_handlerton
  7. |-innobase_init

登录过程:

点击(此处)折叠或打开

  1. main
  2. |-mysqld_main
  3. |-network_init // 建立socket监听,一个针对网络,一个针对unix域
  4. |-handle_connections_sockets
  5. |-poll
  6. |-mysql_socket_accept // 和客户端建立连接
  7. |-create_new_thread // 针对每个socket连接建立一个新的线程
  8. |-create_thread_to_handle_connection
  9. |-waiting_thd_list->push_back(thd);mysql_cond_signal(&COND_thread_cache); // 已有连接处理线程时,通过信号唤醒,处理线程函数为pfs_spawn_thread
  10. |-mysql_thread_create(启动的线程执行函数,inline_mysql_thread_create)
  11. |-spawn_thread_v1
  12. |-pthread_create(pfs_spawn_thread)

处理连接:

点击(此处)折叠或打开

  1. pfs_spawn_thread
  2. |-handle_one_connection
  3. |-do_handle_one_connection
  4. |-MYSQL_CALLBACK_ELSE(thread_scheduler, init_new_connection_thread, (), 0)
  5. | |-init_new_connection_handler_thread
  6. |-thd_prepare_connection
  7. | |-login_connection // 判断是否可以login,不可以则断开连接返回错误
  8. | | |-check_connection
  9. | | | |-acl_authenticate
  10. | | | |-do_auth_once
  11. | | | |-native_password_authenticate
  12. | | | |-server_mpvio_write_packet
  13. | | | | |-send_server_handshake_packet // 发送handshake包到客户端
  14. | | | | |-my_net_write
  15. | | | | | |-net_write_buff // 将数据写入到内存
  16. | | | | |-net_flush // 将内存中数据发送到网络
  17. | | | |-server_mpvio_read_packet // 从客户端接收Login Request信息
  18. | | | |-my_net_read
  19. | | |-Protocol::end_statement
  20. | | |-Protocol::send_ok
  21. | | |-net_send_ok // 发送response ok
  22. | | |-my_net_write
  23. | |-prepare_new_connection_state
  24. |-do_command
  25. |-dispatch_command
  26. |-mysql_parse

select命令:

点击(此处)折叠或打开

  1. pfs_swpawn_thread
  2. |-handle_one_connection
  3. |-do_handle_one_connection
  4. |-do_command
  5. |-dispatch_command
  6. |-mysql_parse
  7. |-parse_sql
  8. | |-MYSQLparse
  9. |-mysql_execute_command
  10. |-select_precheck
  11. | |-check_table_access
  12. |-execute_sqlcom_select
  13. | |-open_normal_and_derived_tables
  14. | |-open_tables
  15. | | |-open_and_process_table
  16. | | |-open_table(THD *thd, TABLE_LIST *table_list, Open_table_context *ot_ctx)
  17. | | |-Table_cache::get_table
  18. | | |-get_table_share_with_discover
  19. | | | |-get_table_share
  20. | | | |-open_table_def
  21. | | |-my_malloc // 申请表数据结构
  22. | | |-open_table_from_share
  23. | | |-handler::ha_open
  24. | | |-ha_innobase::open
  25. | | |-dict_table_open_on_name
  26. | | |-dict_load_table
  27. | | |-btr_pcur_is_on_user_rec
  28. | | |-dict_load_table_low
  29. | | | |-dict_mem_table_create
  30. | | |-fil_space_for_table_exists_in_mem
  31. | | |-fil_open_single_table_tablespace // 打开表空间文件
  32. | |-mysql_handle_derived
  33. |-handle_select
  34. |-mysql_select
  35. |-mysql_prepare_select
  36. | |-JOIN::prepare
  37. |-mysql_execute_select
  38. |-JOIN::exec
  39. |-select_send::send_result_set_metadata
  40. | |-Protocol::send_result_set_metadata
  41. |-do_select
  42. |-sub_select
  43. |-evaluate_join_record
  44. |-end_send
  45. |-select_send::send_data
  46. |-Protocol::write

MySQL连接查询流程源码的更多相关文章

  1. [Android]Android系统启动流程源码分析

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5013863.html Android系统启动流程源码分析 首先 ...

  2. 转:InnoDB Crash Recovery 流程源码实现分析

    此文章转载给登博的文章,给大家分享 InnoDB Crash Recovery 流程源码实现分析 Crash Recovery问题 本文主要分析了InnoDB整个crash recovery的源码处理 ...

  3. Spark(五十一):Spark On YARN(Yarn-Cluster模式)启动流程源码分析(二)

    上篇<Spark(四十九):Spark On YARN启动流程源码分析(一)>我们讲到启动SparkContext初始化,ApplicationMaster启动资源中,讲解的内容明显不完整 ...

  4. 【图解源码】Zookeeper3.7源码分析,包含服务启动流程源码、网络通信源码、RequestProcessor处理请求源码

    Zookeeper3.7源码剖析 能力目标 能基于Maven导入最新版Zookeeper源码 能说出Zookeeper单机启动流程 理解Zookeeper默认通信中4个线程的作用 掌握Zookeepe ...

  5. Netty 学习(五):服务端启动核心流程源码说明

    Netty 学习(五):服务端启动核心流程源码说明 作者: Grey 原文地址: 博客园:Netty 学习(五):服务端启动核心流程源码说明 CSDN:Netty 学习(五):服务端启动核心流程源码说 ...

  6. [Android]从Launcher开始启动App流程源码分析

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5017056.html 从Launcher开始启动App流程源码 ...

  7. mysql连接查询经典小例题

    mysql连接查询: Mysql连接查询支持多表连接 对同一张表可以重复连接多次(别名在多次连接同一张表时很重要) 例题1: 下面有2张表 teams表 比赛结果表:result 问题: 得出一张表: ...

  8. Spring加载流程源码分析03【refresh】

      前面两篇文章分析了super(this)和setConfigLocations(configLocations)的源代码,本文来分析下refresh的源码, Spring加载流程源码分析01[su ...

  9. Android Activity启动流程源码全解析(1)

    前言 Activity是Android四大组件的老大,我们对它的生命周期方法调用顺序都烂熟于心了,可是这些生命周期方法到底是怎么调用的呢?在启动它的时候会用到startActivty这个方法,但是这个 ...

随机推荐

  1. Win 10 你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问....

    按window+R键输入gpedit.msc 来启动本地组策略编辑器 依次找到“计算机配置-管理模板-网络-Lanman工作站”这个节点,在右侧内容区可以看到“启用不安全的来宾登录”这一条策略设置.状 ...

  2. linux环境中,openssl升级及openresty中nginx基于新版本openssl重新编译

    需求说明: 最近在对系统进行安全扫描的时候,出现了openssl版本的问题,建议对openssl版本进行升级,在此记录下升级过程. 环境说明: 操作系统:RHEL 6.6 升级操作过程: 1.下载最新 ...

  3. 查找k8s版jenkins-slave官方镜像

    官方镜像非常多,如果查找某个单词没有找到的话,可以换一个词查找,总之各种非常的多,带maven.djk.kubectl工具的镜像,都去试试吧, 从下面查找结果中可以看到,还有centos版的jenki ...

  4. PL/SQL无法显示字段可以为NULL还是不能为NULL

    今天用mybatis操作oracle,用PL/SQL看到数据表的字段,明明都是可以为NULL的字段,各个字段都报错,ORA-01400 字段不能为NULL. 后面请教了同事和朋友,才知道这是PL/SQ ...

  5. NODE_ENV=production 环境变量设置

    "start": "NODE_ENV=production node ./bin/www"

  6. [LeetCode] 151. Reverse Words in a String 翻转字符串中的单词

    Given an input string, reverse the string word by word. For example,Given s = "the sky is blue& ...

  7. python:连接Oracle数据库后控制台打印中文为??

    打印查询结果,中文显示为了??? [('72H FCR', '2.0'), ('?????', '8.0')] E:\Python35\Lib\site-packages中新增文件: sitecust ...

  8. 如何用Docker部署Spring Boot项目

    1.idea中安装docker插件: 2.新建DockerFile,内容如下. # 基础镜像使用java FROM java:8 # 作者 MAINTAINER vic <test@163.co ...

  9. docker下安装nginx并实现https访问

    一.启动容器 docker run --detach --name wx-nginx -p 443:443 -p 80:80 -v /home/nginx/data:/usr/share/nginx/ ...

  10. 前端HTML学习心得

    学习最好的效果就是理论加实践--Hanks!!!(给大家打鸡血的哈哈哈) 前面的学习我教大家怎么搭建简单的前端开发环境,现在我教大家怎么使用工具学习(从入门到放弃哈哈,不不不,这是以前的我,现在我下了 ...