Ubuntu 中自定制 MySQL 的数据目录时,要考虑 apparmor 的配置

Ubuntu AppArmor and MySQL

参考:https://blogs.oracle.com/jsmyth/entry/apparmor_and_mysql

系统版本:Ubuntu 16.04 LTS, MySQL 5.7.17

在 Ubuntu 中自定制 MySQL 的数据目录时,不得不考虑 apparmor 的配置。

MySQL 可以对那些目录有读写权限,除了目录本身的权限配置,apparmor 也增加了一层访问控制的功能。

我遇到的问题是,修改二进制日志的数据目目录为

mkdir -p /mydata/mysql-binlogs
chmod -R mysql:mysql /mydata/mysql-binlogs

配置 my.cnf
    bin-log=/mydata/mysql-binlogs/binlog
    server-id=1

执行 service mysql start 遇到报错:

Mar 17 10:23:55 guli-Ubuntu1 mysqld[3044]: Initialization of mysqld failed: 0
Mar 17 10:23:55 guli-Ubuntu1 systemd[1]: mysql.service: Control process exited, code=exited status=1
Mar 17 10:23:55 guli-Ubuntu1 kernel: [ 2452.426890] audit: type=1400 audit(1489717435.721:34): apparmor="DENIED" operation="mknod" profile="/usr/sbin/mysqld" name="/mydata/mysql-binlogs/binlog.index" pid=3047 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=122 ouid=122

这里是一种解决方法:(更多方法请参考原文链接)

配置 apparmor:

cat /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.
  /mydata/mysql-binlogs/ r,
  /mydata/mysql-binlogs/** rwk,

重新加载配置:
service apparmor reload

启动 mysql
# /etc/init.d/mysql start
[ ok ] Starting mysql (via systemctl): mysql.service.

成功~

你可能感兴趣的:(Ubuntu 中自定制 MySQL 的数据目录时,要考虑 apparmor 的配置)