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

news2024/10/10 7:13:41

集中在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.coloradmin.cn/o/1554037.html

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

相关文章

GitLab更新失败(Ubuntu)

在Ubuntu下使用apt更新gitlab报错如下: An error occurred during the signature verification.The repository is not updated and the previous index files will be used.GPG error: ... Failed to fetch https://packages.gitlab.com/gitlab/gitlab-ee/ubuntu/d…

双指针算法_和为 s 的两个数_C++

题目: 输入一个递增排序的数组,和一个数字s,在数组中查找两个数,使得它们的和正好是数字s,如果有多对数字的和等于s,只需要任意输入一对即可 算法原理: 利用单调性!使用双指针算法&…

STL —— vector(1)

博主首页: 有趣的中国人 专栏首页: C专栏 本篇文章主要讲解vector使用的相关内容 1. vector简介 vector 是 C 标准库中的一个容器类模板,它提供了动态数组的功能,可以方便地管理和操作元素的集合。下面是关于 vector 的一些基本信…

基于unbantu的nginx的配置

目录 前言: 1.安装nginx并进行测试 1.1使用nginx -v 命令查看版本 1.2开启服务 查看端口 1.3测试 2.nginx的静态资源访问配置 2.1创建静态资源存放的目录 2.2写入目录中测试文件对应的内容 2.3修改配置文件 2.4 测试 3.虚拟主机配置 3.1创建目录 3.2写入测试…

[flask]http请求//获取请求体数据

import jsonfrom flask import Flask, requestapp Flask(__name__)app.route("/form1", methods["post"]) def form1():"""获取客户端请求的请求体[表单]:return:""""""获取表单数据请求url:&qu…

【mysql】centos7安装mysql8

目录 1. 下载安装包2. 解压tar包3. 安装4. 查看安装完成后的安装包5. 初始化mysql6. MySQL设置 1. 下载安装包 1.官网地址2.mysql-8.0.35-1.el7.x86_64.rpm-bundle.tar3.放到服务器的目录(这里是/opt/mysql) 2. 解压tar包 1.tar -xvf 可以解压tar.xz后…

批量下载网页文章软件大全

在信息爆炸的时代,网络上充斥着海量的文章和内容,有时我们希望能够批量下载网页上的文章,以便离线阅读或进行进一步处理。为了满足这一需求,出现了许多网页文章批量下载工具,它们能够帮助用户快速、方便地获取网页上的…

【IC前端虚拟项目】write_path子模块DS与RTL编码

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 read_path的代码完成之后,就可以开始整个项目里复杂度最高、bug最多、时序收敛最为困难的模块——write_path的开发了!我自己写过两次这个虚拟项目,每次都是在这里耗时最久,所以大家也可以挑战一下自…

使用AOP实现打印日志

首先创建annotation.SystemLog类: package com.gjh.annotation;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;Target(ElementType.METHOD…

蓝桥杯-卡片换位

solution 有一个测试点没有空格&#xff0c;要特别处理&#xff0c;否则会有一个测试点运行错误&#xff01; 还有输入数据的规模在变&#xff0c;小心顺手敲错了边界条件 #include<iostream> #include<string> #include<queue> #include<map> #incl…

JS new Array.fill(new Array()) 创建二维数组 fill方法的坑

我们通常会通过如下方式来创建一个二维数据&#xff1a; const arr new Array(5).fill(new Array(2).fill(0))我们如果想要修改其中一个元素的值 arr[0][0] 1输出&#xff1a;   我们只想给arr[0][0]赋值&#xff0c;但是每一行数组为0的下标元素的值全部改变了&#xf…

Mysql-实战数据备份与恢复

文章目录 备份类型备份内容备份工具mysqldump备份 实战案例&#xff1a;恢复误删除的表准备工作2:30完全备份完全备份后更新数据表10:00误删students表需要恢复还原的状态开始还原恢复 为什么要备份&#xff1f; 备份是为了&#xff1a;灾难恢复&#xff1a;硬件故障、软件故障…

基于springboot实现房屋租赁系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现房屋租赁系统演示 摘要 社会的发展和科学技术的进步&#xff0c;互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱&#xff0c;也逐渐进入了每个用户的使用。互联网具有便利性&#xff0c;速度快&#xff0c;效率高&#xff0c;成本…

转型数据报表开发:奥威BI学习网站如何助你一臂之力?

介绍&#xff1a;奥威BI是一款商业智能工具&#xff0c;专为中国企业设计&#xff0c;提供数据可视化分析功能。以下是关于奥威BI的一些详细信息&#xff1a; 自助式敏捷BI分析&#xff1a;用户可以通过简单的操作&#xff0c;如拖拉拽&#xff0c;制作出炫酷的可视化报表。这种…

前端超分辨率技术应用:图像质量提升与场景实践探索-设计篇

超分辨率&#xff01; 引言 在数字化时代&#xff0c;图像质量对于用户体验的重要性不言而喻。随着显示技术的飞速发展&#xff0c;尤其是移动终端视网膜屏幕的广泛应用&#xff0c;用户对高分辨率、高质量图像的需求日益增长。然而&#xff0c;受限于网络流量、存储空间和图像…

【软件安装】(十四)Ubuntu22.04安装Psensor硬件监视器

一个愿意伫立在巨人肩膀上的农民...... Ubuntu系统硬件运行查询输入指令太繁琐&#xff0c;终端展示不直观&#xff0c;因此这款具有可视化监控Ubuntu系统下当前电脑的硬件CPU&#xff08;中央处理器&#xff09;、GPU&#xff08;显卡&#xff09;和硬盘等温度等功能&#xff…

HCIP(DSVPN)实验

HCIP&#xff08;DSVPN&#xff09;实验 一&#xff0c;实验要求&#xff1a; 1、r5为isp&#xff0c;只能进行ip地址的配置&#xff0c;其所有ip地址均为共有ip地址 2、r1和r5使用ppp的PAP认证&#xff0c;r5为主认证方 r2和r5之间使用ppp的chap认证&#xff0c;r5为主认证方…

vue基础教程(4)——十分钟吃透vue路由router

同学们可以私信我加入学习群&#xff01; 正文开始 前言一、路由概念二、路由使用三、创建路由对应的组件四、给整个项目一个入口总结 前言 前面的文章运行成功后&#xff0c;页面显示如下&#xff1a; 在这个页面中&#xff0c;点击Home和About都会切换右面的页面内容&#…

HTML网站的概念

目录 前言&#xff1a; 1.什么是网页&#xff1a; 2.什么是网站&#xff1a; 示例&#xff1a; 3.服务器&#xff1a; 总结&#xff1a; 前言&#xff1a; HTML也称Hyper Text Markup Language&#xff0c;意思是超文本标记语言&#xff0c;同时HTML也是前端的基础&…

python实战之PyQt5桌面软件

一. 演示效果 二. 准备工作 1. 使用pip 下载所需包 pyqt5 2. 下载可视化UI工具 QT Designer 链接&#xff1a;https://pan.baidu.com/s/1ic4S3ocEF90Y4L1GqYHPPA?pwdywct 提取码&#xff1a;ywct 3. 可视化UI工具汉化 把上面的链接打开, 里面有安装和汉化包, 前面的路径还要看…