Linux下改动mysql的存储目录后,mysql无法启动

xrksudy 2010-07-20 10:54:02
我安装的mysql版本为:MySQL-server-community-5.1.48-1.rhel4.i386.rpm
通过命令: rpm -ivh MySQL-server-community-5.1.48-1.rhel4.i386.rpm
安装后,mysql启动正常。但是我想把默认安装的数据库文件转移到/home/data/目录下,我修改了一些配置文件后就无法启动mysql了。


我具体的安装步骤为:
1、把MySQL服务进程停掉:
mysqladmin -u root -p shutdown

采用命令查询mysql进程:ps aux | grep mysql | grep -v grep 所有有关mysql的进程都关掉了。

2、把/var/lib/mysql整个目录移到/home/data
mv /var/lib/mysql /home/data/
这样就把MySQL的数据文件移动到了/home/data/mysql下

3、找到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

4、编辑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   (加上此行)

5、修改MySQL启动脚本/etc/rc.d/init.d/mysql
最后,需要修改MySQL启动脚本/etc/rc.d/init.d/mysql,把其中datadir=/var/lib/mysql一行中,等号右边的路径改成你现在的实际存放路径:home/data/mysql。
[root@test1 etc]# vi /etc/rc.d/init.d/mysql
#datadir=/var/lib/mysql    (注释此行)
datadir=/home/data/mysql   (加上此行)

6、重新启动MySQL服务
/etc/rc.d/init.d/mysql start
或用reboot命令重启Linux

但当我操作到第6步时报错:Starting MySQL.Manager of pid-file quit without updating file.[FAILED]

查看日志文件:
[root@localhost mysql]# cat localhost.localdomain.err
100716 03:35:54 mysqld_safe Starting mysqld daemon with databases from /home/data/mysql
100716 3:35:54 [Warning] Can't create test file /home/data/mysql/localhost.lower-test
100716 3:35:54 [Warning] Can't create test file /home/data/mysql/localhost.lower-test
/usr/sbin/mysqld: Can't change dir to '/home/data/mysql/' (Errcode: 13)
100716 3:35:54 [ERROR] Aborting

100716 3:35:54 [Note] /usr/sbin/mysqld: Shutdown complete

100716 03:35:54 mysqld_safe mysqld from pid file /home/data/mysql/localhost.localdomain.pid ended

感觉是在/etc/my.cnf配置文件没配好,我把软件卸载后,把/etc/my.cnf删除,安装默认安装,和默认的数据库存储目录,mysql服务又可以启动了。
以上的操作步骤,我都是按照网上的一个教程做的。有哪位朋友能帮忙解决下?谢谢。

...全文
5138 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
Maxize 2012-07-03
  • 打赏
  • 举报
回复
遇到了楼主一样的问题,然后我的问题是只能关闭selinux 才能让mysql 启动起来,然后按照steptodream的去强制策略还是不行哦。。。在redhat 的https://bugzilla.redhat.com/show_bug.cgi?id=138421 这里找到别人说是要下载一个补丁,可是基于我刚接触linux 都不知道如何实现而且这里的地址也失效了。让我无限纠结呀。求大神帮忙解决,不然就只能关掉selinux 等以后熟悉到一定程度再开。。。
Maxize 2012-07-03
  • 打赏
  • 举报
回复
遇到了楼主一样的问题,然后我的问题是只能关闭selinux 才能让mysql 启动起来,然后按照steptodream的去强制策略还是不行哦。。。在redhat 的https://bugzilla.redhat.com/show_bug.cgi?id=138421 这里找到别人说是要下载一个补丁,可是基于我刚接触linux 都不知道如何实现而且这里的地址也失效了。让我无限纠结呀。求大神帮忙解决,不然就只能关掉selinux 等以后熟悉到一定程度再开。。。
jacko_9300 2012-02-15
  • 打赏
  • 举报
回复
启动服务器,如果日志里报错显示:“/usr/sbin/mysqld: Can't change dir to '/data/mysql/' (Errcode: 13)”
那么应该是和selinux有关,
解决办法:
vi /etc/selinux/config
修改selinux=disabled或者permissive
再次启动服务器,OK。
如果服务器可以启动,但是客户端连不上,那应该是my.cnf里client组的socket未改过来
本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2011-06/37875.htm
steptodream 2010-07-21
  • 打赏
  • 举报
回复
我觉得不是selinux的事 我还没遇到过因为selinux而程序启动不了的
遇到的都是因为selinux而无法访问的。

你先这样试试 暂时把selinux设置成无效 执行命令setenforce 0
再启动mysql试试 如果还启动不了的话 就应该不是selinux的问题

