1. 收集默认的目录: 接口 init_default_directories();
主要是下面的目录:
- "/etc/"
- "/etc/mysql/"
- 环境变量中设置的: MYSQL_HOME
- 当前用户的home目录 : "~/"
2. 如果命令行参数中有"--no-defaults"选项, 则将"--no-defaults"选项直接从现有的命令行参数中去掉, 然后直接返回,即不去解析配置文件。
3. 如果没有"--no-defaults"选项, 则解析配置文件: my_search_option_files()
检查命令行中是否有: "--defaults-file="; "--defaults-extra-file="; "--defaults-group-suffix=";
a). 如果有"--defaults-group-suffix="选项,则在默认的group后面添加带后缀的group,
默认group:
const char *load_default_groups[] =
{
#ifdef WITH_NDBCLUSTER_STORAGE_ENGINE
"mysql_cluster",
#endif
"mysqld", "server", MYSQL_BASE_VERSION, 0, 0
};
如果后缀是
_A: "--defaults-group-suffix=
_A", 则所有的group将是
const char *load_default_groups[] =
{
#ifdef WITH_NDBCLUSTER_STORAGE_ENGINE
"mysql_cluster",
#endif
"mysqld", "server", MYSQL_BASE_VERSION,
#ifdef WITH_NDBCLUSTER_STORAGE_ENGINE
"mysql_cluster
_A",
#endif
"mysqld
_A", "server
_A", MYSQL_BASE_VERSION
_A
};
b). 如果有"--defaults-file="选项, 则只是从"--defaults-file="指定的配置文件中读取配置选项;
c). 如果没有"--defaults-file="选项, 则从传递进来的" MYSQL_CONFIG_NAME
"my""加默认的后缀名文件中去读配置选项
d). 如果上面的都不成功,则从默认的目录(即init_default_directories()中获得的默认目录中读取配置文件, 后缀一般是.cnf); 如果默认目录为空(mysqld好像不为空, 其他可能为空), 则从"--defaults-extra-file="指定的文件中读取配置文件。
MYSQL将配置文件中的选项读取以后,会将选项的前面加上"--",最后会将所有的配置文件选项和命令行选项都做为命令行选项拷贝到argv中作为程序的选项。最后将选项赋给了defaults_argv和defaults_argc。