MySQL启动过程详解一:启动整体流程

MySQL启动流程如下:

  1. 设置进程名

  2. 处理配置文件及启动参数以及部分模块初始化,这包括:

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,退出

  1. 初始化内部系统变量,timezone & replfilter & binlogfilter & global mysqlbinlog 对象的mutex, default storage engine 等等

  2. 信号系统初始化

  3. 设置栈大小

  4. 配置了 –user 是检查user,并修改mysql各目录的 user

  5. 设置 networking dir

  6. server-id 设置

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

  1. UUID的设置,并将其添加到 sid_map 中

11. GTID的处理。获取 gtid_purged 和 gtid_executed的值。

  1. purge binlog files。

  2. network初始化,初始化 mysql connection acceptor

  3. save pid file

15. 读取优化器成本模型配置表

  1. 初始化 show status 中使用的 all_status_vars[] 数组

  2. 检查 binlog cache size 和 binlog stmt cache size 是否超过了 max_binlog_cache_size 和 max_binlog_stmt_cache_size

  3. 设置 slave_skip_errors,初始化 slave 结构

  4. 初始化 information_schema_acl

20. 执行 ddl_log recovery()

  1. 创建 thread handle manager 线程

  2. 创建 压缩 gtid_executed 表的压缩线程

  3. 开始处理信号

  4. 设置 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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Maven的工作机制

    Maven是 Apache 软件基金会组织维护的一款专门为 Java 项目提供 构建和 依赖管理支持的工具。 ·首先, Maven核心程序:负责Maven的总体调度,具体操作使用的…

    数据库 2023年6月16日
    077
  • 动手实验查看MySQL索引的B+树的高度

    一:文中几个概念 h:统称索引的高度;h1:主键索引的高度;h2:辅助索引的高度;k:非叶子节点扇区个数。 二:索引结构 叶子节点其实是双向链表,而叶子节点内的行数据是单向链表,该…

    数据库 2023年6月14日
    098
  • 分库分表真的适合你的系统吗?聊聊分库分表和NewSQL如何选择

    曾几何时,”并发高就分库,数据大就分表”已经成了处理 MySQL 数据增长问题的圣经。 面试官爱问,博主爱写,考生爱背诵,似乎形成了一个闭环。 [En] I…

    数据库 2023年5月24日
    0110
  • MVCC多版本并发控制的理解

    前置知识 当前读与快照读 当前读什么是当前读:读取的是 最新的数据,不会读到老数据。 何时&…

    数据库 2023年6月14日
    076
  • 学习笔记——Django项目中的结果集、分页

    2022-10-01 结果集的含义: 结果集就是在查询过程中,返回的一个列表的集合。 常见的结果集在一些函数中查询会返回,具体包括的函数有: filter、exclude、orde…

    数据库 2023年6月14日
    059
  • Java韩顺平

    慢慢更新 什么是程序 程序是有序指令的集合 CMD编译执行Java文件 编译:javac 文件名.java执行:java 文件名 文件夹地址栏 输入 CMD 弹出本文件夹命令行 J…

    数据库 2023年6月11日
    057
  • MySQL查询性能优化七种武器之链路追踪

    MySQL优化器可以生成Explain执行计划,我们可以通过执行计划查看是否使用了索引,使用了哪种索引? 但我们并不确切地知道为什么使用这个索引。 [En] But we don&…

    数据库 2023年5月24日
    072
  • 磁盘空间满,如何处理?

    作为运维人员,磁盘空间报警是最寻常遇到的情况,那么遇到空间如何处理呢?这里介绍一下处理办法及处理思路。 操作系统:centos系统 、Ubuntu 1 定位目录 收到空间报警信息,…

    数据库 2023年6月14日
    085
  • Host-Only模式下虚拟机无法联网问题

    环境: 镜像:Linux CentOS7——————————…

    数据库 2023年6月11日
    092
  • Docker简介

    1.什么是Docer 在计算机的世界中,容器拥有一段漫长且传奇的历史。容器与管理程序虚拟化 (hypervisor virtualization,HV)有所不同,管理程序虚拟化通过…

    数据库 2023年6月14日
    094
  • 2022-8-27 vue 第一天

    什么是vue? Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建…

    数据库 2023年6月14日
    073
  • MySQL InnoDB索引原理

    数据库与I/O原理 数据会持久化到磁盘,查询数据是就会有I/O操作,相对于缓存操作,I/O操作的时间成本相当高昂。 I/O操作的基本单位是一个磁盘页面,比如16KB的页面大小。当数…

    数据库 2023年6月14日
    090
  • asp.net(C#)接MYSQL8.0版本报错的处理方法

    由于新的操作系统没有安装mysql,项目中需要使用到,于是安装了最新版本的mysql8.0.28(我安装的是社区版),如果你的项目是老项目,使用的mysql插件是比较老的版本,安装…

    数据库 2023年5月24日
    0190
  • Python第五十一天 python2升级为python3

    Python第五十一天 python2升级为python3 公司使用的生产环境系统是centos7,所以这里以centos7系统为基础,讲解将python2升级为python3的方…

    数据库 2023年6月9日
    074
  • 使用MobaXterm发布服务器项目文件

    注:笔记旨在记录 一、使用MobaXterm登录服务器 二、后端发布 三、前端发布 一、使用MobaXterm登录服务器 打开MobaXterm,点击左上角Session->…

    数据库 2023年6月16日
    0113
  • 最小化安装killall不可用

    最小化安装killall不可用 最小化安装 Centos7.4后,发现killall命令不可用使用了以下命令,查看软件包名: yum search killall 查找后发现应使用…

    数据库 2023年6月15日
    076
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球