MySQL源码之mysqld启动

时间:2022-09-22 13:57:58
启动mysqld,并进入listen阶段
 
函数调用栈:
mysqld_main():  
     my_init();初始化变量,锁,错误串
     my_thread_global_init(): 初始化互斥锁,信号量,线程独享变量
     load_defaults();查找my.cnf
     sys_var_init();初始化system variables
     init_common_variables:初始化mutex,status变量
     init_signals:初始化信号量处理
     init_server_components:装载innodb引擎
     network_init: 初始化网络组件
     start_signal_handler:处理信号的线程
     execute_ddl_log_recovery:执行innodb的recovery
     handle_connections_sockets:开始处理connection请求
 
my_init():
     文件/目录 umask
     结构化标准IO的文件handler:MYSQL_FILE
     init_glob_errs():初始化global错误文本数组
     获取home环境变量
 
 my_thread_global_init():
     1. 线程独享变量:
          [pthread_key]THR_KEY_mysys来控制线程独享结构体变量[st_my_thread_var:包含线程ID,error,锁等信息],后续都通过              
                                     pthread_getspecific在线程内进行获取。
      2. init全局互斥锁:THR_LOCK_malloc,THR_LOCK_open,THR_LOCK_charset,THR_LOCK_threads,THR_LOCK_lock,
                              THR_LOCK_isam,
                                   THR_LOCK_myisam,THR_LOCK_myisam_mmap,THR_LOCK_heap,THR_LOCK_net,
      3. init全局信号量:THR_COND_threads
      4. 创建一个样本thread,随即就结束【dummy_thread】
 
  
load_defaults():
     获取my.cnf的候选目录包括:/etc/my.cnf  /etc/mysql/my.cnf  $MYSQL_HOME/my.cnf  ~/my.cnf ./my.cnf
 
 
sys_var_init():
     系统中所有的system variables都实例化成继承类[sys_var]的static对象,并加入到链表中sys_var_chain all_sys_vars中,
     最后通过链接全部加入到[system_variable_hash]hash表中。
     
init_common_variables():
     init了大量的mutex和condition:还没有看明白是啥用途
     初始化mysqld.cc定义的全局变量
     初始化默认storage engine
     所有show status 需要的变量加入到all_status_vars
  
init_server_components():
     初始化user_state,client_state,thread_state.
     装载innodb引擎
     
network_init():
     初始化网络接口,建立socket,并开始listener。
 
start_signal_handler():
     创建处理signal的一个独立线程
 
handle_connections_sockets:
     开始处理connection请求,使用epoll socket描述符的方式listen connect request,
并对没有请求连接创建一个THD对象,并作为一个新thread的参数。

MySQL源码之mysqld启动的更多相关文章

  1. 【MySQL源码】源码安装和启动mysql

    --[MySQL源码]源码安装和启动mysql --------------------------------------2014/08/19 本机环境:ubuntu12.04,fedora-17 ...

  2. mysql源码分析-启动过程

    mysql源码分析-启动过程 概要 # sql/mysqld.cc, 不包含psi的初始化过程 mysqld_main: // 加载my.cnf和my.cnf.d,还有命令行参数 if (load_d ...

  3. mysql源码解读之配置文件

    要研究mysql,最好的资源莫过于源码了,所以本人打算通过调试源码的方式来深入理解mysql的点点滴滴.搭建mysql调试环境很简单,从官方下载mysql源码,利用cmake工具生成工程即可.为了方便 ...

  4. MySQL源码分析以及目录结构 2

    原文地址:MySQL源码分析以及目录结构作者:jacky民工 主要模块及数据流经过多年的发展,mysql的主要模块已经稳定,基本不会有大的修改.本文将对MySQL的整体架构及重要目录进行讲述. 源码结 ...

  5. MySQL源码分析以及目录结构

    原文地址:MySQL源码分析以及目录结构作者:jacky民工 主要模块及数据流经过多年的发展,mysql的主要模块已经稳定,基本不会有大的修改.本文将对MySQL的整体架构及重要目录进行讲述. 源码结 ...

  6. mysql 源码调试方法

     http://blog.itpub.net/29254281/viewspace-1847415/ 其中吕海波老师分享的内容是 <调试Oracle二三例:调试技术在日常运维中的应用>其中 ...

  7. 【转】Ubuntu编译安装mysql源码

    主要参考了下面两篇文章 http://forum.ubuntu.org.cn/viewtopic.php?t=330121 http://www.linuxidc.com/Linux/2011-09/ ...

  8. Mysql 源码编译教程贴

    题外话:这是一篇教程贴,不仅学的是mysql的编译,还是一些编译的知识.我也是一个菜鸟,写一些感悟和心得,有什么问题可以批评指正,谢谢! 如果只是为了安装请移到我的另一篇安装贴: Mysql安装贴 环 ...

  9. mysql源码安装(5&period;1)

    下载mysql源码包并解压.wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.73.tar.gztar -zxvf mysql-5 ...

随机推荐

  1. Spring拦截机制之后端国际化心得

    需求 前端请求的header里带有Prefer_Lang参数,向后端传递国际化信息,后端需要在处理业务之前(建立拦截机制),将Prefer_Lang保存于线程上下文. 思路分析 初次接收该需求时,为了 ...

  2. DLL放在指定目录 以及设置dll调用路径

    一.DLL放在指定目录 在编写C# winform程序中,不免一个项目会有多个工程文件,而这些工程文件之间是相互引用的,所以不想将工程的生成结果(exe或者dll)放在当前工程bin目录下的Debug ...

  3. POJ 1470 Closest Common Ancestors&lpar;LCA 最近公共祖先&rpar;

    其实这是一个裸求LCA的题目,我使用的是离线的Tarjan算法,但是这个题的AC对于我来说却很坎坷……首先是RE,我立马想到数组开小了,然后扩大了数组,MLE了……接着把数组调整适当大小,又交了一发, ...

  4. ionic2中使用datetime组件如何默认设置当前时间?

    HTML: <ion-item> <span item-left style="min-height: 27px;">存款日期/时间</span&gt ...

  5. Python爱好者社区历史文章列表(每周append更新一次)

    2月22日更新:   0.Python从零开始系列连载: Python从零开始系列连载(1)——安装环境 Python从零开始系列连载(2)——jupyter的常用操作 Python从零开始系列连载( ...

  6. BZOJ 1008--&lbrack;HNOI2008&rsqb;越狱(容斥&amp&semi;快速幂)

    1008: [HNOI2008]越狱 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 12593  Solved: 5439[Submit][Status ...

  7. Flink学习笔记-新一代Flink计算引擎

    说明:本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKh ...

  8. Core Animation Manages Your App’s Content

    Core Animation 是对现有图片的操作函数. https://developer.apple.com/library/content/documentation/Cocoa/Conceptu ...

  9. 计算机文件基本上分为二种:二进制文件和 ASCII(也称纯文本文件)

    文本文件是可以看到的字符, 二进制文件是不可视字符,如图片. 二进制文件: 包含在 ASCII及扩展 ASCII 字符中编写的数据或程序指令的文件.计算机文件基本上分为二种:二进制文件和 ASCII( ...

  10. 获取HTML元素位置--js学习笔记

    对于不同的元素,不同的浏览器,offsetParent含义不同,有时,指的是直接包含的元素,有时指的是HTML元素,有时不存在offsetParent. 如果所研究的元素没有offsetParent, ...