每当我更改日志位置时
形式:/var/log/mysql到:/var/www
为了将每个日志文件保存在 mysqld.cnf 中的同一位置(就在公共文件夹下),mysql 服务器无法重新启动。
/etc/mysql/mysql.conf.d/mysqld.cnf
log_error = /var/log/mysql/mysql_errors.log
我检查了一些解决方案并添加:
字符集服务器 = utf8
排序规则服务器 = utf8_general_ci
但仍然不起作用。/var/www 具有 770 权限,属于 www-data 组。
我将 mysql 添加到 www-data 组:
sudo usermod -aG www-data mysql
但还是没用。
MySQL:5.7.19
Ubuntu:16.04.1
以下是错误日志:
mysql.service 的作业失败,因为控制进程退出并显示错误代码。有关详细信息,请参阅“systemctl status mysql.service”和“journalctl -xe”。
mysql.service:主进程已退出,代码=已退出,状态=1/FAILURE
每当我撤消日志位置更改时,它就开始工作。
编辑于 2017 年 7 月 31 日
我在日志位置改变后运行此操作:
sudo touch /var/www/mysql_errors.log
sudo chown mysql:mysql /var/www/mysql_errors.log
sudo chmod 770 /var/www/mysql_errors.log
sudo systemctl restart mysql
sudo journalctl -xe > ~/journal.txt
以下是相关的日志实体:
-- Unit mysql.service has begun starting up.
Jul 31 00:33:55 mydomain.com audit[1738]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/1738/status" pid=1738 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=112 ouid=112
Jul 31 00:33:55 mydomain.com audit[1738]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/var/www/mysql_errors.log" pid=1738 comm="mysqld" requested_mask="ac" denied_mask="ac" fsuid=112 ouid=112
Jul 31 00:33:55 mydomain.com audit[1738]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld"
Jul 31 00:33:55 mydomain.com systemd[1]: mysql.service: Main process exited, code=exited, status=1/FAILURE
答案1
现在,根据您提供的链接和有关AppArmor
和之间关系的另一个资源Mysql
,我能够让它工作。管理 mysql 的策略从此位置加载/usr/sbin/mysqld
,您可以在运行时看到它:sudo aa-status
。这可以从以下位置更改:
/etc/apparmor.d/usr.sbin.mysqld
和
/etc/apparmor.d/local/usr.sbin.mysqld
我将改变后者。
脚步:
我创建了一个文件夹
/var/www/html/mysql
,并error.log
在其中放置了一个文件 ()。我相信mysql
会寻找这样的文件。现在这是我的自定义日志位置。打开
/etc/appparmor.d/local/usr.sbin.mysqld
并添加以下行:/var/www/html/mysql/ r, /var/www/html/mysql/** rwk,
- 解释:
/var/www/html/mysql/ r,
:--> 授予 mysql 对该文件夹的读取权限。/var/www/html/mysql/** rwk,
:--> 授予 mysql 对其中内容的读、写和锁定访问权限。
- 解释:
打开
/etc/mysql/mysql.conf.d/mysqld.cnf
并将日志位置更改为:#log_error = /var/log/mysql/error.log log_error = /var/www/html/mysql/error.log
现在重新启动
apparmor
:sudo systemctl restart apparmor
- 现在重新启动
mysql
:sudo systemctl restart mysql
笔记:
- 我将用户:组设置
/var/www/html
为$USER:www-data
并将权限设置为:- 用户:rwx,
- 组:rwx,和
- 其他:rx
mysql
将用户添加到www-data
组:sudo usermod -a -G www-data mysql
理论:
Apparmor 是 Ubuntu 确保对文件系统的访问权限和访问权限进行细粒度控制的方法。它有两种模式:强制模式和投诉模式。强制模式属于mysql
(查看这些模式的运行情况sudo aa-status
)。
您可以更改mysql
为complain mode
,这样apparmor
只会抱怨,但不会阻止mysql
访问文件系统的其他区域。在本例中,我选择了,enforce mode
并简单地更改了apparmor
策略。mysql
要更改这些apparmor
模式,您必须安装apparmor-utils
,然后您可以执行sudo aa-complain /usr/sbin/mysqld
,apparmor
现在只会抱怨文件系统违规mysql
。
有两个位置可用于更改策略,它们是 (1)/etc/apparmor.d/usr.sbin.mysqld
和 (2) /etc/appamrmor.d/local/usr/sbin/mysqld
。选择哪个位置取决于所需的更改类型(网络范围或特定于机器)。因此,请根据您的计划进行更改。
资源(请查看这些):