我刚刚在 Vagrant 上测试新的 Ubuntu (Vivid 15.04) 安装,并遇到了 mysql 和登录到自定义位置的问题。
在/var/log/syslog
我得到
/usr/bin/mysqld_safe: cannot create /var/log/mysqld.log: Permission denied
如果我ls -l /var
得到
drwxrwxr-x 10 root syslog 4096 Jun 8 19:52 log
如果我查看 /var/log 文件不存在
我以为我暂时禁用了 apparmor 只是为了隔离它是否是导致问题的原因或其他原因,但不确定它是否仍然会产生问题(编辑:认为它可能仍然处于启用状态,所以不确定这是一个问题还是简单的问题)权限)。
如果我尝试手动创建文件作为 mysql,我也会被拒绝(我临时允许它 bash 访问测试,我将在之后删除)。
touch /var/log/mysql.log
touch: cannot touch ‘/var/log/mysql.log’: Permission denied
如果我查看另一个正在运行的服务器(centos),它具有如上所述的权限(并以 mysql 用户身份写入),所以我想知道 mysql 通常如何获得访问 /var/log 目录的权限,以及如何获取它通过正常运行访问该文件夹?
这是我的 mysql 的 apparmor 配置文件
/usr/sbin/mysqld {
#include
#include
#include
#include
#include
capability dac_override,
capability sys_resource,
capability setgid,
capability setuid,
network tcp,
/etc/hosts.allow r,
/etc/hosts.deny r,
/etc/mysql/** r,
/usr/lib/mysql/plugin/ r,
/usr/lib/mysql/plugin/*.so* mr,
/usr/sbin/mysqld mr,
/usr/share/mysql/** r,
/var/log/mysqld.log rw,
/var/log/mysqld.err rw,
/var/lib/mysql/ r,
/var/lib/mysql/** rwk,
/var/log/mysql/ r,
/var/log/mysql/* rw,
/var/run/mysqld/mysqld.pid rw,
/var/run/mysqld/mysqld.sock w,
/run/mysqld/mysqld.pid rw,
/run/mysqld/mysqld.sock w,
/sys/devices/system/cpu/ r,
/var/log/mysqld.log rw,
# Site-specific additions and overrides. See local/README for details.
#include
}
我还将上述文件添加到 apparmor.d/disable 目录中
注意:我添加了这一行/var/log/mysqld.log rw
,它最初不存在,并且有相同的问题(在重新加载 apparmor 后)。
apparmor module is loaded.
5 profiles are loaded.
5 profiles are in enforce mode.
/sbin/dhclient
/usr/lib/NetworkManager/nm-dhcp-client.action
/usr/lib/NetworkManager/nm-dhcp-helper
/usr/lib/connman/scripts/dhclient-script
/usr/sbin/tcpdump
0 profiles are in complain mode.
1 processes have profiles defined.
1 processes are in enforce mode.
/sbin/dhclient (565)
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.
Jun 8 20:33:33 vagrant-ubuntu-vivid-64 systemd[1]: Starting MySQL Community Server...
Jun 8 20:33:33 vagrant-ubuntu-vivid-64 mysqld_safe[11231]: 150608 20:33:33 mysqld_safe Logging to '/var/log/mysqld.log'.
Jun 8 20:33:33 vagrant-ubuntu-vivid-64 mysqld_safe[11231]: touch: cannot touch ‘/var/log/mysqld.log’: Permission denied
Jun 8 20:33:33 vagrant-ubuntu-vivid-64 mysqld_safe[11231]: chmod: cannot access ‘/var/log/mysqld.log’: No such file or directory
Jun 8 20:33:33 vagrant-ubuntu-vivid-64 mysqld_safe[11231]: 150608 20:33:33 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
Jun 8 20:33:33 vagrant-ubuntu-vivid-64 mysqld_safe[11231]: /usr/bin/mysqld_safe: 126: /usr/bin/mysqld_safe: cannot create /var/log/mysqld.log: Permission denied
答案1
在我看来,大多数人都会创建一个名为mysql
inside 的目录/var/log
,并将该文件夹的所有者更改为 mysql 用户。
sudo mkdir /var/log/mysql
sudo chown mysql:mysql /var/log/mysql
应该可以做到这一点。请务必更新服务器的日志记录位置并重新启动它。测试后重新启用 mysql 的 apparmor 配置文件。