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.
成功~