環(huán)境:ubuntu 14.04.4 lts
現(xiàn)象:把/var/lib/mysql下的數(shù)據(jù)文件移動(dòng)到其他目錄下,之后發(fā)現(xiàn)啟動(dòng)mysql報(bào)錯(cuò),并且mysql無(wú)法運(yùn)行。具體的操作如下:
# service mysql stop
# mv /var/lib/mysql /data
# serivce mysql start報(bào)出的錯(cuò)誤信息為:
170425 9:55:36 [warning] using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. please use the full name instead.
170425 9:55:36 [note] plugin 'federated' is disabled.
/usr/sbin/mysqld: can't find file: './mysql/plugin.frm' (errno: 13)
170425 9:55:36 [error] can't open the mysql.plugin table. please run mysql_upgrade to create it.
170425 9:55:36 innodb: the innodb memory heap is disabled
170425 9:55:36 innodb: mutexes and rw_locks use gcc atomic builtins
170425 9:55:36 innodb: compressed tables use zlib 1.2.8
170425 9:55:36 innodb: using linux native aio
170425 9:55:36 innodb: initializing buffer pool, size = 128.0m
170425 9:55:36 innodb: completed initialization of buffer pool
170425 9:55:36 innodb: operating system error number 13 in a file operation.
innodb: the error means mysqld does not have the access rights to
innodb: the directory.
innodb: file name ./ibdata1
innodb: file operation call: 'open'.
innodb: cannot continue operation.原因
最初以為是簡(jiǎn)單的權(quán)限問題,就把/data/mysql目錄賦權(quán)給mysql用戶
# chown -r mysql:mysql /data/mysql
但是再次啟動(dòng)mysql后,還是遇到同樣的錯(cuò)誤。上網(wǎng)查了一下,原因是由于現(xiàn)今的linux系統(tǒng)都采用apparmor來(lái)限制文件和目錄的執(zhí)行權(quán)限。
解決辦法
所以需要配置apparmor讓mysqld可以訪問/data/mysql目錄。具體操作如下:
# vi /etc/apparmor.d/usr.sbin.mysqld
在此文件末尾增加你的目錄(可以按照/var/lib/mysql的目錄改)
/usr/sbin/mysqld {
#include <abstractions/base>
#include <abstractions/nameservice>
#include <abstractions/user-tmp>
#include <abstractions/mysql>
#include <abstractions/winbind>
capability dac_override,
capability sys_resource,
capability setgid,
capability setuid,
network tcp,
/etc/hosts.allow r,
/etc/hosts.deny r,
/etc/mysql/*.pem r,
/etc/mysql/conf.d/ r,
/etc/mysql/conf.d/* r,
/etc/mysql/*.cnf r,
/usr/lib/mysql/plugin/ r,
/usr/lib/mysql/plugin/*.so* mr,
/usr/sbin/mysqld mr,
/usr/share/mysql/ r,
/var/log/mysql.log rw,
/var/log/mysql.err rw,
/var/lib/mysql/ r,
/var/lib/mysql/ rwk,
/var/lib/mysql-files/ r,
/var/lib/mysql-files/ rwk,
/var/log/mysql/ r,
/var/log/mysql/* rw,
/var/run/mysqld/mysqld.pid rw,
/var/run/mysqld/mysqld.sock w,
/run/mysqld/mysqld.pid rw,
/run/mysqld/mysqld.sock w,
/sys/devices/system/cpu/ r,
# site-specific additions and overrides. see local/readme for details.
#include <local/usr.sbin.mysqld>
/data/mysql/ r,
/data/mysql/ rwk,
}如果不寫第一句的/data/mysql/ r,則mysql能啟動(dòng),但是進(jìn)入mysql后輸入命令會(huì)提示下面錯(cuò)誤:
error 1018 (hy000): can't read dir of '.' (errno: 13