《MysqL入门MysqL下PID文件丢失的相关错误的解决方法》要点:
本文介绍了MysqL入门MysqL下PID文件丢失的相关错误的解决方法,希望对您有用。如果有疑问,可以联系我们。
今天同事A找到我,说是MysqL server X的负载很高,查询很慢.他自己捣鼓了一阵未果后,我们一起看了下.MysqL入门
[root@redhat var]# uname -alinux xxx 2.6.18-128.el5 #1 SMP Wed Dec 17 11:41:38 EST 2008 x86_64 x86_64 x86_64 GNU/linux[root@redhat var]# MysqL -u root -p -e “select version();”+------------+| version() |+------------+| 5.1.32-log |+------------+
同事A的 *** 作:
A一看MysqL server有问题第一反应是重启MysqL server,澹.o(s□t)
但是又使用了错误的命令
MysqL入门
[root@redhat var]# /var/lib/MysqL/libexec/MysqLd restart ---- *** 作①100708 14:43:53 [ERROR] Fatal error: Please read "Security" section of the manual to find out how to run MysqLd as root!100708 14:43:53 [ERROR] Aborting100708 14:43:53 [Note] /var/lib/MysqL/libexec/MysqLd: Shutdown complete
发现问题后,他又想起来应该是用下面的命令重启
MysqL入门
[root@redhat var]# service MysqL restart ---- *** 作②MysqL manager or server PID file Could not be found! [Failed]Starting MysqL......
CTRL+C取消MysqL入门
这时候
MysqL入门
[root@redhat var]# ps aux | grep MysqL
可以看到,系统又启动了一个MysqL进程,但是过一会后,会自动消失,这时候看日志可以发现以下错误:
MysqL入门
100708 15:26:52 [ERROR] Can't start server: Bind on TCP/IP port: Address already in use100708 15:26:52 [ERROR] Do you already have another MysqLd server running on port: 30017 ?100708 15:26:52 [ERROR] Aborting
然后后面我们一起看.
首先我用clIEnt工具连接,发现MysqL正常.web应用连接数据库也正常只是查询很慢.
其次我在命令下面,连接:
MysqL入门
[root@redhat var]# MysqL -u root -p
提示:
MysqL入门
Enter password:ERROR 2002 (HY000): Can't connect to local MysqL server through socket '/tmp/MysqL.sock' (2)
这时候同事A提醒我,可以重启服务没关系.澹o(s□t)o,他在建议我重启解决问题.
好吧,如他所愿.于是我先:
MysqL入门
[root@redhat var]# service MysqL stopMysqL is running but PID file Could not be found
然后去MysqL data dir下面查看,果然没有pID file.
这时候我的第一反应是配置文件不对,导致不能正常停止和重启.
由于server是好的,因此我没有急着去比较以前备份的/etc/my.cnf.bak和/etc/my.cnf.
我们先查找负载高的原因.因为命令行下无法进入MysqL,在clIEnt下使用
MysqL入门
可以看到里面有很多locked的查询,其中等待时间最久的一个是一个select查询,显示正在sending data,然后其余都是locked.
猜想是sending data的线程占用了“所有的分配给MysqL的资源”,导致后来的线程全部挂起,由于“查询(线程)是依次执行的”,后面locked的线程一直在等待前面sending data的线程结束.(这一段是猜想的…)
sending data的这个线程U是一个select 查询,这个select对6张表进行了连接(公司的一个实习生提交的一个查询),其中有两张表的数据量在10w左右,另外有张data表数据量在 1000w左右,另外还有sum(distinct ),group by,order by… 可以想象下…不知道要到何年何月这个查询才能执行完.
这个sending data的慢查询的processID为799,当机立断运行
MysqL入门
然后再运行
MysqL入门
可以看到前面locked的线程在一个个依次执行,后面还有好多个跟线程U类似的select线程,全部kill掉后,被堵塞的别的正常的几个Update,select,insert *** 作很快就执行完了.
而后,web应用恢复正常,速度变快.
返回linux命令行,使用
MysqL入门
[root@redhat var]# top<shift+m 按内存使用排序><1 显示cpu使用情况>
这时候可以发现server负载恢复正常.MysqL入门
下面解决无法正常关闭重启的情况.
也就是因为前面同事的误 *** 作引起的
MysqL入门
ERROR 2002 (HY000): Can't connect to local MysqL server through socket '/tmp/MysqL.sock' (2)和MysqL manager or server PID file Could not be found! [Failed]
的错误.
我前面不是怀疑是配置文件里面有什么无法识别的参数选项么.
通过
MysqL入门
[root@redhat var]# diff /etc/my.cnf /etc/my.cnf.bak
发现,配置文件没有问题.MysqL入门
#我的server的hostname,MysqL pID文件默认名字为hostname.pID,如果没有在/etc/my.cnf里面指定特定和pID filename和pID file path的话,这个文件是跟MysqL数据在一起的.
MysqL入门
[root@redhat var]# diff /etc/my.cnf /etc/my.cnf.bak
这时候通过
MysqL入门
#切换到MysqL data dir(MysqL的数据文件目录下)#你们的MysqL data dir或许跟我的不一样哦,我的是/var/lib/MysqL/var/[root@redhat var]# cd /var/lib/MysqL/var/
获取MysqL用户运行的MysqL进程的 pID,然后导入到hostname.pID文件里面
MysqL入门
[root@redhat var]# echo `ps aux | grep MysqL | grep "user=MysqL" | grep -v "grep" | awk '{print }'`>> redhat.pID#注意这里的redhat.pID跟hostname相关,这里是我的hostname.pID
将文件的属主和属主组改为MysqL:MysqL
MysqL入门
[root@redhat var]# chown MysqL:MysqL redhat.pID
然后运行
MysqL入门
[root@redhat var]# MysqL -u root -p
还是会提示:
MysqL入门
Enter password:ERROR 2002 (HY000): Can't connect to local MysqL server through socket '/tmp/MysqL.sock' (2)
[root@redhat var]# ls /tmp | grep sock
果然没有MysqL.sock这个文件MysqL入门
但是这时候运行
MysqL入门
[root@redhat var]# service MysqL status
显示
MysqL入门
MysqL running (10949) [ OK ]
恩,pID file文件恢复正常,然后运行
MysqL入门
[root@redhat var]# service MysqL restartShutting down MysqL. [ OK ]Starting MysqL. [ OK ]
这时候再运行
MysqL入门
[root@redhat var]# ls /tmp | grep sock
可以发现重启后,/tmp下有了MysqL.sock这个文件.MysqL入门
大家可以搜索下MysqL.sock的用途以及使用产生等等.MysqL入门
同事A的 *** 作① 导致pID 文件丢失, *** 作② 导致MysqL.sock文件丢失,大家感兴趣可以去vi MysqLd脚本和server MysqL脚本,然后导致service MysqL status/stop/start/restart运行异常,导致命令行下MysqL -u root -p登录MysqL异常.MysqL入门
That's all.
MysqL入门
以上是内存溢出为你收集整理的Mysql入门MySQL下PID文件丢失的相关错误的解决方法全部内容,希望文章能够帮你解决Mysql入门MySQL下PID文件丢失的相关错误的解决方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)