centos:另一个MySQL守护程序已经在使用相同的unix套接字运行


77

启动mysqld服务时出现一个奇怪的错误:

Another MySQL daemon already running with the same unix socket.

我试图列出正在运行的服务并停止它们,但是启动mysqld服务时会发生相同的错误。

我可以尝试删除mysqld并重新安装它,但是这也会删除数据库吗?

Answers:


228

为防止出现此问题,必须从命令行正常关闭服务器,而不要关闭服务器电源。

#shutdown -h现在

这将在关闭计算机电源之前停止正在运行的服务。

在Centos的基础上,遇到此问题时再次恢复它的另一种方法是移动mysql.sock:

# mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak

# service mysqld start

重新启动服务将创建一个名为mqsql.sock的新条目。


5
上面的第二个建议对我有用。一定发生了,因为我没有正常关闭服务器。这样做# reboot并不能解决问题。从未尝试过shutdown -h now
fred 2014年

5
“ shutdown -h now”和启动对我来说并没有解决,但“ CentOS”选项却很吸引人。
PJ Brunet 2014年

2
执行# mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak那么# shutdown -h now,它应该很好。
Michael Stramel 2014年

移动袜子文件也对我有用。我有一个大问题是这是怎么发生的。我从来没有见过这个问题。
sstringer 2014年

有谁知道怎么可能发生此问题?
axiom82 2014年

19

TL; DR:

以root身份运行此命令,您将被设置为:

rm $(grep socket /etc/my.cnf | cut -d= -f2)  && service mysqld start

较长版本:

您可以通过手动拨入/etc/my.conf或仅使用来找到MySQL套接字文件的位置

grep socket /etc/my.cnf | cut -d= -f2

可能是/var/lib/mysql/mysql.sock。然后(当然,或者以root用户身份sudo)删除该文件:

rm /var/lib/mysql/mysql.sock

然后启动MySQL守护进程:

service mysqld start

删除mysqld根本无法解决问题。问题在于CentOS和RedHatsock在崩溃后不会清理文件,因此您必须自己做。(当然)也建议​​避免关闭系统电源,但是有时您无法避免关闭电源,因此此过程可以解决问题。


cut -d= -f2位可能会出现错误的,因为你所期望的一个值后出现=的迹象,但= 就是传递给值-d选项:换句话说,=被用作分隔符cut
iconoclast 2014年

如果你在Ubuntu上,尝试更换/etc/my.cnf/etc/mysql/my.cnf
iconoclast

我建议使用比任何包含socket至少一行的行都更具体的内容grep '^socket[[:space:]]=' /etc/my.cnf,否则您最终可能会删除不想要的内容。
Beli 2015年

4

我已找到解决此问题的任何人的解决方案,将套接字目录更改为my.cnf文件中的新位置

socket=/var/lib/mysql/mysql2.sock

service mysqld start

或GeckoSEO回答的快速方法

# mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak

# service mysqld start

8
我只是删除了mysql.sock文件,然后重新启动了服务。
摩根(Morgan)

3

我的解决方案是从硬关闭中将/ var / lib / mysql /目录中的mysql.sock保留下来。Mysql认为它在未运行时已经在运行。


是的,您是对的,我关闭了系统,然后出现此问题,所以当我启动服务器时不显示此错误,您有解决方法
Mas

2

只需与您的操作系统供应商一起打开错误报告,要求他们将套接字放入/ var / run,以便在重启时自动删除该套接字。在不干净的重新启动后保留此套接字是一个错误,/ var / run是这类文件的位置。


1

为了自动清理.sock文件,请将这些行立即放在文件“ /etc/init.d/mysqld”中。

test -e /var/lib/mysql/mysql.sock
SOCKEXIST=$?

ps cax | grep mysqld_safe
NOPIDMYSQL=$?

echo NOPIDMYSQL $NOPIDMYSQL
echo SOCKEXIST $SOCKEXIST

if [ $NOPIDMYSQL -eq 1 ] && [ $SOCKEXIST -eq 0 ] ; then
    echo "NOT CLEAN"
    rm -f /var/lib/mysql/mysql.sock
    echo "FILE SOCK REMOVED"
else
    echo "CLEAN"
fi

它为我工作。我之所以必须这样做是因为我没有UPS,而且经常发生电源故障。

问候。


以上是解决方法,因为一旦发生无法控制的情况,电源就会关闭,UPS会在一段时间后死亡。因此,服务器必须恢复。我在mysql 5.7(centos 6)安装上有此问题,但在5.1(centos 5)上却没有。我没有时间研究第一个问题出在哪里,所以我将改进这个答案并加以利用。如果-[$?-eq 0]; 然后
ciuly

似乎我花了超过5分钟的时间才准备好pastebin:这是pastebin.com/DpiSGrmh
2007年

1

在操作系统重新启动期间,MySQL服务无法正常关闭时,可能会出现某些情况。/var/lib/mysql/mysql.sock已被保留。这样可以防止“ mysqld”启动。

这些步骤可能会帮助:

1:服务mysqld启动killall -9 mysqld_safe mysqld服务mysqld启动

2:rm /var/lib/mysql/mysql.sock服务mysqld启动


0

要启动MySQL服务,您可以删除'/var/lib/mysql/mysql.sock'并再次启动MySQL服务:

删除套接字文件:

[root@server ~]# rm /var/lib/mysql/mysql.sock
rm: remove socket `/var/lib/mysql/mysql.sock'? yes

启动MySQL服务:

[root@server~]# service mysqld start
Starting mysqld:                                           [  OK  ]

这将帮助您解决问题。


0

这只是由于mysql服务异常终止而发生的。删除或备份/var/lib/mysql/mysql.sock文件,然后重新启动mysql。

如果有任何问题,请让我知道。


-1

我只是经历了这个问题,没有任何建议可以解决我的问题。虽然我无法在启动时启动MySQL并在日志中找到相同的消息(“另一个MySQL守护程序已经在使用相同的unix套接字运行”),但是一旦到达控制台,我便能够启动该服务。

在我的配置文件中,找到以下行:bind-address=xx.x.x.x。我随机决定将其注释掉,并且启动时的错误消失了。因为绑定地址可以提供安全性,所以我决定进一步探索它。我使用的是机器的IP地址,而不是IPv4环回地址- 127.0.0.1

总之,通过使用127.0.0.1作为bind-address,我能够解决这个错误。我希望这对有此问题但无法使用上述详细答案解决的人有所帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.