mysql my.cnf 被忽略

mr1*_*086 8 mysql ubuntu ubuntu-10.04 ubuntu-11.10 my.cnf

问题

我正在尝试修改我的生产服务器上的 my.cnf 值,但更改在 之后没有生效sudo service mysql restart,使用我的开发服务器上的 my.cnf(下载并替换原件)的精确副本,所做的更改是可见的从 mysql 命令行中的显示变量。

my.cnf 位于 /etc/mysql/my.cnf

sudo find / -name my.cnf
/etc/mysql/my.cnf
Run Code Online (Sandbox Code Playgroud)

所以整个系统上只存在一个文件..

生产是 ubuntu 10.04 LTS 64bit
开发是 ubuntu 11.10 32bit

Mysql 版本分别为 5.1.61 和 5.1.62。

更新2:

运行 mysql stop 和 mysql status 后返回 mysql stop/waiting,如果我运行 top -b | grep mysql

27652 root      20   0  4096  424  420 S    0  0.0   0:00.01 mysqld_safe
27769 mysql     20   0  392m  57m 7236 S    0  1.5 119116,08 mysqld
Run Code Online (Sandbox Code Playgroud)

看起来它仍在运行,时间对我来说不太好,但我现在担心如果我杀死这些/这个进程,我将无法再次运行 mysql,并且正在生产这很糟糕:S。

我意识到这可能不是可以回答的问题,而是杀死这些进程然后运行 ​​service mysql start,这会让 mysql 再次运行吗?- 另外,上面的过程是否有正常的数字?

更新:

这是否意味着它从 my.cnf 获取设置...但不使用它?所以现在很迷茫。
最后它得到了 innodb_buffer.. 设置。

mysqld --print-defaults
mysqld would have been started with the following arguments:
--user=mysql --socket=/var/run/mysqld/mysqld.sock --port=3306 --basedir=/usr --datadir=/var/lib/mysql --tmpdir=/tmp --skip-external-locking --bind-address=127.0.0.1 --key_buffer=16M --max_allowed_packet=16M --thread_stack=192K --thread_cache_size=8 --myisam-recover=BACKUP --query_cache_limit=1M --query_cache_size=16M --log_error=/var/log/mysql/error.log --expire_logs_days=9 --max_binlog_size=100M --innodb_file_per_table=1 --innodb_buffer_pool_size=500M --innodb_buffer_pool_size=500M --user=mysql --socket=/var/run/mysqld/mysqld.sock --port=3306 --basedir=/usr --datadir=/var/lib/mysql --tmpdir=/tmp --skip-external-locking --bind-address=127.0.0.1 --key_buffer=16M --max_allowed_packet=16M --thread_stack=192K --thread_cache_size=8 --myisam-recover=BACKUP --query_cache_limit=1M --query_cache_size=16M --log_error=/var/log/mysql/error.log --expire_logs_days=9 --max_binlog_size=100M --innodb_file_per_table=1 --innodb_buffer_pool_size=500M --innodb_buffer_pool_size=500M
Run Code Online (Sandbox Code Playgroud)

我的.cnf

[client]
port        = 3306
socket      = /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket      = /var/run/mysqld/mysqld.sock
nice        = 0

[mysqld]
user        = mysql
socket      = /var/run/mysqld/mysqld.sock
port        = 3306
basedir     = /usr
datadir     = /var/lib/mysql
tmpdir      = /tmp
skip-external-locking
bind-address        = 127.0.0.1
key_buffer      = 16M
max_allowed_packet  = 16M
thread_stack        = 192K
thread_cache_size       = 8
myisam-recover         = BACKUP
query_cache_limit   = 1M
query_cache_size        = 16M
log_error                = /var/log/mysql/error.log
expire_logs_days    = 10
max_binlog_size         = 100M
innodb_file_per_table = 1

[mysqldump]
quick
quote-names
max_allowed_packet  = 16M

[mysql]

[isamchk]
key_buffer      = 16M

!includedir /etc/mysql/conf.d/
Run Code Online (Sandbox Code Playgroud)

小智 10

如果你想在 linux 系统上知道你的 mysqld 是否真的在读取这个特定的文件,我会推荐 strace:

