MySQL的启动函数在 sql/main.cc 文件中。

main.cc:

extern int mysqld_main(int argc, char **argv);

int main(int argc, char **argv)
{
return mysqld_main(argc, argv);
}

主函数中只进行了调用mysqld_main函数这么一个操作。

从这个函数开始到结束,就完成了mysqld的启动操作。

mysqld_main函数位于 sql/mysqld.cc 文件内,其中的重要操作如下:

处理配置文件及启动参数等

第4442至4446行:

  if (load_defaults(MYSQL_CONFIG_NAME, load_default_groups, &argc, &argv))
{
flush_error_log_messages();
return 1;
}

继续处理参数变量

第4468行:

ho_error= handle_early_options();

第4576至4577行:

  /* Initialize audit interface globals. Audit plugins are inited later. */
mysql_audit_initialize();

日志系统初始化

第4583至4587行:

  /*
Perform basic query log initialization. Should be called after
MY_INIT, as it initializes mutexes.
*/
query_logger.init();

初始化很多系统内部变量

第4608至4609行:

  if (init_common_variables())
unireg_abort(MYSQLD_ABORT_EXIT); // Will do exit

信号系统初始化

第4611行:

  my_init_signals();

核心模块启动,包括存储引擎等

第4766至4767行:

  if (init_server_components())
unireg_abort(MYSQLD_ABORT_EXIT);

第4927至4930行:

  if (init_ssl())
unireg_abort(MYSQLD_ABORT_EXIT);
if (network_init())
unireg_abort(MYSQLD_ABORT_EXIT);

终端重定向处理

未找到:

reopen_fstreams();

网络系统初始化

第4929至4930行:

  if (network_init())
unireg_abort(MYSQLD_ABORT_EXIT);

创建信号句柄

第5031至5038行:

