阅读本教程你需要提前知道的
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 , 其它文件尽量不要涉及.
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= &my_charset_utf8_general_ci;