strace -e trace=open mysqld
Run Code Online (Sandbox Code Playgroud)

这将向您显示启动期间 mysqld 进程打开的所有文件。在我们的例子中:

open("/etc/ld.so.cache", O_RDONLY)      = 3
open("/lib64/libpthread.so.0", O_RDONLY) = 3
open("/lib64/libaio.so.1", O_RDONLY)    = 3
open("/lib64/libm.so.6", O_RDONLY)      = 3
open("/lib64/librt.so.1", O_RDONLY)     = 3
open("/lib64/libcrypt.so.1", O_RDONLY)  = 3
open("/lib64/libdl.so.2", O_RDONLY)     = 3
open("/usr/lib64/libssl.so.10", O_RDONLY) = 3
open("/lib64/libcrypto.so.10", O_RDONLY) = 3
open("/lib64/libc.so.6", O_RDONLY)      = 3
open("/usr/lib64/libfreebl3.so", O_RDONLY) = 3
open("/lib64/libgssapi_krb5.so.2", O_RDONLY) = 3
open("/lib64/libkrb5.so.3", O_RDONLY)   = 3
open("/lib64/libcom_err.so.2", O_RDONLY) = 3
open("/lib64/libk5crypto.so.3", O_RDONLY) = 3
open("/lib64/libz.so.1", O_RDONLY)      = 3
open("/lib64/libkrb5support.so.0", O_RDONLY) = 3
open("/lib64/libkeyutils.so.1", O_RDONLY) = 3
open("/lib64/libresolv.so.2", O_RDONLY) = 3
open("/usr/lib64/libselinux.so.1", O_RDONLY) = 3
open("/proc/filesystems", O_RDONLY)     = 3
open("/sys/devices/system/cpu/online", O_RDONLY|O_CLOEXEC) = 3
open("/sys/devices/system/cpu", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3
open("/etc/my.cnf", O_RDONLY)           = 3
open("/etc/localtime", O_RDONLY)        = 3
open("/dev/urandom", O_RDONLY|O_NOCTTY|O_NONBLOCK) = 3
open("/proc/sys/crypto/fips_enabled", O_RDONLY) = 3
Run Code Online (Sandbox Code Playgroud)

就我而言,事实证明,即使在 my.cnf 上定义了属性(query_cache_size),它也被忽略了。这发生在升级到 Percona-XtraDB-Cluster-server-55.x86_64 1:5.5.34-25.9.607.rhel6 之后。

最后我临时通过在命令行指定来解决:

/etc/init.d/mysql start --query_cache_size=0
Run Code Online (Sandbox Code Playgroud)

在 Percona 集群(基于 Galera)的情况下,您必须使用引导程序启动第一个节点:/etc/init.d/mysql bootstrap-pxc --query_cache_size=0


kas*_*ani 5

有什么有趣的/etc/mysql/conf.d/吗?my.cnf然后,您使用的 Mysql 版本应该/etc/mysql/conf.d/按照配置文件名的顺序进行解析。在以前的版本中,顺序可能有些不确定。

链中最后设置的任何值都应该获胜,这可能解释了为什么您的更改my.cnf没有更新服务器;如果以后的文件覆盖了您的设置。

如果没有任何内容,请/etc/mysql/conf.d/创建一个仅包含这两行的名为innodb.cnf(不会解析任何不以 结尾的文件)的文件,.cnf并查看您的 innodb 设置是否在重新启动后更新。

[mysqld]
innodb_buffer_pool_size = 500M
Run Code Online (Sandbox Code Playgroud)

来自文档的信息:

[mysqld]
innodb_buffer_pool_size = 500M
Run Code Online (Sandbox Code Playgroud)

详细信息在 MySQL Docs下查看Table 4.2

可以!include在选项文件中使用指令来包含其他选项文件并!includedir在特定目录中搜​​索选项文件.....

... MySQL 不保证读取目录中选项文件的顺序...

在 Unix 操作系统上使用 !includedir 指令查找和包含的任何文件都必须具有以 .includedir 结尾的文件名.cnf。在 Windows 上,此指令检查带有.ini.cnf扩展名的文件。