mysql数据库启动过程源码分析

版本信息

mysql5.7.27

启动过程

sql/main.cc为启动入口,调用mysqld_main()函数

mysqld_main函数的启动流程

int mysqld_main(int argc, char **argv) 启动流程精简说明

int mysqld_main(int argc, char **argv)
{
pre_initialize_performance_schema();//初始化性能视图
my_init();//my_sys相关的library库和pthreads的初始化
handle_early_options();//进程的一些最早的初始化参数,后续的进程启动以来这个参数的初始化
init_sql_statement_names();//
sys_var_init();//初始化系统变量
ulong requested_open_files;//定义这个最大的变量
adjust_related_options(&requested_open_files);//通过传值调用,调整max_open_files及max_open_connections等的变量定义的最大值,在函数内部实现,有相应的计算公式。
PSI_hook= initialize_performance_schema(&pfs_param);//初始化性能视图performance_schema相关的参数设置,如table_def_size、table_cahce_size、最大连接数、最大打开文件数等。 这些参数值的由来是由定义或handle_early_options()和adjust_related_options来确定的。
psi_server_interface部分:
HAVE_PSI_INTERFACE //性能模式检测接口,performance schema仪器类原始测量函数的底层接口(ABI)。记录perforce_schema测量的一些服务器的运行状态。通过PSI_hook获取psi_server, set_psi_server(server)传指针,设置一些初始化的值。
init_server_psi_keys();//初始化psi_server keys。注册mutex rwlock conditons thread等检测信息	
PSI_THREAD_CALL和my_thread_global_init() ; //通过启动线程来进行初始化再初始化


init_error_log();//error log初始化
mysql_audit_initialize();//审计信息初始化

my_init_signals();//信号量初始化

init_server_components();/*初始化server components。 
1、初始化mdl_init(),metadata lock锁的init。 有两个部分的实现:init_md_psi_keys(),关于psi的md信息的初始化
2、mdl_locks.init()
*/
init_server_auto_options();/*
自动初始化一些配置,传入uuid至server_uuid变量,检测文件系统权限,加载auto.cnf等配置文件
*/
/*当上面加载server_uuid至sid_map并初始化之后,则下面进行的一些gtid的初始化配置,这里因为开始学习,并没有学习的很深入,先跳过*/
gtid相关的操作;// gtid的相关初始化操作,有很多的步骤,暂时先略过

/*下面是重点*/
init_ssl(); //初始化ssl配置,init_ssl_lock()和init_lock_callback_functions() ,ssl rwlock和相关函数的初始化
network_init();/*
网络模块的初始化:
set_ports();//设置ip和unix ports,端口3306,及sock文件目录/tmp/mysql.sock。 基配置所在的文件为mysql_version.h中定义了这些值
Mysqld_socket_listener();//创建mysql_socket_listener,监听通过socket连接到mysql的connection,默认socket文件使用/tmp/mysql.sock
通过Connector_accepter模板管理不同类型的listener,调用setup_listener()来进行listener的初始化。 
setup_listener()主要有两个方面动作: 1、初始化listener mysocket port 2、将tcp_socket信息插入my_socket_map,mysql通过一个socket map来记录所有socket端口信息
*/

初始化Initialize my_str_malloc(), my_str_realloc() and my_str_free();// 分配相应内存及传址到具体地址。
 create_pid_file();//创建pid文件
 reload_optimizer_cost_constants();//加载mysql优化器相关配置
 mysql_rm_tmp_tables() || acl_init(opt_noacl) ||
      my_tz_init((THD *)0, default_tz_name, opt_bootstrap) ||
      grant_init(opt_noacl); // 删除tmp_talbes并初始化数据库级别授权,初始化时区my_tz_init
server_init(0);/*
server初始化:
Initialize structures responsible for servers used in federated server scheme information for them from the server table in the 'mysql' database. //初始化federated 存储引擎服务server的配置部分。 fFEDERATED存储引擎访问在远程数据库的表中的数据,而不是本地的表。这个特性给某些开发应用带来了便利,你可以直接在本地构建一个federated表来连接远程数据表,配置好了之后本地表的数据可以直接跟远程数据表同步。实际上这个引擎里面是不真实存放数据的,所需要的数据都是连接到其他MySQL服务器上。
  SYNOPSIS
    servers_init()
      dont_read_server_table  TRUE if we want to skip loading data from server table and disable privilege checking. 值为true时,跳过从server table中加载数据
  NOTES
    This function is mostly responsible for preparatory steps, main work on initialization and grants loading is done in servers_reload().
  RETURN VALUES
    0	ok
    1	Could not initialize servers
*/

init_status_vars();//初始化状态,mysql中的status变量
initialize_information_schema_acl();//performance_schema_acl权限配置
execute_ddl_log_recovery();//做ddl recovery。 启动过程中。
 start_signal_handler();//启动信号量处理线程
 start_processing_signals();//处理启动过程中的信号量信息
 read_init_file(opt_init_file);//通过线程读取opt_init_file文件配置
start_handle_manager();//创建handle manager线程
  create_compress_gtid_table_thread();//创建compress_gtid_table线程
  
  再后面则是一些启动线程的和gtid相关处理的命令;//后续再学习吧

return 0;


}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值