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 无法添加外键约束