mysql-源码-001
MySQL 服务启动流程
mysqld 这个程序启动之后直接调用了 mysqld_main 函数
#/data/repos/mysql-server-mysql-8.0.32/sql/main.cc, line 25
25 int main(int argc, char **argv) { return mysqld_main(argc, argv); }
第 2 步执行 mysqld_main 函数
#代码位置 /data/repos/mysql-server-mysql-8.0.32/sql/mysqld.cc:7208
7201 #ifdef _WIN32
7202 int win_main(int argc, char **argv)
7203 #else
7204 int mysqld_main(int argc, char **argv)
7205 #endif
{
第 2.1 步
计算 basedir 和 mysqld 程序的绝对路径
#/data/repos/mysql-server-mysql-8.0.32/sql/mysqld.cc, line 7031
7216 my_progname = argv[0];
7217 calculate_mysql_home_from_my_progname();
第 2.2 步
第一次初始化 ps 数据库
#/data/repos/mysql-server-mysql-8.0.32/storage/perfschema/pfs_server.cc, line 69.
7220 #ifdef WITH_PERFSCHEMA_STORAGE_ENGINE
7221 pre_initialize_performance_schema();
7222 #endif /*WITH_PERFSCHEMA_STORAGE_ENGINE */
第 2.3 步
执行 my_init
#/data/repos/mysql-server-mysql-8.0.32/mysys/my_init.cc, line 133
7224 if (my_init()) // init my_sys library & pthreads
/**
1、配置文件对应的 umask 值 `my_umask`
2、配置目录对应的 umask 值 `my_umask_dir`
3、配置线程互斥变量 my_thread_global_init()
/
第 2.4 步
加载配置文件&设置 datadir
7236 if (load_defaults(MYSQL_CONFIG_NAME, load_default_groups, &argc, &argv,
7237 &argv_alloc)) {
7238 flush_error_log_messages();
(gdb)
7239 return 1;
7240 }
7241
7242 /* Set data dir directory paths */
7243 strmake(mysql_real_data_home, get_relative_path(MYSQL_DATADIR),
7244 sizeof(mysql_real_data_home) - 1);