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.mzph.cn/news/780133.shtml

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

相关文章

【ENSP】交换机和路由器之间实现静态路由

1.概念 三层交换机只能在Vlanif逻辑口配置iP地址 路由器的每一个端口都是另外一个网段 2.实现方法 交换机允许对应vlan通行,配置vlanif的ip地址,做静态路由 路由器,进接口配置对应的ip,路由器和交换机相连的口,进入他的…

文心一言 VS 讯飞星火 VS chatgpt (225)-- 算法导论16.3 7题

七、推广赫夫曼算法,使之能生成三进制的码字(即码字由符号0、1、2组成),并证明你的算法能生成最优三进制码。如果要写代码,请用go语言。 文心一言: 推广赫夫曼算法以生成三进制码字需要对算法进行一定的修改,确保在每…

力软框架打开新的对话框,点击对话框确认按钮的事件AcceptClick的方法

// 原来在力软框架下,点击哪个确认按钮的时候 top.frames[iframeId].AcceptClick直接用这个方法就可以了 ,那个方法是直接返回方法的但是不知道是什么情况。如图二所示。死活就返回了ifram标签不知道是什么原因,就获取不到对话框里边自己定义…

nginx界面管理工具之nginxWebUI 搭建与使用

nginx界面管理工具之nginxWebUI 搭建与使用 一、nginxWebUI 1.nginx网页配置工具 官网地址: http://www.nginxwebui.cn 源码地址:https://git.chihiro.org.cn/chihiro/nginxWebUI 2.功能说明 本项目可以使用WebUI配置nginx的各项功能, 包括http协议转发, tcp协议…

帆软报表踩坑日记

最近公司项目要是使用报表,公司使用的是帆软这个国产软件,自己也是学习使用,在使用的过程中记一下问题以及解决方式 公司使用的是帆软8这个版本,比较老了。 首先是表格中的扩展,就是当我们根据数据库查询数据然后放到表…

【Vue3源码学习】— CH2.5 reactiveEffect.ts:Vue 3响应式系统的核心

reactiveEffect.ts:Vue 3响应式系统的核心 1. 什么是 reactiveEffect?2. 核心机制2.1 依赖收集(Track)2.2 触发更新(Trigger)2.3 效果范围(effectScope) 3. 源码解析 —— track3.1 …

云服务器16核64G租用优惠价格500元1个月、5168元一年,35M带宽

京东云16核64G服务器租用价格500元1个月、1500元3个月、2585元6个月、5168元一年,配置为16C64G-450G SSD系统盘-35M带宽-8000G月流量 华北-北京。京东云16核64G服务器优惠活动 atengyun.com/go/jd 链接打开如下图: 京东云16核64G服务器租用价格 京东云&a…

SD 修复 Midjourney 有瑕疵照片

Midjourney V6 生成的照片在质感上有了一个巨大的提升。下面4张图就是 Midjourney V6 生成的。 如果仔细观察人物和老虎的面部,细节真的很丰富。 但仔细观察上面四张图的手部细节,就会发现至少有两只手是有问题的。这也是目前所有 AI 绘图工具面临的问题…

【Roadmap to learn LLM】Large Language Models in Five Formulas

by Alexander Rush Our hope: reasoning about LLMs Our Issue 文章目录 Perpexity(Generation)Attention(Memory)GEMM(Efficiency)用矩阵乘法说明GPU的工作原理 Chinchilla(Scaling)RASP(Reasoning)结论参考资料 the five formulas perpexity —— generationattention —— m…

stm32定时器中断函数回调函数

方式一:stm32定时器中断可以直接在硬件中断函数TIM3_IRQHandler执行。 在HAL库中可以注册回调函数,在定时器中断发生时调用注册的函数,这样可以统一接口,大大提高函数可读性,和硬件解耦提高程序可移植性。 使用过程如…

vue中使用图片url直接下载图片

vue中使用图片url直接下载图片 // 下载图片downloadByBlob(url, name) {let image new Image()image.setAttribute(crossOrigin, anonymous)image.src urlimage.onload () > {let canvas document.createElement(canvas)canvas.width image.widthcanvas.height image…

Django屏蔽Server响应头信息

一、背景 最近我们被安全部门的漏洞扫描工具扫出了一个服务端口的漏洞。这个服务本身是一个Django启动的web服务,并且除了登录页面,其它页面或者接口都需要进行登录授权才能进行访问。 漏洞扫描信息和提示修复信息如下: 自然这些漏洞如何修复&#xff0c…

美国裸机云多IP服务器:独享IP,多C段,高速稳定,站群优选!

美国裸机云多IP服务器,近年来在站群运营、网络架构优化等领域逐渐崭露头角,成为许多企业和个人用户的优选方案。那么,这种服务器究竟有何特别之处呢?下面,我们就来详细科普一下。 首先,我们来了解一下什么是裸机云多I…

太阳能发电园区3D可视化:揭秘绿色能源新纪元

在科技飞速发展的今天,绿色能源已成为推动社会进步的重要力量。太阳能发电作为绿色能源的重要代表,正在全球范围内掀起一股清洁能源的革命浪潮。 太阳能发电园区作为集中展示太阳能发电技术和应用的场所,其规模之大、设备之复杂,常…

Linux部分命令

目录 1.文件介绍 2.ls命令 3.目录命令 4.相对路径以及绝对路径 5.命令创建目录(文件夹) 6.which命令 7.find命令 8.grep命令 9.wc命令 10.echo、tail、重定向符 1.文件介绍 和window不同,Linux没有盘路径,所有的文件都存…

VSCode在文件生成添加作者,创建时间、最后编辑人和最后编辑时间等信息

一、安装插件 我使用的是 korofileheader 二、配置文件 左下角点击设置图标—设置—输入"ext:obkoro1.korofileheader"—点击"在setting.json中编辑" 进入后会自动定位到你添加信息的地方 "Author": "tom", "Date": "…

Netty核心原理剖析与RPC实践16-20

Netty核心原理剖析与RPC实践16-20 16 IO 加速:与众不同的 Netty 零拷贝技术 今天的课程我们继续讨论 Netty 实现高性能的另一个高阶特性——零拷贝。零拷贝是一个耳熟能详的词语,在 Linux、Kafka、RocketMQ 等知名的产品中都有使用,通常用于…

uniapp开发App——登陆流程 判断是否登陆,是,进入首页,否,跳转到登录页

一、登陆流程 文字描述:用户进入App,之后就是判断该App是否有用户登陆过,如果有,直接进入首页,否则跳转到登陆页,登陆成功后,进入首页。 流程图如下: 二、在uniapp项目中代码实现 实…

代码随想录算法训练营第二十四天(回溯1)|77. 组合(JAVA)

文章目录 回溯理论基础概念类型回溯模板 77. 组合解题思路源码 回溯理论基础 概念 回溯是递归的副产品,本质上是一种穷举 回溯解决的问题可以抽象为一种树形结构 类型 回溯主要用来解决以下问题 组合问题:N个数里面按一定规则找出k个数的集合切割问…

如何使用Docker打包构建Java项目然后部署发布?

前言 今天我们来讲下如何使用Docker打包构建Java项目并且完成部署发布。 前期准备,需要安装好docker。 以及一个需要安装好Maven的镜像,可以参考下面的文章。 构建一个包含mvn命令的Java 17基础镜像-CSDN博客 一、打包构建Java项目镜像 1、创建Jav…