欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

服务器突然断电,造成Mysql启动不了的问题解决

服务器突然断电,造成MySQL数据库启动不了的问题,现象如下:

[root@localhost ]# service mysql55-mysqld start  
kill 31011: No such process  
Another MySQL daemon already running with the same unix socket.  
Starting mysql51-mysqld:                                   [FAILED]  
  
[root@localhost ]# service mysql55-mysqld status  
mysql51-mysqld dead but pid file exists  

本想找pid文件删除,后来找不到这个文件
于是重命名mysql.sock文件后启动成功:

[root@localhost ]# mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.back  
[root@localhost ]# service mysql55-mysqld start  
Starting mysql51-mysqld:                                   [  OK  ]  

Mysql有两种连接方式:

  • TCP/IP

  • socket

对mysql.sock来说,其作用是程序与mysqlserver处于同一台机器,发起本地连接时可用。
例如你无须定义连接host的具体IP得,只要为空或localhost就可以。
在此种情况下,即使你改变mysql的外部port也是一样可能正常连接。
因为你在my.ini中或my.cnf中改变端口后,mysql.sock是随每一次 mysql server启动生成的。已经根据你在更改完my.cnf后重启mysql时重新生成了一次,信息已跟着变更。

原因多个Mysql进程使用了同一个socket。

两个方法解决:

  1. 立即关机 使用命令 shutdown -h now 关机,关机后在启动,进程就停止了。

  2. 直接把mysql.sock文件改名即可。也可以删除,推荐改名。
    然后就可以启动mysql了。



作者:Dingsf
链接:https://www.jianshu.com/p/01f79ab1aac3
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


来自  https://www.jianshu.com/p/01f79ab1aac3


意外断电MySQL无法启动

物理机:Windows Server2008r2 Hyper-V

虚拟机:CentOS6.5 Final x64

LAMP环境,都是用官方的镜DVD像源安装的,默认目录没有做任何修改,DedeCMS5.6utf8做为门户网站框架


偶然间发现莫名其妙mysql突然起不来,httpd没问题,但因mysql起不来,很多链接直接报错,且后台也进不去,经查找发现是mysql起不来,如下图:

意外断电MySQL无法启动

说是己经存在一个mysqld的daemon,但status又确实为stopped,后来一想是不是/var/lib/mysql/mysql.sock这个文件在使坏,于是直接将其remove掉,再启动,一切恢复正常。

意外断电MySQL无法启动

就这样又过了个把星期,突然又出现这各情况,我想,不对啊,linux有着Unix的优良血统怎么会这么不稳定,每次都要手动把/var/lib/mysql/mysql.sock干掉再启动mysqld,完全没道理。于是乎大势google一番,看到有朋友也遇到同样的问题,关键是mysql的通信机制默认是用socket来通信,“意外断电”造成/var/lib/mysql/mysql.sock无法正常关闭。

我就想啊,意外断电,我装在虚拟机里在啊,又没有人闲着没事去瞎动,后来直到我一同事在物理机上又装了一个虚拟机windows server2008r2跑的是子公司的OA系统,没跑几天就接到电话说不能访问,发现是tomcat这个服务没起来,手动启起来就好,我这才联系起来。

物理机不稳定,时不时会重启,虽然Hyper-V会随机自启动,但物理机重启时虚拟机是“意外断电”根本不是正常关闭,/var/lib/mysql/mysql.sock没有在mysql正常关闭时正常释放,所以开机时httpd起来了,mysqld确因为/var/lib/mysql/mysql.sock仍存在,报了一个Another MYsql daemon already running的错误。而我同事的OA(win版的tomcat+mysql)却连httpd这个进程都没起来,每次都通过bat脚本来开启和关闭服务,我这才明白是怎么回事,说到这,开始以为是内核不稳定,因为CentOS6.5才刚出来不久,在上DedeCMS5.6这前都是用CentOS6.4测试的,不过,终于找着北了。

 

接下来就是迁移虚拟机了,不然还得时不时的手动删/var/lib/mysql/mysql.sock再启动了,哈这里也给出一个前辈们用过的临时解决方案:

 

 

解决办法:
在MySQL进程没启动之前,将/var/lib/mysql/mysql.sock清掉,这样linux重启时就不会误认为Another MYsql daemon already running

这个就与CentOS(RHEL)的启动流程有关了,在服务没启之前的第一个进程为init ,而控制这个进程的启动脚本为/etc/rc.sysinit

所以

vim /etc/rc.sysinit
在末尾添加一个判断

#Clean up mysql.sock
Default_Mysql_Sock="/var/lib/mysql/mysql.sock"   #定义默认mysql.sock的位置

if [ -x $Default_Mysql_Sock ];then
    rm -rf $Default_Mysql_Sock
fi

当然也可以直接这样
意外断电MySQL无法启动


来自  http://blog.sina.com.cn/s/blog_8ea8e9d50101pax6.html

普通分类: