我试图通过PDO连接到另一个数据库服务器(MySQL)每个IP地址.
$db = new PDO('mysql:host=IP-ADDRESS;dbname=AAA', 'USER', 'XXXXX');我在这里伪造了IP地址和用户,这不是错误;)
但不管出于什么原因,PDO将进行一些疯狂的反向DNS查找,并最终连接到一个完全不同的服务器,该服务器具有另一个IP-adress和其他按A记录分配的域,从PDO反向dns查找将在这里找到。
PDO抛出特定的异常:
SQLSTATE[28000] [1045] Access denied for user 'USER'@'WWW.ANOTHER-SERVER.COM'当通过mysql-客户端连接终端时,一切都如预期的那样工作。
在/etc/host中没有特定的条目,这可能是造成这种情况的根本原因。
发布于 2015-09-05 14:49:27
PHP/PDO机器:
PDO永远不会反向查找。它将进行前向查找,然后连接到该IP。
您应该能够看到,在PHP/PDO机器上运行
tcpdump -i ethsomething -n -s 1500 -xX port 3306当PDO试图连接时,这里显示了哪个IP号?
MySQL机器:
MySQL永远不会知道您试图访问它的主机名是什么。服务器将看到传入的请求,在套接字上执行getpeername(),生成一个IP号。
在默认情况下,服务器将对该IP进行反向查找。你可以把它关掉
[mysqld]
skip-name-resolve进入您的my.cnf文件并重新启动服务器。
当MySQL被配置为执行反向查找时,它将尝试这样做。如果失败,在服务器放弃之前,连接尝试等待DNS响应需要5到30秒。
如果反向查找成功,MySQL将使用解析的名称user@reverse_lookup_result进入mysql.user表及其朋友。
如果反向查找失败,或者已被跳过名称解析禁用,MySQL将进入mysql.user表和具有未解决名称的朋友,用户@1.2.3.4或类似的名称。
这就产生了有趣的后果:
https://stackoverflow.com/questions/32413636
复制相似问题