ubuntu12.04使用软链接更改MySQL5.5数据库目录(datadir)

来源:互联网 发布:密松水电站 知乎 编辑:程序博客网 时间:2024/06/18 01:00
ubuntu12.04,mysql5.5.

mysql默认的数据库目录放在/var/lib/mysql/中,此目录分区时分在了根目录(/)中,一次重装系统时忘记了备份数据,于是mysql的数据库数据就没了。

于是打算把mysql的数据库目录移到独立分区的/home/目录下面。

首先把/var/lib/mysq/复制到/home/中,然后建立软链接:
sudo stop mysql
sudo cp -a /var/lib/mysql/ /home
sudo rm -rf /var/lib/mysql
sudo ln -s /home/mysql /var/lib/mysql
sudo start mysql

结果报错,无法启动mysql。一开始以为是数据库目录不支持链接接,但官方手册上都是写支持的。

+7.6.1. 使用符号链接 http://www.yiibai.com/mysql5/symbolic-links.html
+关于mysql安装后更改数据库路径方法-linux环境 http://yuanrufeng.cn/post/111

于是开始折腾:

以为是文件的权限没设对,于是设了又设,确定是设对了的(可以用stat命令对比正常的文件和需要设置的文件的权限)。

以为是启动命令的问题,一开始是用/etc/init.d/mysql启动mysql服务。于是找相关资料,发现init.d/mysql中的服务相关的文件是/etc/init/mysql.conf。
然后发现最后调用的命令是start mysql。

+Upstart: Ubuntu 的基于事件的启动进程 http://blog.csdn.net/liuzhaofu836459840/article/details/7387773

又觉得跟启动命令没关于,尝试直接用mysqld启动,结果报错:
sudo mysqld --defaults-file=/etc/mysql/my.inf
sudo mysqld --defaults-file=/etc/mysql/my.cnf
130211 23:08:44 [Warning] Can't create test file /home/mysql/g-G41-M7.lower-test
130211 23:08:44 [Warning] Can't create test file /home/mysql/g-G41-M7.lower-test
......

删除软链接,把/home/mysql/复制回/var/lib/mysql/,结果正常启动。如此反反复复,也试过直接修改my.cnf中的datadir属性指向新目录,但mysql.sock文件又有问题。感觉用链接接不改my.cnf才是好方法。

复制出一个/var/lib/mysql_test/目录,修改my.cnf指向,start和mysqld都无法启动。
复制出一个/tmp/mysql/目录,修改my.cnf指向,可以启动。

+Mysqld 5.1.41的一个神奇bug http://blog.zzzhc.com/blogs/107/
//把mysql复制到/tmp/下,能正常启动.

真奇怪,就好像有一只“无形的手”那样,像RedHat的SELinux那样,但Ubuntu没有装SELinux的呢。

于是想到,建软链接指向/var/lib/mysql/目录试试:
/var/lib/mysql_ln -> /var/lib/mysql/(软链接),修改my.cnf指向mysql_ln,可以启动,也就是mysql死钉住/var/lib/mysql/目录了,不是软链接的问题。并且“无形的手”是与/var/lib/mysql/有关,与软链接/var/lib/mysql_ln/无关。

换关键词搜索,找到了问题所在:
+ubuntu 修改 mysql datadir http://www.google.com.hk/search?q=ubuntu+%E4%BF%AE%E6%94%B9+mysql+datadir&oq=ubuntu+%E4%BF%AE%E6%94%B9+mysql+datadir&sourceid=chrome&ie=UTF-8
+Ubuntu下自己设置MySql的datadir http://renyan.spaces.eepw.com.cn/articles/article/item/84719
+如何配置mysql的数据库目录 http://forum.ubuntu.org.cn/viewtopic.php?f=44&p=1074517

修改文件:
sudo vi /etc/apparmor.d/usr.sbin.mysqld
把相关行改为:
# /var/lib/mysql/ r,
# /var/lib/mysql/** rwk,
#zjq@20130211 add /home/mysql/
/home/mysql/ r,
/home/mysql/** rwk,

然后my.cnf依然指回/var/lib/mysq/,把/var/lib/mysql/软链接到/home/mysql/
成功启动。

以后装完mysql后只要把默认的/var/lib/mysql/覆盖/home/mysql/(只会覆盖像mysql这类系统默认的数据库,自己建立的数据库不受影响),再对/var/lib/mysql/建立软链接,就可以继续使用mysql数据了。