集中在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