仅当默认 my.conf 当前已存在时,我才想放置自定义配置的 /etc/my.cnf。一旦默认 my.cnf 被替换或编辑,我不想冒险用自定义 my.cnf 替换它。
我最好的想法和我所看到的缺点:
对默认的 my.cnf 文件进行校验,如果与该校验和匹配,则替换它。这似乎是最安全的,但当 my.cnf 有新版本或小改动时也会很烦人。
在 my.cnf 中查找仅默认文件包含的文本,并且我的替换 my.cnf 文件均不会包含。这似乎比我的第一个选择稍微不那么烦人,但风险更大。
当mysql安装时使用处理程序来替换my.cnf。如果我(或其他人)将 mysql 要求从“当前”更改为“最新”,这可能会带来灾难性的后果。我还担心如果我需要调整 mysql 包名称的变化,我可能会遇到奇怪的事情(例如,现在 mysql 不再包含在 centos 中,oracle repo 现在在所有包名称中都有“社区”)。
我正在寻找其他方法。如果您已经编码了某些内容,我也非常希望能够提供一些示例。
谢谢!
答案1
你应该避免自动管理“某些东西”,而这些东西也是手动管理的。无论如何,这都会产生冲突。
如果要my.cnf
自动管理,请在第一行打印一条明确的声明,说明此文件是自动管理的。任何手动更改都会丢失。这样就没问题了。
如果您还想进行手动配置,请使用包含指令或类似的东西来包含子目录。用户可以覆盖您的自动设置。现在通常有一个conf.d
包含用户特定设置的文件夹。在大多数情况下,my.cnf
末尾有一行:
!includedir /etc/mysql/conf.d/
另一个选项是使用lineinfile
。如果您只需要更改一些设置,这基本上就足够了。
此外,如果您计划使用 Ansible 管理服务的配置,也请计划管理服务的安装。如果从服务的一个版本到下一个版本的配置有重大变化,请使用不同的角色来管理该服务,或使用测试环境来测试您的安装和新配置文件。