#ifndef _WIN32
// Start signal handler thread.
start_signal_handler();
#endif if (opt_bootstrap)
{
start_processing_signals();

状态变量初始化

第4988行:

  init_status_vars();

Binlog相关检查初始化

第4993至5009行:

  check_binlog_cache_size(NULL);
check_binlog_stmt_cache_size(NULL); binlog_unsafe_map_init(); /* If running with bootstrap, do not start replication. */
if (!opt_bootstrap)
{
// Make @@slave_skip_errors show the nice human-readable value.
set_slave_skip_errors(&opt_slave_skip_errors); /*
init_slave() must be called after the thread keys are created.
*/
if (server_id != 0)
init_slave(); /* Ignoring errors while configuring replication. */
}

创建关闭线程

第5059行:

  create_shutdown_thread();

启动句柄管理

第5061行:

  start_handle_manager();

服务监听线程创建

未找到:

handle_connections_sockets();

服务监听线程创建

未找到:

handle_connections_sockets();

从这里开始,服务器启动线程一直等待,知道shutdown后,继续向下执行

wait until cleanup is done ...

未找到:

mysql_mutex_lock(&LOCK_thread_count);
while (!ready_to_exit)
mysql_cond_wait(&COND_thread_count, &LOCK_thread_count);
mysqld_mutex_unlock(&LOCK_thread_count);

第5195至5196行:

clean_up(1);
mysqld_exit(0);

MySQL学习笔记——MySQL5.7的启动过程(一)的更多相关文章

  1. Android(java)学习笔记162:Android启动过程(转载)

    转载路径为: http://blog.jobbole.com/67931/ 1. 关于Android启动过程的问题: 当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么样 ...

  2. Android(java)学习笔记105:Android启动过程(转载)

    转载路径为: http://blog.jobbole.com/67931/ 1. 关于Android启动过程的问题: 当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么样 ...

  3. Spring Boot 学习笔记一(SpringBoot启动过程)

    SpringBoot启动 Spring Boot通常有一个名为*Application的入口类,在入口类里有一个main方法,这个main方法其实就是一个标准的java应用的入口方法. 在main方法 ...

  4. MySQL学习笔记-数据库文件

    数据库文件 MySQL主要文件类型有如下几种 参数文件:my.cnf--MySQL实例启动的时候在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还介绍了参数类 ...

  5. 数据库MySQL学习笔记高级篇

    数据库MySQL学习笔记高级篇 写在前面 学习链接:数据库 MySQL 视频教程全集 1. mysql的架构介绍 mysql简介 概述 高级Mysql 完整的mysql优化需要很深的功底,大公司甚至有 ...

  6. 一千行MySQL学习笔记 (转)

    出处:  一千行MySQL学习笔记 /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权 ...

  7. mysql basic operation,mysql总结,对mysql经常使用语句的详细总结,MySQL学习笔记

    mysql> select * from wifi_data where dev_id like "0023-AABBCCCCBBAA" ; 1.显示数据库列表.show d ...

  8. Mysql学习笔记(一)数据类型

    原文:Mysql学习笔记(一)数据类型 学习内容: Mysql基本数据类型. 1.数字类型.. i.整型     Mysql数据类型             含义(有符号)     tinyint(m ...

  9. MySQL学习笔记-事务相关话题

    事务机制 事务(Transaction)是数据库区别于文件系统的重要特性之一.事务会把数据库从一种一致状态转换为另一个种一致状态.在数据库提交工作时,可以确保其要么所有修改都已经保存了,要么所有修改都 ...

随机推荐

  1. from module_name import var

    ######## a.py ######## aa = "Hello World" ####### b.py ######## from a import aa print aa  ...

  2. LeetCode刷题分类-解题模式

    模式1:如果是已经排好序的序列(数组,链表,或是矩阵),我们就可以用二分的变种或是双指针策略 模式2: 如果我们需要处理n个元素中:顶部/最大/最小/最接近的k个元素时,我们就可以用堆来解决了. 模式 ...

  3. 007_项目制作拍摄视频篇之_《基于ARM与ZigBee的实验室签到系统》

    研究的背景和意义: 随着社会生活节奏的加快,科技日新月异,信息更新迅速,人们之间的交流也变得越来越频繁,社会群体乃至政府之间的交流也朝着轻松.快速.容易管理和控制的方向发展,这种信息交流方式已经逐步得 ...

  4. Hive的自定义函数

    功能: 通过人的生日,算出人的生肖和星座. 先在hive中创建一个表: 往这表中导入数据: 导入的数据为: 可以成功查询: 编写自定义函数代码:如下 package cn.tendency.wenzh ...

  5. CSP-S 2019 D1T2 括号树

    题目链接:[https://www.luogu.com.cn/problem/P5658] 思路: 这道题不难.(为什么我在考场上一点思路也没有??) 假设我们已经处理到树上的节点u(假设1为根节点) ...

  6. 如何自定义 GNOME 3 桌面?

    作者: Magesh Maruthamuthu 译者: LCTT 郑 | 2019-08-22 00:02   评论: 2 收藏: 1 我们收到很多来自用户的电子邮件,要我们写一篇关于 GNOME 3 ...

  7. 【csp模拟赛九】--dfs2

    dfs 代码: #include<algorithm> #include<iostream> #include<cstdio> using namespace st ...

  8. surprise库官方文档分析(二):使用预测算法

    1.使用预测算法 Surprise提供了一堆内置算法.所有算法都派生自AlgoBase基类,其中实现了一些关键方法(例如predict,fit和test).可以在prediction_algorith ...

  9. git 忽略文件 目录

    git status 这里面的iml文件类似 eclipse .project文件 ,不能删除 .删除就不能识别项目了. 通过git .gitignore文件 过滤 git status  gitig ...

  10. 图灵学院java架构课程

    1.wps文档地址 https://docs.qq.com/doc/DRVNLUndvTmFSdEhO 2.百度网盘地址 https://pan.baidu.com/s/1uxaTzJZHKrsw_H ...