在我重启服务器之后,除了“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 进程的用户必须能够访问套接字所在的目录。
答案2
我尝试在“安全模式”下启动 mysql 来创建 sock 文件和 pid 文件,但由于某些“bind”错误而失败,
- 我将 my.cnf 中“bind ip”参数中的 IP 地址更改为 localhost
- 以安全模式启动 mysql。
- 以正常模式重新启动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
。