Ubuntu 下移动 MySQL 的默认目录

最近配置了一台 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