Mysql 无法启动,缺少 mysqld.sock

Mysql 无法启动,缺少 mysqld.sock

在我重启服务器之后,除了“mysql”之外所有东西都正常启动,我尝试手动“ /etc/init.d/mysql restart”或使用“ service mysql restart”启动它,但失败了

日志文件中显示:

Jul 16 08:13:38 localhost /etc/init.d/mysql[18136]: error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'
Jul 16 08:13:38 localhost /etc/init.d/mysql[18136]: Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!

我检查了该路径,但没有找到该套接字文件,请指教?

答案1

要查找系统上的所有套接字文件,请运行:

sudo find / -type s

我的 Mysql 服务器系统在/var/lib/mysql/mysql.sock

找到打开套接字的位置后,在文件中添加或编辑/etc/my.cnf包含套接字文件路径的行:

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

有时启动命令行可执行文件的系统启动脚本会指定一个标志--socket=path。此标志可能会覆盖my.cnf位置,从而导致在 my.cnf 文件指示的位置找不到套接字。然后,当您尝试运行 mysql 命令行客户端时,它将读取 my.cnf 以查找套接字,但找不到它,因为它偏离了服务器创建套接字的位置。因此,除非您关心套接字所在的位置,否则只需更改 my.cnf 以匹配即可。

如果你是Linux系统的超级用户,那么基于以上操作就可以了:

kill -9 <pid_of_mysql>

或者有时你可以这样做:

pkill -9 mysqld

完成此操作后,您可能需要查找 pid 文件/var/run/mysqld/并将其删除

确保套接字上的权限使得任何运行 mysqld 的用户都可以对其进行读取/写入。一个简单的测试是将其开放为完全读取/写入,看看它是否仍然有效:

chmod 777 '/var/run/mysqld/mysqld.sock'

如果问题得到解决,您可以根据安全设置根据需要定制套接字的权限和所有权。

此外,运行 mysqld 进程的用户必须能够访问套接字所在的目录。

参考 :https://stackoverflow.com/questions/11990708/error-cant-connect-to-local-mysql-server-through-socket-var-run-mysqld-mysq

答案2

我尝试在“安全模式”下启动 mysql 来创建 sock 文件和 pid 文件,但由于某些“bind”错误而失败,

  1. 我将 my.cnf 中“bind ip”参数中的 IP 地址更改为 localhost
  2. 以安全模式启动 mysql。
  3. 以正常模式重新启动mysql,一切正常。

答案3

是的,如上所述,首先找到套接字文件#find / -type s,如果在 /var/run/mysqld/ 目录下找到 mysqld.sock 文件,检查是否有任何 mysqld 实例正在运行,#netstat -anpt | grep 3306 or #ps aux | grep mysqld如果发现任何正在运行的进程,请停止它(#kill -9 pid)并删除套接字文件。然后尝试重新启动它,如果 mysql 没有创建套接字文件,则尝试启动它,如下所示

#/usr/sbin/mysqld --defaults-file=/etc/mysql/my.cnf --basedir=/usr --datadir=/var/lib/mysql --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock

还要检查你的 my.cnf 文件(/etc/mysql/my.cnf)并注释掉 bind-address 字段,如果发现任何 skip-network 字段,请对其进行注释。

答案4

当我重新启动笔记本电脑(Ubuntu 20.04 LTS)时,我遇到了类似的问题,MySQL 启动失败。我只知道缺少 mysqld.sock。

要查找系统中的所有套接字文件,请执行以下操作:

sudo find / -type s

并检查是否有 mysqld.sock 文件。如果其他地方有 mysqld.sock,则阅读解决方案这里

如果任何地方都没有 mysqld.sock 文件,那么请继续。

mysql 默认在“/var/run/mysqld/”中有 mysqld.sock。如果你在任何地方都找不到 mysqld.sock,请检查“/var/run/”中的 mysqld 目录。对我来说,mysqld 目录丢失了。要找回它,请打开终端并执行

sudo dpkg-reconfigure mysql-server-*version*

之后mysqld文件夹应该会恢复/var/run/mysqld.sock文件位于mysqld文件夹内。使用 检查状态sudo service mysql status

相关内容