本来呢,这是一挺简单的活。
停止数据库,把数据库文件移动到你指定的位置,设置好目录权限。修改my.cnf文件。
主要是修改datadir的参数。基本上就OK了。
但是,Ubuntu下偏偏多了一个Apparmor的工具,据说是作为SELinux的一种替代方案。
最开始我还不知道有这玩意儿存在。
按照原来在RHEL上迁移默认数据库路径的方法在Ubuntu上做了一遍,启动数据库的时候,无论你怎么设置目录的权限,属主和属组,都是会error -13的错误。
是说权限不够。但是我切换到mysql帐号下,mkdir,touch都很正常呀了。
Google了半天,其中有人提到了Apparmor这东西。果然在/etc/apparmor.d/目录下看到usr.sbin.mysqld的配置文件,里面记录了mysqld可以对哪些路径进行操作的定义。按照规则修改,重启Apparmor服务。再重启mysql服务就正常了。
这里记录下我的搬迁过程,无过程无真相:
- 设置你的位置,我这里设定在
/home/websites/database下面。数据文件放在/home/websites/database/mysql目录下,pid文件,错误日志放在/home/websites/database/var目录下。cp -a /var/lib/mysql /home/websites/database
至于/var/run/mysqld这些就不要了。 设置权限,其中
/home/websites/database这些只要有rx权限。/home/websites/database/mysql目录属主和属组都是mysql.而/home/websites/database/var目录属主是mysql,组是root。修改
/etc/apparmor.d/usr.sbin.mysqld根据上面的描述,文件修改成下面这个样子:# vim:syntax=apparmor # Last Modified: Tue Jun 19 17:37:30 2007 #include /usr/sbin/mysqld { #include #include #include #include #include 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/my.cnf r, /usr/sbin/mysqld mr, /usr/share/mysql/** r, /home/websites/database/var/mysqld_error.log rw, /home/websites/database/mysql/ r, /home/websites/database/mysql/** rwk, /home/websites/var/ r, /home/websites/var/* rw, /home/websites/var/mysqld.pid w, /home/websites/var/mysqld.sock w, }重启Apparmor服务,启动MySQL服务。查看
/home/webistes/database/var目录下的mysqld_error.log文件,看看有什么报错没有,看看该目录下有没有mysql.sock和mysqld.pid,如果有的话,表示成功了。如果有包权限的问题。你可以su到mysql帐号,尝试在/home/websites/database/mysql目录下建立文件,创建目录看看。