关于 mysql 重启不读取 /etc/my.cnf 全局配置的问题

(1)安装好mysql后第一步是创建全局配置文件 my.cnf 并调整相关参数,如端口、数据文件路径、缓存大小等:

cp   support-files/my-medium.cnf  /etc/my.cnf

(2)创建mysql启动、停止管理脚本:

cp support-files/mysql.server /etc/init.d/mysql   

然后就可以很方便的启动停止mysql了

(这个脚本其实是调用了mysqld_safe脚本,然后 mysqld_safe 再调用二进制文件 mysqld):

/etc/init.d/mysql start  

但是最后发现一个问题:我修改好的 /etc/my.cnf 配置文件总是没法生效,比如我将 port 修改为 3307,但是ps -ef|grep mysql 看到的启动参数还是 3306,这就表明该配置没生效

mysql     4501  4214  2 15:34 pts/1    00:00:00 /usr/local/mysql/bin/mysqld 
--basedir=/usr/local/mysql 
--datadir=/usr/local/mysql/data 
--plugin-dir=/usr/local/mysql/lib/plugin 
--user=mysql 
--log-error=/usr/local/mysql/data/clone2.err 
--pid-file=/usr/local/mysql/data/clone2.pid 
--socket=/tmp/mysql.sock 
--port=3306

 网上搜索了下,发现有很多人问到这个问题了,但是给的回答都模棱两可,今天我们就来看下这个问题:

其实这个问题的根本原因就是mysql为用户提供了强大的参数配置机制,mysql的启动参数可以通过命令行进行指定,

当没有命令行参数就会从配置文件读取,mysql为了防止用户忘记参数或者其他原因,会读取好几个地方的配置,

并遵循指定优于配置,后读取的配置覆盖前面读取的配置的原则。

mysql究竟会读取那些地方的my.cnf配置呢?

mysqld --help --verbose | grep -A 10 'Usage:' 

Usage: mysqld [OPTIONS]

Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf 
The following groups are read: mysqld server mysqld-5.5
The following options may be given as the first argument:
--print-defaults        Print the program argument list and exit.
--no-defaults           Don't read default options from any option file.
--defaults-file=#       Only read default options from the given file #.
--defaults-extra-file=# Read this file after the global files are read.

然后看看我的机器上哪些地方有my.cnf:

root@clone2:~ 15:32:24>
ls -lrt /etc/my.cnf /etc/mysql/my.cnf /opt/local/etc/mysql5/my.cnf ~/.my.cnf 
ls: 无法访问/opt/local/etc/mysql5/my.cnf: 没有那个文件或目录
ls: 无法访问/root/.my.cnf: 没有那个文件或目录
-rw-r--r-- 1 root  root 3564 2011-07-26 03:35 /etc/mysql/my.cnf
-r--r--r-- 1 mysql root 4807 2012-09-02 15:32 /etc/my.cnf
root@clone2:~ 15:34:03>
mv /etc/mysql/my.cnf /etc/mysql/my.cnf111
root@clone2:~ 15:34:19>

可以看到为啥我的/etc/my.cnf没有生效了,因为被后面的默认配置 /etc/mysql/my.cnf 覆盖了,

将其重命名,然后 杀死进程:

sudo kill -9 `ps -ef|grep mysql|grep -v grep|awk '{print $2}'|xargs`;ps -ef|grep mysql    

重启mysql即可看到用上了我们的新配置 /etc/my.cnf ,不放心的话可以上mysql然后show variables;看下。

 

参考来源:

http://serverfault.com/questions/341958/centos-percona-mysql-not-reading-etc-my-cnf

http://stackoverflow.com/questions/1706757/mysql-how-do-i-see-which-config-files-are-used

你可能感兴趣的:(关于 mysql 重启不读取 /etc/my.cnf 全局配置的问题)