暂无图片
mysql-5.7启动流程解读
最近更新:2022-09-27 10:04:03

写在前面

阅读本教程你需要提前知道的

1.本文参考的源码版本 mysql-5.7.38, 可能和8.0有区别, 请以实际版本为主.

2.不含初始化数据库(bootstrap/initialize), 不含win32 (_WIN32), 不含ia64, 尽量不含performance_schema

3.基础编程知识(c/c++,py,go,shell,js等均可) (*表示取指针的值, &表示取值的地址(指针))

4.不含流程图(懒得画)

5.不会详细讲具体的函数(太多了)

6.能力有限, 错误之处多多包涵.

启动流程

主要是sql/mysqld.cc中的mysqld_main , 其它文件尽量不要涉及.

mysqld_main(主函数)

int mysqld_main(int argc, char **argv)

入口函数, 为啥不是main呢(1.#define mysqld_main main 2.gcc -nostartfiles -e mysqld_main). (我想起个段子 #define mian main)

实际上是在 sql/main.cc 中定义的

extern int mysqld_main(int argc, char **argv);

int main(int argc, char **argv)
{
  return mysqld_main(argc, argv);
}

//以下函数未特殊说明均在mysqld_main函数里面调用的

初始化参数

就是执行mysqld --datadir=xx --basedir=xx 的这个参数

  orig_argc= argc;
  orig_argv= argv;
  my_getopt_use_args_separator= TRUE;
  my_defaults_read_login_file= FALSE;
  my_getopt_use_args_separator= FALSE;
  defaults_argc= argc;
  defaults_argv= argv;
  remaining_argc= argc;
  remaining_argv= argv;

system_charset_info (系统字符集)

system_charset_info= &my_charset_utf8_general_ci;

......