Tuesday, January 5, 2010

mysql config file location

经老大提醒:配置文件应该不是os相关的事情。

查代码,发现如下:

//在脚本目录下有一处,暂时还不清楚这里的作用,不明真相的群众纷纷表示暂且掠过。
scripts/mysqlaccess.sh

# =================================
# sub MergeConfigFiles
#  merge options from config files
#  NOTE: really should do two separate merges for each
#    client to exactly duplicate order of resulting argument lists
# =================================
sub MergeConfigFiles {
    my ($name,$pass,$uid,$gid,$quota,$comment,$gcos,$dir,$shell) = getpwuid $<;
    MergeConfigFile("@sysconfdir@/my.cnf");
    MergeConfigFile("/etc/my.cnf");
    MergeConfigFile("$dir/.my.cnf");
}

用kDbg调试发现如下:
mysys/default.c

406行: int load_defaults(const char *conf_file, const char **groups,
                  int *argc, char ***argv)

这里其实只是包了一层,调用另一个函数。
450行: int my_load_defaults(const char *conf_file, const char **groups,
                  int *argc, char ***argv, const char ***default_directories)
中部调用init_default_directories,获得初始化的所有目录,共五个,依次是:
1. /etc
2. /etc/mysql
3. $BASEDIR/mysql
4. cur_dir
5. ~/

在506行由调用了一个函数my_search_option_files,其定义在
 176 int my_search_option_files(const char *conf_file, int *argc, char ***argv,
                           uint *args_used, Process_option_func func,
                            void *func_ctx, const char **default_directories)

此函数的第259行
for (dirs= default_directories ; *dirs; dirs++)
优先级在此体现,即使前面找到了配置文件,也会被覆盖。

======================
总结:
1. 干这行就是靠经验阿;
2. kDbg调试还是蛮好使的,比cgdb好看多了。


Sincerely,

ZHOU Yuan <j0sf>

No comments:

Post a Comment