MySQL启动流程如下:
-
设置进程名
-
处理配置文件及启动参数以及部分模块初始化,这包括:
2.1 从配置文件中读取选项,把他们放在 argc 和 argv 已有的参数之前
2.2 处理标记为 early 的命令行选项,这其中包括:performance_schema,–help相关,bootstrap相关的 options
2.3 初始化 sql_statement_names 数组
2.4 将所有的系统变量添加到 system_variable_hash 表中
2.5 调整相关的 options,包括 open_file_limits,max_connections,table_cache_size,table_definition_cache
2.6 error log,审计接口,查询日志模块[query log, slow log]的初始化
2.7 options解析失败,err输出到 stderr,退出
-
初始化内部系统变量,timezone & replfilter & binlogfilter & global mysqlbinlog 对象的mutex, default storage engine 等等
-
信号系统初始化
-
设置栈大小
-
配置了 –user 是检查user,并修改mysql各目录的 user
-
设置 networking dir
-
server-id 设置
9. 核心模块的启动,包括存储引擎等
- UUID的设置,并将其添加到 sid_map 中
11. GTID的处理。获取 gtid_purged 和 gtid_executed的值。
-
purge binlog files。
-
network初始化,初始化 mysql connection acceptor
-
save pid file
15. 读取优化器成本模型配置表
-
初始化 show status 中使用的 all_status_vars[] 数组
-
检查 binlog cache size 和 binlog stmt cache size 是否超过了 max_binlog_cache_size 和 max_binlog_stmt_cache_size
-
设置 slave_skip_errors,初始化 slave 结构
-
初始化 information_schema_acl
20. 执行 ddl_log recovery()
-
创建 thread handle manager 线程
-
创建 压缩 gtid_executed 表的压缩线程
-
开始处理信号
-
设置 super read only
25. connection acceptor 循环接受客户端连接
MySQL的入口函数位于 sql/main.cc 文件中,源码解析如下:
mysqld_admin代码如下,去除了psi 和 win32 部分:
Original: https://www.cnblogs.com/juanmaofeifei/p/16111355.html
Author: 卷毛狒狒
Title: MySQL启动过程详解一:启动整体流程
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/590941/
转载文章受原作者版权保护。转载请注明原作者出处!