mysql 数据文件位置修改

假如要把目录移到/home/data下需要进行下面几步:
1、home目录下建立data目录
  cd /home
  mkdir data
2、把MySQL服务进程停掉:
  mysqladmin -u root -p shutdown
3、把/var/lib/mysql整个目录移到/home/data
  mv /var/lib/mysql /home/data/
  这样就把MySQL的数据文件移动到了/home/data/mysql下
4、找到my.cnf配置文件
  如果/etc/目录下没有my.cnf配置文件,请到/usr/share/mysql/下找到*.cnf文件,拷贝其中一个到/etc/并改名为my.cnf)中。命令如下:
   [root@test1 mysql]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
5、编辑MySQL的配置文件/etc/my.cnf
  为保证MySQL能够正常工作,需要指明mysql.sock文件的产生位置。修改socket=/var/lib/mysql/mysql.sock一行中等号右边的值为:/home/mysql/mysql.sock 。操作如下:
   vi  my.cnf    (用vi工具编辑my.cnf文件,找到下列数据修改之)
   # The MySQL server
    [mysqld]
    port   = 3306
   #socket  = /var/lib/mysql/mysql.sock(原内容,为了更稳妥用“#”注释此行)
   socket  = /home/data/mysql/mysql.sock   (加上此行)
6、修改MySQL启动脚本/etc/init.d/mysql
  最后,需要修改MySQL启动脚本/etc/init.d/mysql,把其中datadir=/var/lib/mysql一行中,等号右边的路径改成你现在的实际存放路径:home/data/mysql。
  [root@test1 etc]# vi /etc/init.d/mysql
  #datadir=/var/lib/mysql    (注释此行)
  datadir=/home/data/mysql   (加上此行)
7、重新启动MySQL服务
  /etc/init.d/mysql start
  或用reboot命令重启Linux

  如果工作正常移动就成功了,否则对照前面的7步再检查一下。还要注意目录的属主和权限。

修改权限

chown -R mysql:mysql data


************重要的来了**********



如果你启动的过程中出现了如下的错误

Can't create test file /home/mysql/localhost.lower-test


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了数次新数据目录或者其父路径的属主和权限


你无数次地试图service mysql start,或者 /etc/init.d/mysql start,以及mysql_install_db!


恭喜你看见这篇文章,我在被系统坑了几个小时之后,找到了解决的方法。


这个原因有二,其中任意的一个原因都会造成你被系统告知这个warning。如果你不是一个专业的linux系统安全工程师,或者你只是个PHP程序员,并没有对系统安全有深入的研究,你就不会太容易找到它的答案。


第一,selinux,记得当年念书时,字符界面安装redhat(很古老的操作系统么。。。)的时候,有这么一个选项,通常大家都听取前辈的建议,改变默认值以不安装它。但如果你恰好要操作的这台机器开着selinux,它确实能够使你的mysql无法在新目标位置进行mysql_install_db的操作,并爆出标题所示的警告。一个简单的解决办法是使用命令暂时关闭selinux,以便让你的操作可以继续下去

setenforce 0

但最好使用一个永久方法,以便在重启后继续不要这货。

修改/etc/selinux/config文件中设置SELINUX=disabled ,然后重启或等待下次重启。


第二,apparmor,这个坑爹货和selinux一样的坑爹,它也对mysql所能使用的目录权限做了限制

在 /etc/apparmor.d/usr.sbin.mysqld 这个文件中,有这两行,规定了mysql使用的数据文件路径权限


/var/lib/mysql/ r,

/var/lib/mysql/** rwk,


你一定看到了,/var/lib/mysql/就是之前mysql安装的数据文件默认路径,apparmor控制这里mysqld可以使用的目录的权限

我想把数据文件移动到/data/mysql下,那么为了使mysqld可以使用/data/mysql这个目录,照上面那两条,增加下面这两条就可以了


/data/mysql/ r,

/data/mysql/** rwk,


重启apparmor,/etc/inid.d/apparmor restart

之后,就可以顺利地干你想干的事儿了!