假设MySQL服务器是mydomain.com:3306
,Apache和MySQL在同一台服务器上。
当我将PHP脚本上传到服务器时,我总是可以将MySQL连接到PDO和这个DNS:
mysql:host=localhost;dbname=my_database
但是,如果我将DNS字符串更改为:
mysql:host=mydomain.com;dbname=my_database
刚刚将localhost
更改为mydomain.com
,其他所有设置(如用户名和密码)都保持不变。我收到了这个警告:
OK packet 6 bytes shorter than expected
我发现了很多关于OK packet 6 bytes shorter than expected
问题的讨论,它们都与密码散列有关。但是,由于我可以使用localhost
设置连接到服务器,因此在我的情况下我不认为密码散列是原因。
有人遇到过这个问题吗?
P.S。我正在使用Kohana 3.0.9的数据库模块进行连接 p.p.s. MySQL版本:5.1.52,PHP版本:5.3.2
答案 0 :(得分:2)
这可能是因为127.0.0.1:3306
是一个不同的IP&来自yourExternalIP:3306
的端口并使用您的域名将连接您的外部IP ,它与localhost
(127.0.0.1)
除非您已将mysql配置为侦听所有 IP,并且允许所有用户从访问所有IP,否则您无法假设mysql正在侦听您的外部IP,或者允许用户名/密码从“远程主机”访问(即从&通过外部IP)
答案 1 :(得分:0)
mysql客户端可以使用主机名连接吗?
答案 2 :(得分:0)
MySQL的驱动程序有一个“优化”,使用“localhost”作为服务器主机名将在内部重新映射到使用unix-domain套接字而不是TCP套接字。这是出于速度原因,因为unix套接字比TCP快得多(特别是因为你没有通过TCP堆栈完全运行的开销),但它确实会导致行为不一致,尤其是在使用时不匹配的驱动程序版本。
答案 3 :(得分:0)
如果您的托管公司为其服务器使用SAT,这意味着您的服务器具有内部IP(例如:10.0.0.101),并且地址转换您使用mydomain.com解析的外部IP(例如:241.34.31.2) ,然后他们的防火墙可能没有设置为实际再次将这种流量路由回来。
无论哪种方式,在这种情况下强行通过防火墙并不是一个好主意,你最好直接使用你的IP(或localhost)。
但我猜这里的其他建议更合理,特别是如果错误与密码检查有关。