mysql5.7 源码分析--初始化

集中在sql\mysqld.cc文件的mysqld_main函数中():

主程序入口

在sql\main.cc文件中:

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

一、mysql为了跨平台,对win32系统做了单独的初始化:

主要包括:

1.my_init函数

my_init()

包括:

1)文件和文件目录权限初始化

  /* Default creation of new files */if ((str= getenv("UMASK")) != 0)my_umask= (int) (atoi_octal(str) | 0600);/* Default creation of new dir's */if ((str= getenv("UMASK_DIR")) != 0)my_umask_dir= (int) (atoi_octal(str) | 0700);

2)全局错误提示初始化

init_glob_errs();

3)全局线程和互斥锁初始化

 if (my_thread_global_init())return 1;#if defined(SAFE_MUTEX)safe_mutex_global_init();		/* Must be called early */
#endif#if defined(MY_PTHREAD_FASTMUTEX) && !defined(SAFE_MUTEX)fastmutex_global_init();              /* Must be called early */
#endif

2.windows系统的上服务初始化

主要是为了windows上的服务机制单独做处理

 if (Service.GetOS())  /* true NT family */{
.../* start the default service */start_mode= 1;Service.Init(MYSQL_SERVICENAME, mysql_service);return 0;
...}

二、mysql服务初始化

主要包括:

1.配置文件加载,读取配置文件如:stonedb.cnf

