(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