乍看标题,似乎这是一篇没有任何技术含量的转贴,但是,却恰恰相反,本文就是为了抨击这种不负责的转贴而写。
由于/var分区空间小,于是想把mysql的数据库移动到/home下,这个很简单(对,群里人也都说很简单,大家都说很简单),google了一下一堆的文章,找了个比较权威的来搞,如下:
http://database.51cto.com/art/200905/125833.htm
但是到最后一步启动mysql的时候却接到了一个faild,查看日志,发现有如下提示:
Aug 10 09:18:26 localhost mysqld[9751]: 090810 9:18:26 InnoDB: Operating system error number 13 in a file operation.
Aug 10 09:18:26 localhost mysqld[9751]: InnoDB: The error means mysqld does not have the access rights to
Aug 10 09:18:26 localhost mysqld[9751]: InnoDB: the directory.
Aug 10 09:18:26 localhost mysqld[9751]: InnoDB: File name ./ibdata1
Aug 10 09:18:26 localhost mysqld[9751]: InnoDB: File operation call: ‘open’.
Aug 10 09:18:26 localhost mysqld[9751]: InnoDB: Cannot continue operation.
看来是权限的问题,索性将chmod 777给了/home/mysql,但是,没有任何起色。
在google上搜索相关的文章,最后在一个bug贴中找到了一个临时解决办法:aa-complain mysqld,一个鸵鸟策略。
但是,好景不长,当我用apt-get重新配置mysql的时候(比如安装了插件,则自动配置mysql),问题又回来了,看来,这个脑袋还得从土里拿出来。
问题定为到了apparmor上,但是在上述教程中已经将/etc/apparmor.d/usr.sbin.mysqld的相关目录做了修改,难道其它的地方还有吗?死马当活马医,拿出find+grep大法,在/etc/apparmor搜索所有跟/var/lib/mysql(原来的mysql数据库目录)有关的配置,果不其然,最后在/etc/apparmor.d/abstractions/mysql找到了
/var/lib/mysql/mysql.sock rw,
这么一行,看来应该是问题的症结所在了。将其注释掉,并增加一句:
/home/mysql/mysql.sock rw,
保存退出重启mysql和apparmor,哈哈,问题解决了。
后记:但一直到最后把问题搞定,也没有在google上搜到关于这个隐藏配置的文章,大把大把的篇幅都是被机械的转载再转载,不得不说这是技术界的悲哀…