![Ansible 运行后 MySQL“my.cnf”变量未更新](https://linux22.com/image/715473/Ansible%20%E8%BF%90%E8%A1%8C%E5%90%8E%20MySQL%E2%80%9Cmy.cnf%E2%80%9D%E5%8F%98%E9%87%8F%E6%9C%AA%E6%9B%B4%E6%96%B0.png)
我正在为我的项目创建一个简单的 Ansible 剧本,其中我在 Ubuntu VM 上安装 MySQL。
作为此设置的一部分,我在 /etc/my.cnf 中创建了一个自定义的 my.cnf 文件,它在jinja2模板已解析完成。
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
log_error = /var/log/mysql/mysql_error.log
pid-file = /var/run/mysqld/mysqld.pid
general_log = on
general_log_file = /var/log/mysql/mysql.log
[mysqld]
bind-address = 127.0.0.1
datadir = /var/lib/mysql
pid-file = /var/run/mysqld/mysqld.pid
log_error = /var/log/mysql/mysql_error.log
general_log = on
general_log_file = /var/log/mysql/mysql.log
socket = /var/run/mysqld/mysqld.sock
user = root
port = 3306
# Disabling Symlinks is recommended for security purposes #
symbolic-links=0
接下来,因为我运行的是 Ubuntu,所以我调用
service: name=mysql state=started enabled=yes
一切看起来都是正确的,但是当我使用检查变量时
mysqld --verbose --help
我发现变量是错误的,例如,它说general-log
是假的,但symbolic-links
实际上是真的,尽管我在这个 cnf 文件中将它设置为 0,如果我运行mysql show variables
因此,我已检查该文件是否存在,etc/my.cnf
并且已将其加载为mysql --verbose --help
报告
Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
这可能是用户权限问题吗?我相信这个 my.cnf 文件属于根用户这可能是导致问题的原因。
我真正需要的是一些帮助来调试可能出现的问题,因为我对这种低级 MySQL 配置还比较陌生。
先感谢您
答案1
您使用的是 Ubuntu,它在安装后会自动启动服务。因此,当您要求启用并启动它时,它已经启用并启动了。当然,如果您在剧本运行时再次运行剧本,它已经启动了……
你需要做的是建立一个处理程序这将重新开始服务。例如:
$ cat roles/mysql/handlers/main.yml
---
- name: restart mysql
service: name=mysql state=restarted
然后确保notify: restart mysql
在任何改变配置的任务中都这样做。
答案2
我已设法使其工作,它显然可能与这些文件的执行顺序有关。
我以为
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
这意味着/etc/my.cnf
它比其他的具有优先级,而事实上似乎恰恰相反,在这种情况下,~/.my.cnf
如果它存在的话,它似乎具有最高优先级。
etc/my.cnf
考虑到这是最通用和最不具体的文件,这是有道理的。
所以我做的是用我自己的版本覆盖库存my.cnf
文件/etc/mysql/my.cnf
。我不建议其他人也这么做,因为我认为你应该保留默认设置,只需添加你的my.cnf
即可/usr/etc/my.cnf
,在我的情况下,它仅适用于 Vagrant VM,这就是为什么我不那么担心
我确实相信这可能是问题所在,如果您认为我错了,请纠正我。
非常感谢@Michael Hampton 的帮助
编辑
我可能真的错了,我尝试过这个/usr/etc/my.cnf
方法,但没有起作用,这有点奇怪,我真的不明白my.cnf
优先级背后的逻辑,或者你应该如何在不触及安装附带的库存的情况下覆盖它。
我猜在紧要关头我只能重写库存,并且您可以通过参数强制mysqld
使用特定文件,但我仍然想完全了解发生了什么,所以如果有人知道,请添加您的想法。my.cnf
--defaults-file
谢谢