无法在Ubuntu 16.04中更改MySQL 5.7的错误日志位置
每当我更改日志位置
form: / var / log / mysql to: / var / www
为了将每个日志文件保存在mysqld.cnf mysql服务器的同一个地方(就在公共文件夹下),无法重启。
/etc/mysql/mysql.conf.d/mysqld.cnf
log_error = /var/log/mysql/mysql_errors.log
我检查了一些解决方案,并补充说:
character-set-server = utf8
collation-server = 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
每当我撤消日志位置更改时,它都会开始工作。
编辑31.07.2017
我在日志位置更改后运行此命令:
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
现在基于您提供的链接以及有关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
,只需更改mysql
的apparmor
策略要更改这些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
。 选择哪个将取决于所需的更改类型(网络范围或特定于机器)。 所以改变你的计划。
资源(请看这些):