最近配置了一台 Ubuntu 1404 的服务器,装好 MySQL 之后,准备把 MySQL 的数据目录(datadir)移动到其它地方(/srv/mysql),之前在 Debian 下面的话,直接做完下面几步就好了:
# service mysql stop # cp -rp /var/lb/mysql /srv/mysql # 在 my.cnf 中修改 datadir = /srv/mysql # service mysql start
但,这次在 Ubuntu 下直接启动不成功,抛出 start: Job failed to start
,Google 之,发现原来在 Ubuntu 中引入了一个 AppArmor
的安全模组,它可以界定单个程序进入一组文件列表。
所以在 Ubuntu 下还需要做一步操作:
将 /srv/mysql/
目录加入到 mysqld 的目录列表中去,编辑 /etc/apparmor.d/usr.sbin.mysqld
# vim /etc/apparmor.d/usr.sbin.mysqld
作以下修改
... /var/lib/mysql/ r, /var/lib/mysql/** rwk, + /srv/mysql/ r, + /srv/mysql/** rwk, ...
重启 apparmor
# /etc/init.d/apparmor restart
然后启动 MySQL 就不会报错了。
# service mysql restart
关于 AppArmor 的官方介绍:https://help.ubuntu.com/14.04/serverguide/apparmor.html