PDOException: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/tmp/mysql.

Posted

技术标签:

【中文标题】PDOException: SQLSTATE[HY000] [2002] Can\'t connect to local MySQL server through socket \'/tmp/mysql.sock\' (2) in lock_may_be_available()【英文标题】:PDOException: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in lock_may_be_available()PDOException: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in lock_may_be_available() 【发布时间】:2018-05-15 02:04:52 【问题描述】:

PDOException: SQLSTATE[HY000] [2003] 无法连接到 lock_may_be_available() 中“127.0.0.1”(146) 上的 mysql 服务器(路径/includes/lock.inc 的第 167 行)。 - 日志文件没有错误,不知道为什么... 尝试替换 localhost 这给了我 [2002] 错误: PDOException: SQLSTATE[HY000] [2002] 无法通过套接字“/tmp/mysql.sock”连接到本地 MySQL 服务器 - 证书也很好... - 当 mysql 运行和停止时,两种情况下都会显示相同的错误消息。 我尝试了从谷歌获得的所有其他可能性,但没有奏效..

【问题讨论】:

听起来你的机器上没有运行 MySQL 服务器。 我检查了它的状态。它工作正常,日志中没有任何错误。仅供参考,这是在 UNIX 中运行 你能从 CLI 使用mysql 命令连接到服务器吗? 是的。我能做到。 【参考方案1】:

从字面上看,一切都很好。 mysql 已启动并正在运行。通过在 my.cnf 中引入 bind-address 以将其从 localhost 来回更改为 127.0.0.1 进行检查。错误分别从 SQLSTATE[HY000][2002] 更改为 SQLSTATE[HY000][2003]。没有任何效果。我确实花了将近 10 个小时才弄清楚这一点。

解决方案: 就我而言,mysql.sock 提供了客户端和服务器 mysql 之间进行交互的隧道。它仅在 mysql 服务器启动并运行时创建。我的问题是它检查 mysql.sock 的路径,该目录中不存在。所以我必须创建一个从该目录到它实际存在的路径的符号链接。是的,它成功了……

创建符号链接的命令

ln -s /path/where/it/actually/exists/mysql.sock /path/where/it/is/looking/for/mysql.sock

【讨论】:

【参考方案2】:

你的mysql服务器还没有启动。

mysqld stop
mysql.server start

【讨论】:

以上是关于PDOException: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/tmp/mysql.的主要内容,如果未能解决你的问题,请参考以下文章

SQLSTATE [HY000] [2002] 连接被拒绝 - 原因:PDOException [重复]

PHP PDOException:“SQLSTATE [HY093]:无效参数号”

Symfony 错误:[PDOException] SQLSTATE[HY000] [2002] 没有这样的文件或目录

Symfony 2.8(Wamp):[Doctrine\DBAL\Exception\ConnectionException] PDOException:SQLSTATE[HY000] [2002]

Laravel 5.0 [PDOException] SQLSTATE[HY000]:一般错误:1215 无法添加外键约束

Laravel PDOException SQLSTATE[HY000] [1049] 未知数据库 'forge'