日期:2014-05-16  浏览次数:20691 次

mysql my.cnf文件的option

? ? ? ?mysql的配置文件my.cnf里是由一个个的option组成的([***])。各个部分的作用大致如下:

[client] -- 这部分的配置是mysql自带的client回去读取的部分,可以配置port/password/socket等

port=3306

socket=/tmp/mysql.sock

[mysql] -- 这部分配置mysql command tool会读取的部分

no-auto-rehash

[mysqld]--这部分是mysql server使用到的,比如这个页面里面的参数以及存储引擎自己的参数。

max_connections=100

innodb_buffer_pool_size=2G

key_buffer_size=32M

[mysql_safe]--下面这些都是特定的客户端工具使用到的($MYSQL_HOME/bin/下),看名字就可以明白了。

[mysqldump]

[mysqlhotcopy]

[myisamchk]

...每个工具都可以有自己的option...

具体每个option可以使用那些参数,可以是用 --help查询,比如mysql --help

参数如何生效?

? ? ? ?以我们最常使用的mysql command tool为例,当我们习惯的输入mysql -uroot -p 之后,它是如何读取my.cnf的呢。代码很简单,调用路径如下(5.1.58):

main.cc(bin/mysql.cc)
 -->load_defaults(mysys/default.c)
  -->my_load_defaults(mysys/default.c)

? ? ? ?函数load_defaults的第二个入参为load_default_groups, mysql.cc中是这样定义的:

static const char *load_default_groups[]= { "mysql","client",0 };

? ? ? ?load_defaults函数对这个入参的注释为:“groups?Which [group] entrys to read.”。这下明确了,mysql command tool 会去读取my.cnf中"[mysql]"和"[client]"部分。(除非指定--no-defaults)。

? ? ? ?在my_load_defaults函数里,有这么一段:

  /*
    Check if the user doesn't want any default option processing
    --no-defaults is always the first option
  */
  if (*argc >= 2 && !strcmp(argv[0][1],"--no-defaults"))
  {
    /* remove the --no-defaults argument and return only the other arguments */
    uint i;
    if (!(ptr=(char*) alloc_root(&alloc,sizeof(alloc)+
				 (*argc + 1)*sizeof(char*))))
      goto err;
    res= (char**) (ptr+sizeof(alloc));
    res[0]= **argv;				/* Copy program name */
    for (i=2 ; i < (uint) *argc ; i++)
      res[i-1]=argv[0][i];
    res[i-1]=0;					/* End pointer */
    (*argc)--;
    *argv=res;
    *(MEM_ROOT*) ptr= alloc;			/* Save alloc root for free */
    if (default_directories)
      *default_directories= dirs;
    DBUG_RETURN(0);
  }

? ? ? ?当使用了--no-defaults参数(如果使用,必须作为第一个option出现,这个是对所有的client都适用的)并且输入参数>=2时,mysql command tool不会去加载my.cnf中对应的option。

? ? ? ?其它的client则类似,比如mysqlbinlog会去读取"[mysqlbinlog]"和"[client]";mysqldump会去读取"[mysqldump]"和“[client]”...

?

参考链接:

http://dev.mysql.com/doc/refman/5.5/en/option-files.html