无法在 Ubuntu 16.04 中更改 MySQL 5.7 的错误日志位置

无法在 Ubuntu 16.04 中更改 MySQL 5.7 的错误日志位置

每当我更改日志位置时

形式:/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

我将改变后者。

脚步:

  1. 我创建了一个文件夹/var/www/html/mysql,并error.log在其中放置了一个文件 ()。我相信mysql会寻找这样的文件。现在这是我的自定义日志位置。

  2. 打开/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 对其中内容的读、写和锁定访问权限。
  3. 打开/etc/mysql/mysql.conf.d/mysqld.cnf并将日志位置更改为:

    #log_error = /var/log/mysql/error.log
    log_error = /var/www/html/mysql/error.log
    
  4. 现在重新启动apparmorsudo systemctl restart apparmor

  5. 现在重新启动mysqlsudo systemctl restart mysql

笔记:

  1. 我将用户:组设置/var/www/html$USER:www-data并将权限设置为:
    • 用户:rwx,
    • 组:rwx,和
    • 其他:rx
  2. mysql将用户添加到www-data组:

    sudo usermod -a -G www-data mysql
    

理论:

Apparmor 是 Ubuntu 确保对文件系统的访问权限和访问权限进行细粒度控制的方法。它有两种模式:强制模式和投诉模式。强制模式属于mysql(查看这些模式的运行情况sudo aa-status)。

您可以更改mysqlcomplain mode,这样apparmor只会抱怨,但不会阻止mysql访问文件系统的其他区域。在本例中,我选择了,enforce mode并简单地更改了apparmor策略。mysql要更改这些apparmor模式,您必须安装apparmor-utils,然后您可以执行sudo aa-complain /usr/sbin/mysqldapparmor现在只会抱怨文件系统违规mysql

有两个位置可用于更改策略,它们是 (1)/etc/apparmor.d/usr.sbin.mysqld和 (2) /etc/appamrmor.d/local/usr/sbin/mysqld。选择哪个位置取决于所需的更改类型(网络范围或特定于机器)。因此,请根据您的计划进行更改。

资源(请查看这些):

https://blogs.oracle.com/jsmyth/apparmor-and-mysql

https://blogs.oracle.com/jsmyth/selinux-and-mysql

相关内容