另外我8楼做的测试 也是在selinux有效的情况下设置的 没有遇到任何问题
xrksudy 2010-07-21
  • 打赏
  • 举报
回复
谢谢大家的热心回复。

默认安装是没问题的。安装之后启动的进程为:
[root@localhost opt]# ps aux | grep mysql | grep -v gerep
root 7537 0.1 0.2 5868 1088 pts/1 S 06:16 0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/localhost.localdomain.pid
mysql 7592 0.7 2.8 118484 14708 pts/1 Sl 06:16 0:00 /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --log-error=/var/lib/mysql/localhost.localdomain.err --pid-file=/var/lib/mysql/localhost.localdomain.pid
root 7611 0.0 0.0 896 48 pts/1 R+ 06:17 0:00 grep mysql

但是感觉好像是因为进程mysqld_safe的原因。
21bird说的那个我知道怎么配置。
steptodream说的rm -f /var/run/mysqld/mysqld.pid,移动文件之后就没有这文件了。我也试了下执行删除,但是最后还是无法启动。
xrksudy 2010-07-21
  • 打赏
  • 举报
回复
谢谢大家的热心帮助。
steptodream 2010-07-21
  • 打赏
  • 举报
回复
或者设置强制策略
chcon -R -t mysqld_db_t /home/data/mysql
steptodream 2010-07-21
  • 打赏
  • 举报
回复
restorecon -FRv /home/data/mysql
steptodream 2010-07-21
  • 打赏
  • 举报
回复
我晕了 还真是这个原因 让我也学习了!
xrksudy 2010-07-21
  • 打赏
  • 举报
回复 1
我按照你说的方式:执行执行命令setenforce 0,后mysql可以启动。连接数据库都没问题。但是当我改回去执行命令:setenforce 1 时,重新启动mysql,mysql还是启动不了,报之前的错误。

通过这个操作,应该是与selinux的有关吧。我的Linux是CentOS 4.3,那我要怎么操作才能让selinux处于启动状态,并且能够启动mysql啊?
steptodream 2010-07-20
  • 打赏
  • 举报
回复
楼主 我知道咋回事了 1楼的命令 我给你说错了 执行下面的
chown -R mysql:mysql /home/data/mysql

然后就OK了!

因为你用root执行mv /var/lib/mysql /home/data后
/var/lib/mysql和/var/lib/mysql下面的文件所有者也都变成root了!
steptodream 2010-07-20
  • 打赏
  • 举报
回复
你看看那几句错误信息
我感觉非常可能是权限的问题 你自己再好好检查
我不确认你的mysql是不是用到了mysql用户还是别的用户 我的情况下是mysql用户
你执行一下 grep "mysql" /etc/passwd 我看看

另外/etc/my.cnf里也有关datadir的设定
[mysqld]
datadir=/xxxx/mysql
socket=/xxxx/mysql.sock
xrksudy 2010-07-20
  • 打赏
  • 举报
回复
谢谢你的回复。没效果,我试了,还是报上面的错误。
steptodream 2010-07-20
  • 打赏
  • 举报
回复
100716 3:35:54 [Warning] Can't create test file /home/data/mysql/localhost.lower-test
100716 3:35:54 [Warning] Can't create test file /home/data/mysql/localhost.lower-test
/usr/sbin/mysqld: Can't change dir to '/home/data/mysql/' (Errcode: 13)

重点注意这几句警告和错误!
steptodream 2010-07-20
  • 打赏
  • 举报
回复
chown mysql:mysql /home/data
chown mysql:mysql /home/data/mysql
某鸟 2010-07-20
  • 打赏
  • 举报
回复
个人认为selinux最大的特色就是:不再是随便往那放个文件就可以用。
某鸟 2010-07-20
  • 打赏
  • 举报
回复
注意selinux权限,重置selinux上下文或者修改为原来的上下文。
luketty 2010-07-20
  • 打赏
  • 举报
回复
以前遇到过这个问题,看网上还有一种方法
把/var/lib/mysql下的东西移动到/home/data/

然后给/var/lib/mysql目录建立个到/home/data/的链接
ln -s /var/lib/mysql /home/data
qurihong 2010-07-20
  • 打赏
  • 举报
回复
应该是权限的问题
steptodream 2010-07-20
  • 打赏
  • 举报
回复
你在确认一下是不是修改之前的pid文件还在 /var/run/mysqld/mysqld.pid
如果在 删除 再启动试试
rm -f /var/run/mysqld/mysqld.pid
加载更多回复(3)

19,613

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