MySQL 突然停止 LAMP 堆栈。

4
我一直使用Ubuntu上的LAMP堆栈。
它一直很正常,设置了多个数据库,一切都很好,但今天早上突然从我正在使用的网页中出现了数据库错误,然后尝试访问PHPMyAdmin时出现了以下错误:
error #2002 Cannot log in to the MySQL server

我进入Bash提示符并尝试以root用户登录,查看发生了什么。我得到了类似的错误:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111) 

我检查了上述错误中指定路径下的mysql.sock文件,发现该文件已经存在。权限也正确,并且属于mysql用户。为了排除其他问题,我重新设置了权限,但仍然出现同样的错误。
以下是从BASH中查看该文件的内容:
srwxrwxrwx 1 mysql mysql 0 Oct 21 05:10 mysqld.sock

我想只需重新启动服务,但当尝试停止、启动或重新启动服务时,却收到相同的错误信息。这让我很困惑,虽然我不是Linux方面的专家,但我不明白为什么在没有更改任何配置设置并且在过去几个月内都运行得非常好的情况下,它会突然出现此问题。我尝试重启Apache,但出现了以下错误:
apache2: bad user name ${APACHE_RUN_USER}

我认为这与MySQL无关,但可能涉及其中。Apache错误似乎更多是设置方面的问题,但是我运气不好,懒惰可能导致我忽视了一些简单的事情,从而导致一切崩溃。

任何有关如何解决问题并更重要的是如何防止这种情况再次发生的帮助都将不胜感激。

我已经尝试了大多数基本的Google搜索和查找此处的内容。我还没有尝试删除并重新创建套接字文件,但到目前为止,大多数其他方法都没有起作用。

编辑:

我只想添加Apache服务器仍在正常运行,没有什么问题,即使在尝试停止和重新启动时出现错误。不依赖于MySQL的页面仍能正常加载。

我还尝试通过搜索PID并像下面建议的那样使用killall mysqld(还为了好玩尝试了killall mysql)来杀死mysql进程。这些尝试中未找到任何进程。

我不知道它是否相关,但是即使使用超级用户,我也无法打开(在vim中)或查看mysqld.sock文件(权限被拒绝)。


service mysql restart 出现了什么错误?service mysql status 呢?消息日志中有显示任何信息吗?(抱歉,我更熟悉 SUSE,所以对我来说是 /var/log/messages - Basic
你尝试过读取错误日志来发现它想要告诉你什么吗? - Gavin Towey
mysqld 重新启动(及其他变化)仍然会出现相同的 mysql.sock 错误。如下所述,最终我删除并再次启动了服务,似乎解决了问题。这本应该是我首选的方法。我没有检查错误日志,但现在准备去查看。 - elzaer
3个回答

5
你尝试过使用吗?
killall mysqld

你可以尝试杀死服务器而不仅仅是结束服务,然后再启动MySQL服务吗?
或者你可以尝试使用以下命令删除mysql.sock:
rm /var/run/mysqld/mysqld.sock

那么你只需要通过启动服务或运行命令来再次运行MySQL服务器。

mysqld

它应该为自己创建一个新的 /var/run/mysqld/mysqld.sock,然后一切都会很好。 只是一个想法:这可能是因为计算机没有正确关机,或者MySQL有点混乱。

我尝试了这个并得到了:没有找到进程。我应该补充说明一下,我浏览了PID列表,试图杀死任何仍在那里逗留的东西,但是什么也没有。 - elzaer
我将这个添加到原始问题中,因为对我来说似乎相当相关,这并没有起作用。 - elzaer
1
好的。那么,尝试删除mysql.sock文件,并直接从命令行执行服务器(我想是'/etc/mysqld/mysqld'),以便在发生任何信息和错误时捕获它们。mysqld应该会重新创建socket文件。 - phillid
那似乎起作用了,你要把这个加到你的答案里吗,我会将其打勾? - elzaer

2
在Ubuntu中创建一个微型实例的交换空间:

dd if=/dev/zero of=/swapfile bs=1M count=1024

mkswap /swapfile

swapon /swapfile

以上命令将创建一个1GB大小的交换文件,并将其作为交换分区使用。

1

你尝试过只是重启MySQL服务器吗?

/etc/init.d/mysqld restart 
/etc/init.d/mysqld stop 
/etc/init.d/mysqld start

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接