我在 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 等工具进行版本控制。