Description:
===================The Story===================
Different from other key-value configuration options in the option file (i.e., my.cnf), "!include" and "!includedir" do not use the separator "=". It's quite confusing (at least to me). The worst thing is when having the following invalid configuration entry:
!include = /etc/mysql/my.cnf.ext
The system just keeps silent when it met a read error. In my case, I changed the extended file a lot of times to let my setting take effect. But the problem is simply because mysqld fails to read the file "= /etc/mysql/my.cnf.ext" and fails silently.
Without a GDB tracing, it's impossible to know the root cause.
So I suggest to add a logging statement after the read error. It's always a good practice to do so. And the logging is at the startup time, which won't cause much performance overhead.
Thanks a lot!
Tianyin
How to repeat:
Leave the following configuration in your my.cnf:
#/etc/mysql/my.cnf
[mysqld]
!include = /etc/mysql/my.cnf.ext
basedir = /home/tianyin/mysql-5.5.28/usr/local/mysql
datadir = /home/tianyin/mysql-5.5.28/usr/local/mysql/data
...
Suggested fix:
--- ../mysql-5.5.28_org/mysql-5.5.28/mysys/default.c 2012-08-29 01:50:46.000000000 -0700
+++ mysys/default.c 2012-12-13 16:12:27.891494083 -0800
@@ -784,8 +784,11 @@
#if !defined(__WIN__)
{
MY_STAT stat_info;
- if (!my_stat(name,&stat_info,MYF(0)))
+ if (!my_stat(name,&stat_info,MYF(0))) {
+ fprintf(stderr, "Info: '%s' is ignored because it is not accessible\n",
+ name);
return 1;
+ }
/*
Ignore world-writable regular files.
This is mainly done to protect us to not read a file created by