2013年5月30日木曜日

MariaDBが{basedir}/etc/my.cnfを読んでくれないらしい

風邪でぼんやりしてる中、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
..

ばらばら違い出てくるけど、熱あるしよくわかんない。。
余力があったらまたこんど。。今日はもうだめだ。。

0 件のコメント :

コメントを投稿