load_defaults(MYSQL_CONFIG_NAME, load_default_groups, &argc, &argv

2.解析初始化

将命令存储在sql_statement_names全局数组里,如SQLCOM_SELECT对应select

init_sql_statement_names()

3.系统变量初始化

将系统变量放入哈希表中

sys_var_init();

4.初期选项初始化

有部分系统变量需要在mysqld --initialize时使用,所以越早初始化越好,handle_early_options函数就是为了初始化这部分系统变量。

handle_early_options()

5.日志互斥锁初始化

init_error_log_mutex();

6.审计初始化

mysql_audit_initialize();

7.日志初始化

  logger.init_base();

8.mysql通用变量初始化

如所有线程的互斥锁初始化,线程缓存大小、日志名称等

init_common_variables()

9.信号初始化

my_init_signals()

10.设置线程栈大小

pthread_attr_setstacksize(&connection_attrib,my_thread_stack_size + guardize);

检查启动时用户的选项

user_info = check_user(mysqld_user)

设置以该用户运行

set_user(mysqld_user, user_info);

11.服务组件初始化

包括一些插件的初始化、默认存储引擎的初始化、最大连接数等

init_server_components()

12.UUID的创建

每个服务都应该有一个自己的UUID,如果没有的话,就创建一个

if (!opt_bootstrap)
{if (init_server_auto_options()){...
}

13.ssl初始化

如果打开openssl,就初始化ssl

init_ssl()

14.网络初始化

创建连接tcp/ip套接字、命名管道、UNIX socket(共享内存在连接时处理)

network_init()

创建pid文件

start_signal_handler()

删除tmp_table并初始化数据库级别的权限

mysql_rm_tmp_tables() || acl_init(opt_noacl)

初始化status变量

init_status_vars()

binlog初始化

check_binlog_cache_size(NULL);
check_binlog_stmt_cache_size(NULL);
binlog_unsafe_map_init();

初始化information_schema权限

initialize_information_schema_acl();

ddl日志恢复

execute_ddl_log_recovery();

创建shutdown线程

create_shutdown_thread()

创建manager线程

start_handle_manager();

开启连接处理线程

handle_connections_sockets()--unix/ handle_connections_methods()--windows

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/578368.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Docker】搭建强大易用的个人博客 - Halo

【Docker】搭建强大易用的个人博客 - Halo 前言 本教程基于绿联的NAS设备DX4600 Pro的docker功能进行搭建,采用Halo MySQL实例作为演示。 简介 Halo [ˈheɪloʊ] 是一个简洁,现代,快速且非常灵活的建站工具,它是由一位中国开…

统信 UOS V20 一键安装 Oracle 11GR2(231017)单机版

Oracle 一键安装脚本,演示 统信 UOS V20 一键安装 Oracle 11GR2(231017)单机版过程(全程无需人工干预):(脚本包括 ORALCE PSU/OJVM 等补丁自动安装) ⭐️ 脚本下载地址:…

机器人码垛机:智能仓储系统的重要组成部分

随着科技的飞速进步,机器人技术已经渗透到了许多行业领域,其中,仓储业尤为显著。机器人码垛机作为智能仓储系统的重要组成部分,不仅提高了码垛效率,还降低了人工成本和安全风险。然而,在其广泛应用的同时&a…

Linux中安装JDK17.X

1、总体概述? 该操作方式适合centos或red hat环境 2.1、在线下载JDK安装包? 通过wget命令下载JDK17.X包 wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz 如果提示:没有wget命令就安装wget yum install w…

windows@浏览器主页被篡改劫持@360篡改主页@广告和弹窗设置@极速版

文章目录 360篡改浏览器主页方法1锁定浏览器主页 方法2注册表修改 360广告和弹窗360极速版 小结 360篡改浏览器主页 如果您使用360,且不想卸载它,那么当你启动360后,它可能会篡改你的浏览器(比如edge)的主页start page为360早期可能是通过修改快捷方式的target等属性,但是现在…

WebGIS开发

1.准备工作 高德开发API注册账号&#xff0c;创建项目拿到key和密钥 高德key 2.通过JS API引入高德API <html><head><meta charset"utf-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><metaname&quo…

m脚本分析can记录文件

协助同事分析CAN日志文件&#xff0c;写了一个m脚本文件&#xff0c;帮助定位丢帧问题的发生。 log文件格式 分析代码 close all;clear;clc;%load data from a file [FileName,PathName,~] uigetfile(*.trc,Sample Dialog Box);fileID fopen([PathName FileName]); disp(Fi…

ATTCK学习笔记

ATT&CK 前言知识 威胁情报&#xff1a;一般为网络流量中或者操作系统上观察到的能高度表明计算机被入侵的痕迹&#xff0c;例如某病毒的Hash值、服务器的IP地址等等。简单来说&#xff0c;威胁情报就像是当计算机被入侵时所表现出来的某种特征&#xff0c;我们将这些威胁…

基于单片机bootloader的随笔

基于单片机bootloader的随笔 一、前言 一直觉得做产品开发需要得考虑一些安全策略&#xff0c;一般的设计固件时会进行bootloader设计&#xff0c;而设计一个高效且安全的定制Bootloader需要考虑以下几个关键因素&#xff1a; 1. 安全性 首先确保Bootloader自身的安全性&am…

Webpack生成企业站静态页面 - ajax请求

一些项目因需求不同&#xff0c;如需SEO或小项目&#xff0c;使用angular、react或vue就大材小用了。可以通过webpack、gulp这些构建工具&#xff0c;也能快速完成html页面开发&#xff0c;并且也能使用less/sass/styus等样式预编译功能&#xff0c;以及将js、html分模块、分组…

FreeRtos作业1

1.总结keil5下载代码和编译代码需要注意的事项 代码写完之后的操作流程 2.总结STM32Cubemx的使用方法和需要注意的事项 选择芯片型号 生成代码 3.总结STM32Cubemx配置GPIO的方法 4、使用定时器2让黄灯闪烁 /* USER CODE END Header */ /* Includes --------------------------…

数字孪生项目的开发工具

数字孪生项目的开发工具是实现数字孪生技术应用的关键。它们使得开发者能够创建、管理和优化数字孪生模型&#xff0c;以及与真实世界的实体进行交互。以下是一些数字孪生项目开发中常用的工具&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件…