風邪でぼんやりしてる中、ITOHさんのつぶやきで現実に戻ってみる。
…ん? {basedir}/etc/my.cnf、そもそも読んだっけ?
http://dev.mysql.com/doc/refman/5.5/en/option-files.html
ここを読んでも読む気配はなさげ。
そういえば前に調べたな。。
http://yoku0825.blogspot.jp/2012/11/mycnf.html
うーん、{basedir}/etc/my.cnfってのは/usr/local/mysql/etc/my.cnfのことかな?
cmakeするときにデフォルトをいじらなければ、basedirは/usr/local/mysql, sysconfdirは/usr/local/mysql/etcだから結果としては{basedir}/etc/my.cnfになるけど。
でも違いそうだな。。
MySQL5.5.30, MariaDB5.5.30とも、mysys/default.cはこんな感じ。
140 - Unix: /etc/
141 - Unix: /etc/mysql/
142 - Unix: --sysconfdir=<path> (compile-time option)
143 - ALL: getenv("MYSQL_HOME")
144 - ALL: --defaults-extra-file=<path> (run-time option)
145 - Unix: ~/
..
1225 errors += add_directory(alloc, "/etc/", dirs);
1226 errors += add_directory(alloc, "/etc/mysql/", dirs);
1227
1228 #if defined(DEFAULT_SYSCONFDIR)
1229 if (DEFAULT_SYSCONFDIR[0])
1230 errors += add_directory(alloc, DEFAULT_SYSCONFDIR, dirs);
1231 #endif /* DEFAULT_SYSCONFDIR */
1232
1233 #endif
1234
1235 if ((env= getenv("MYSQL_HOME")))
1236 errors += add_directory(alloc, env, dirs);
1237
1238 /* Placeholder for --defaults-extra-file=<path> */
1239 errors += add_directory(alloc, "", dirs);
1240
1241 #if !defined(__WIN__)
1242 errors += add_directory(alloc, "~/", dirs);
1243 #endif
順番的には/mnt/s3700/mysql-5.6.11/etcは$MYSQL_HOMEに当たりそうな気がする。
$MYSQL_HOMEってmysqld_safeの中であちゃこちゃいじっててよくわかんなくなるんだよな。。
gdbで順番に追ってみる。
まずはMariaDB 5.5.30。
# gdb bin/mysqld
..
(gdb) b add_directory
Breakpoint 1 at 0xa6bc78: file /home/yoku0825/mariadb-5.5.30/mysys/default.c, line 1117.
(gdb) r
Starting program: /usr/maria/5.5.30/bin/mysqld
..
Breakpoint 1, add_directory (alloc=0x7fffffffe340, dir=0xbff585 "/etc/", dirs=0x19c0458)
at /home/yoku0825/mariadb-5.5.30/mysys/default.c:1117
1117 len= normalize_dirname(buf, dir);
まず/etc/を取った。
(gdb) c
Continuing.
Breakpoint 1, add_directory (alloc=0x7fffffffe340, dir=0xbff58b "/etc/mysql/", dirs=0x19c0458)
at /home/yoku0825/mariadb-5.5.30/mysys/default.c:1117
1117 len= normalize_dirname(buf, dir);
次に/etc/mysql/、ここまではハードコードされてる通り。
(gdb) c
Breakpoint 1, add_directory (alloc=0x7fffffffe340, dir=0xae3a77 "", dirs=0x19c0458)
at /home/yoku0825/mariadb-5.5.30/mysys/default.c:1117
1117 len= normalize_dirname(buf, dir);
あ、sysconfdirとMYSQL_HOME飛ばしてdefaults-extra-fileに行ったぽい。
ああ、MYSQL_HOMEが飛んでるのは多分mysqld_safeを通さずに直接mysqldを叩いてるからか。
(gdb) c
Continuing.
Breakpoint 1, add_directory (alloc=0x7fffffffe340, dir=0xbff5a2 "~/", dirs=0x19c0458)
at /home/yoku0825/mariadb-5.5.30/mysys/default.c:1117
1117 len= normalize_dirname(buf, dir);
でホームディレクトリの.my.cnfを取ると。
(gdb) c
Continuing.
..
ここで起動終了。
sysconfdirって定義されてないのね。。
続いてMySQL 5.5.30。
# gdb bin/mysqld
..
(gdb) b add_directory
Breakpoint 1 at 0x746fa0: file /home/yoku0825/mysql-5.5.30/mysys/default.c, line 1111.
(gdb) r
Starting program: /usr/mysql/5.5.30/bin/mysqld
..
Breakpoint 1, add_directory (alloc=0x7fffffffe2e0, dir=0x9bef03 "/etc/", dirs=0xf68c00)
at /home/yoku0825/mysql-5.5.30/mysys/default.c:1111
1111 {
(gdb) c
Continuing.
Breakpoint 1, add_directory (alloc=0x7fffffffe2e0, dir=0x9bef09 "/etc/mysql/", dirs=0xf68c00)
at /home/yoku0825/mysql-5.5.30/mysys/default.c:1111
1111 {
(gdb) c
Continuing.
Breakpoint 1, add_directory (alloc=0x7fffffffe2e0, dir=0x9bef15 "/usr/local/mysql/etc", dirs=0xf68c00)
at /home/yoku0825/mysql-5.5.30/mysys/default.c:1111
1111 {
(gdb) c
Continuing.
Breakpoint 1, add_directory (alloc=0x7fffffffe2e0, dir=0x90931f "", dirs=0xf68c00)
at /home/yoku0825/mysql-5.5.30/mysys/default.c:1111
1111 {
(gdb) c
Continuing.
Breakpoint 1, add_directory (alloc=0x7fffffffe2e0, dir=0x9bef35 "~/", dirs=0xf68c00)
at /home/yoku0825/mysql-5.5.30/mysys/default.c:1111
1111 {
(gdb) c
Continuing.
こっちはsysconfdirが定義されてるぽい。
$ cmake -i mysql-5.5.30/
..
Variable Name: SYSCONFDIR
Description: config directory (for my.cnf)
Current Value: /usr/local/mysql/etc
New Value (Enter to keep current value):
..
$ cmake -i mariadb-5.5.30/
..
やっぱSYSCONFDIRがないね。
いやでもSYSCONFDIRじゃなくてMYSQL_HOMEっぽいんだよな。。
$ diff mysql-5.5.30/scripts/mysqld_safe.sh mariadb-5.5.30/scripts/mysqld_safe.sh
..
ばらばら違い出てくるけど、熱あるしよくわかんない。。
余力があったらまたこんど。。今日はもうだめだ。。