zoukankan      html  css  js  c++  java
  • MySQL源码之mysqld启动

    启动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的参数。
  • 相关阅读:
    STM32的“外部中断”和“事件”区别和理解
    非线性函数的最小二乘拟合——兼论Jupyter notebook中使用公式 [原创]
    Jupyter 快捷键总结
    自制导纳信号发生器 [原创cnblogs.com/helesheng]
    Verilog HDL数组(存储器)操作
    一个有趣的异步时序逻辑电路设计实例 ——MFM调制模块设计笔记
    用NI的数据采集卡实现简单电子测试之6——数字I/O及测试平台
    用NI的数据采集卡实现简单电子测试之5——压控振荡器的测试
    用NI的数据采集卡实现简单电子测试之4——半导体温度传感器
    黑客用我们服务器挖矿了
  • 原文地址:https://www.cnblogs.com/xpchild/p/3694782.html
Copyright © 2011-2022 走看看