Ansible 运行后 MySQL“my.cnf”变量未更新

Ansible 运行后 MySQL“my.cnf”变量未更新

我正在为我的项目创建一个简单的 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

谢谢

相关内容