MySQL 不读取选项文件 my.cnf 的符号链接

MySQL 不读取选项文件 my.cnf 的符号链接

我在 Ubuntu 上运行 MySQL 5.5。

/etc/mysql/ 中有一个 my.cnf 文件,它位于我期望的位置。——太棒了!

对于 mysql 的 debian 安装,建议您不要编辑 my.cnf 文件。/etc/mysql/my.cnf 文件中有一个 IncludeDir 指令,用于在 /etc/mysql/conf.d/ 文件夹中查找更多选项文件。

当我把这个文件放在这里时:

/etc/mysql/conf.d/my-local.cnf

MySQL 读取该文件并覆盖 /etc/mysql/my.cnf 中的任何内容。

伟大的! :-)

问题如下:

我将 /etc/mysql/conf.d/my-local.cnf 文件的本地副本保存在源代码管理中,并希望定期为整个团队更新它。因此,我的解决方案是对其进行符号链接:

cd /etc/mysql/conf.d/
ln -s /path/to/my/my-local.cnf my-local.cnf

MySQL 不读取该符号链接。

我已经验证了以下内容:

  • 根据 mysql 手册,物理文件和符号链接均具有 .cnf 文件扩展名。
  • mysql 用户可以访问此文件
  • 每个用户都有权访问此文件
  • mysql 用户可以访问符号链接
  • 每个用户都有权访问符号链接

总而言之,当 /etc/mysql/conf.d/ 文件夹中有物理文件时,MySQL 将读取并解析。Mysql 不会读取此文件夹中的符号链接。

有人有什么想法吗?这可能是 debian/ubuntu 问题吗?

概述了一个类似但尚未解决且略有不同的问题这里

答案1

Apparmor 对新地点一无所知my.cnf

MySQL 服务器跟踪符号链接并尝试打开目标。但 apparmor 拒绝了此操作。

要解决此问题,您必须将路径添加my.cnf/etc/apparmor.d/usr.sbin.mysqld

答案2

这可能是由 apparmor 引起的,从 ubuntu 9.0.4 开始,mysqld 默认启用了 apparmor。请参阅http://en.wikipedia.org/wiki/AppArmor

  • 您可以在 /etc/apparmor.d/local/ 中修改特定于站点的添加内容。我遇到了同样的问题,并编辑了 /etc/apparmor.d/local/usr.sbin.mysqld 以使其正常工作。请注意策略文件中的最后一个逗号。

    # Site-specific additions and overrides for usr.sbin.mysqld.
    # For more details, please see /etc/apparmor.d/local/README.
    
    # vim:syntax=apparmor
    
    /etc/mysql/conf.d/* rl,
    @{HOMEDIRS}/** rwk,
    
  • 编辑 /etc/apparmor.d/local/usr.sbin.mysqld 后,通过 重新启动 apparmor 服务service apparmor restart。 /etc/apparmor.d/local/usr.sbin.mysqld 应该没有错误或警告。
  • 就我而言,我想使用位于用户主目录中的 datadir 和站点特定的 my.cnf。

答案3

我想到了一些可能性:

  • 在另一个方向创建符号链接,即

    /home/developer/my-local.cnf -> /etc/mysql/conf.d/my-local.cnf
    
  • 改用硬链接。

  • /etc使用 etckeeper 等工具进行版本控制。

相关内容