问题
我正在尝试修改我的生产服务器上的 my.cnf 值,但在我的开发服务器上使用 my.cnf 的精确副本(已下载并替换为原始文件)后更改未生效sudo service mysql restart
所做的更改是可见的来自 mysql 命令行中的显示变量。
my.cnf 位于 /etc/mysql/my.cnf
sudo find / -name my.cnf
/etc/mysql/my.cnf
所以整个系统上只存在一个文件..
生产是 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
这看起来它仍在运行并且时间对我来说看起来不太好,但我现在担心如果我杀死这些/这个进程我将无法让 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
我的.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/
如果你想知道在 linux 系统上你的 mysqld 是否真的在读取这个特定文件,我会推荐 strace:
这将向您显示 mysqld 进程在启动期间打开的所有文件。在我们的例子中:
在我的例子中,事实证明即使属性是在我的 my.cnf 上定义的(query_cache_size)它也被忽略了。这发生在升级到 Percona-XtraDB-Cluster-server-55.x86_64 1:5.5.34-25.9.607.rhel6 之后。
最后我临时在命令行指定解决了:
对于 Percona Cluster(基于 Galera),您必须使用引导程序启动第一个节点:/etc/init.d/mysql bootstrap-pxc --query_cache_size=0
有什么有趣的
/etc/mysql/conf.d/
吗?您正在使用的 Mysql 版本应该按照配置文件名的顺序解析my.cnf
任何内容。/etc/mysql/conf.d/
在以前的版本中,顺序可能有些不确定。链中最后设置的任何值都应该获胜,这可以解释为什么您的更改
my.cnf
没有更新服务器;如果以后的文件覆盖您的设置。如果没有任何内容
/etc/mysql/conf.d/
,那么创建一个仅包含这两行的文件innodb.cnf
(不会解析任何不以结尾的内容),然后查看您的 innodb 设置是否在重新启动后更新。.cnf
来自文档的信息:
详细信息在 MySQL Docs Look下
Table 4.2
我遇到了同样的
my.cnf
被忽略的问题,在我的例子中,文件的权限是错误的。它由 root 拥有,模式设置为 600。
我改成了
644
,问题解决了。重要的提示
在我的案例中,我被这个问题困扰了大约一天,在 Ubuntu 18.04 上,MySQL 5.6 没有遵循符号链接。(为什么我真的不知道)。
在我的环境中,我有
/etc/mysql/my.cnf
一个符号链接到,/etc/alternatives/my.cnf
然后符号链接到/etc/mysql/my.cnf.fallback
所以我运行了以下命令
/etc/mysql/
:我还确保我的配置不是世界可写的,就像佛朗哥建议的那样
为了防止它对其他人有帮助,在花了几个令人沮丧的时间试图找出为什么 my.cnf 被忽略之后,我将所有者更改为“mysql”并且它起作用了。
看起来你的 mysql 实例没有运行
您有运行成功的 mysql.server 实例,但它使用自己的 my.cnf(意思是默认的 my.cnf)
我来自 centos 背景,但我猜它在所有环境中都是一样的。
希望您会看到以下消息:
这通常是锁定的 pid、死/锁子系统 ..
(不知道这是否真的能为您提供任何线索或帮助)
对我来说,客户端
includedir
失败了,mysql
因为它i
是大写的(!)。对于服务器进程,这不是问题。Mysql 5.7 wsrep (加莱拉)。