您可能偶然发现了这个MySQL错误。 如果您以前已经看过此内容,那么很容易识别并修复它。 但是,如果您以前从未见过此错误,则需要花费一些时间来解决问题。 我正在列出解决此问题的步骤。
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
此问题可能是由于以下原因引起的:
- MySQL服务未运行
- 端口3306未打开
- IP表规则阻止传入请求
MySQL服务
您可以通过运行以下命令快速检查MySQL服务的当前状态:
/> sudo service mysql status
/> mysql stop/waiting
如果它显示为“停止/等待”,则只需重新启动服务并重新测试您的应用程序即可。
/> sudo service mysql start
MySQL端口和IP表规则
如果服务正在运行,而您仍然无法连接到远程数据库,则端口可能未打开或MySQL服务器正在侦听其他端口。 通常,MySQL服务器在3306端口上侦听。
/> netstat -nlp --inet
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 26417/mysqld
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 617/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1079/exim4
udp 0 0 172.26.196.17:123 0.0.0.0:* 1274/ntpd
udp 0 0 127.0.0.1:123 0.0.0.0:* 1274/ntpd
udp 0 0 0.0.0.0:123 0.0.0.0:* 1274/ntpd
udp 0 0 0.0.0.0:161 0.0.0.0:* 1155/snmpd
如果您注意到mysqld在该端口上进行监听,则问题可能出在其他地方。 下一步是确保IP表允许流量通过端口3306。
/> iptables -L
Chain services (1 references)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:mysql
如果您得到上面的一行,则表明IP规则正确,否则您需要添加IP规则以允许通信。 我通常添加以下规则以允许流量。 这是非常通用的规则,它允许来自任何地方的流量。 您甚至可以根据需要限制来源。
#!/bin/sh
IPTABLES=${IPTABLES:-/sbin/iptables}
CHAIN=${1:-services}
$IPTABLES -A $CHAIN -j ACCEPT -p tcp --dport 3306
在/etc/iptables.rules.services
添加上述规则后,运行以下命令,并确保该规则已反映在IP表中。
/> /etc/iptables.rules
再次启动该应用程序,它不应遇到相同的问题。 如果确实抛出相同的异常,则问题必须在其他地方。 检查您的应用程序配置。
希望以上解决方案将帮助您解决问题。 如果您想出自己的解决方法,请在评论部分中分享。
翻译自: https://www.javacodegeeks.com/2014/06/mysql-error-cant-connect-to-mysql-server.html