Mac OS X 上所有 Zend 产品上的 mysql.sock 问题

Mac OS X 上所有 Zend 产品上的 mysql.sock 问题

我把这个发布在Zend 论坛,但我希望在这里能得到更快的答复。我尝试了论坛上提供的所有解决方案,但都没有成功。当我重新启动 mysql 时,一切似乎都正常。

sudo /usr/local/zend/bin/zendctl.sh restart 
Password:
/usr/local/zend/bin/apachectl stop [OK]
/usr/local/zend/bin/apachectl start [OK]
Stopping Zend Server GUI [Lighttpd] [OK]
spawn-fcgi: child spawned successfully: PID: 7943
Starting Zend Server GUI [Lighttpd] [OK]
Stopping Java bridge [OK]
Starting Java bridge [OK]
Shutting down MySQL
. SUCCESS! 
Starting MySQL
. SUCCESS! 

Ping locahost 也正常,并将 dns 解析为 IP。

ping localhost
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.048 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.064 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.066 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.076 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.064 ms

但是当我尝试访问我的应用程序的本地 URL 时,我得到了可怕的结果:

消息:SQLSTATE[HY000] [2002] 无法通过套接字“/tmp/mysql.sock”连接到本地 MySQL 服务器 (2)。

这对我来说是一个巨大的挑战。我非常感谢您的帮助。谢谢。

答案1

您可以在应用程序配置文件中设置套接字位置。如果您通过添加以下行来为本地开发环境设置它:

resources.db.params.unix_socket = /usr/local/zend/mysql/tmp/mysql.sock

不再需要手动连接插座。

答案2

MySQL 的 概念localhost与 IETF 的 概念不同localhost。对于 MySQL 来说,localhost意味着“随机位置的 Unix 套接字”,这是无尽挫折的根源(而且很可能是肛门疣和全球变暖)。如果您想使用 Unix 套接字,则需要配置 Zend 以使用正确的套接字(我不知道如何配置,似乎没有人能够确定套接字的标准位置,也没有标准方法告诉其他所有内容它在哪里)。老实说,只需将您的服务器地址更改为127.0.0.1,这意味着“localhost,不是真的,我不是在开玩笑,是的,网络上的真实地址”是一种不那么令人沮丧的方法(只需确保您已通过删除 告诉 MySQL 本身在网络上监听skip-networking)。

答案3

检查你的/etc/mysql/my.cnf并查看 [mysqld] 部分下设置的套接字。然后,您可以将其更改为/tmp/mysql.sock或者只是创建一个指向其放置位置的符号链接,例如

ln -s /var/run/mysqld/mysql.sock /tmp/mysql.sock

当然,大多数 *nix 操作系统在关机时都会清除 /tmp,因此第一种方法可能是最好的,除非您是我,并且认为套接字不应该在 /tmp 中

另外,你应该看看 Python 框架Django,它让我高兴地把 Zend Framework 抛在脑后。

答案4

Mac Zend 默认安装在此处创建套接字文件:

/usr/local/zend/mysql/tmp/mysql.sock

查看位于“/usr/local/zend/mysql/data”中的“my.cnf”文件中的“socket”变量,以确定它在哪里或将其移动到更方便的位置。

相关内容