140602 22:36:39 mysqld_safe Starting mysqld daemon with databases from /home/mysql 140602 22:36:39 [Warning] Can't create test file /home/mysql/localhost.lower-test
140602 22:36:39 [Warning] Can't create test file /home/mysql/localhost.lower-test /usr/libexec/mysqld: Can't change dir to '/home/mysql/' (Errcode: 13) 140602 22:36:39 [ERROR] Aborting 140602 22:36:39 [Note] /usr/libexec/mysqld: Shutdown complete
140602 22:36:39 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
你已经修改了my.cnf中的datadir的值
你已经chown和chmod了数次新数据目录或者其父路径的属主和权限
你无数次地试图sudo systemctl restart mysqld,以及mysql_install_db!
恭喜你看见这篇文章,我在被系统坑了几个小时之后,找到了解决的方法。
apparmor,这个坑爹货!它也对mysql所能使用的目录权限做了限制
在 /usr/share/mysql/policy/apparmor/usr.sbin.mysqld(如果没有这个,请sudo find / -name "apparmor"查看自己的相关文件所在) 这个文件中,有这四行,规定了mysql使用的数据文件路径权限
/var/lib/mysql/ r,
/var/lib/mysql/** rw,
/var/lib/mysql/*.log w,
/var/lib/mysql/*.err w,
你一定看到了,/var/lib/mysql/就是之前mysql安装的数据文件默认路径,apparmor控制这里mysqld可以使用的目录的权限
我想把数据文件移动到/data/mysql下,那么为了使mysqld可以使用/data/mysql这个目录,照上面那四条,增加下面这四条就可以了
/data/mysql/ r,
/data/mysql/** rw,
/data/mysql/*.log w,
/data/mysql/*.err w,
之后,就可以顺利地干你想干的事儿了!