Linux|系统管理|WEB开发

关注Linux,系统管理,WEB开发以及开源世界

Ubuntu下移动mysql数据库位置

| Comments

本来呢,这是一挺简单的活。 停止数据库,把数据库文件移动到你指定的位置,设置好目录权限。修改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服务就正常了。

这里记录下我的搬迁过程,无过程无真相:

  1. 设置你的位置,我这里设定在/home/websites/database下面。数据文件放在/home/websites/database/mysql目录下,pid文件,错误日志放在/home/websites/database/var目录下。 cp -a /var/lib/mysql /home/websites/database
    至于/var/run/mysqld这些就不要了。
  2. 设置权限,其中/home/websites/database这些只要有rx权限。/home/websites/database/mysql目录属主和属组都是mysql.而/home/websites/database/var 目录属主是mysql,组是root

  3. 修改/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,
     }
    
  4. 重启Apparmor服务,启动MySQL服务。查看/home/webistes/database/var目录下的mysqld_error.log文件,看看有什么报错没有,看看该目录下有没有mysql.sockmysqld.pid,如果有的话,表示成功了。如果有包权限的问题。你可以su到mysql帐号,尝试在/home/websites/database/mysql目录下建立文件,创建目录看看。

Comments