同一个PHP脚本,其中会访问MySql,直接从命令行运行成功,从web访问失败,可能原因是什么?

时间:2022-11-09 21:42:12
同一个PHP脚本,其中会访问MySql,直接从命令行运行成功,从web访问失败,错误提示是 Can't connect to MySQL server on "XXX.XXX.XXX.XXX"(0)

网上找到的相似的问题,一般都是说链接数太多,但是从命令行链接成功,似乎不是这样的问题,我怀疑是
版本兼容的问题,但由于已经部署服务,暂时不想做版本调整。

有碰到类似的问题的么?谢谢~

21 个解决方案

#1


密码,IP,用户名,或权限问题。

#2


是同一个PHP文件,密码,用户名相同的。

#3


楼主什么操作系统?我觉得也是访问权限的问题。

#4


系统是solaris10,SunOS external 5.10 Generic_127128-11 i86pc i386 i86pc

从另一台机器,操作系统FreeBsd,同样的程序,命令行方式或者web方式都没有问题。

mysql服务器端授予这台机器的权限是完全一样的。

#5


顶一下

#6


从服务器的命令行执行成功是吗?

#7


是命令行和web的php.ini不同造成的吗?

#8


从命令行运行成功。

使用的php.ini 均是 /usr/local/lib/php.ini 

#9


刚测试,通过web方式连接其它数据库没有问题,确定是版本或者权限问题

#10


php设置,MYSQL权限 密码等 查看下。

#11


那就好好检查一下你的WEB程序。

#12


重装一个数据库就是了

#13


权限?

#14


shell 应该添加 :#!/usr/local/php/bin/php -qd open_basedir =/
apache 应该去掉这个

#15


两个php文件都在一台机器上,没有换到别的ip上?
mysql设置是所有主机都能访问?

#16


回12楼:数据库在生产线上,还是不动了。
回13楼:也是怀疑,但命令行方式和web方式使用的用户是一样的,应该和所使用的帐号没有关系(?)
回14楼:从web方式看到的phpinfo,open_basedir 为未设置,与你建议的设置一样?
回15楼:是同一台服务器,mysql只允许部分主机访问。

多谢几位!
我已经调整客户机器的apache/mysql/php版本,还是一样从web无法连接,还有其它建议么?

#17


应该是MySQL数据库的访问权限问题。命令行访问的用户与网页访问使用的用户是不一样的。

#18


……

#19


回17楼:用户会有不一样吗?或者环境不一样?

#20


昨天测试,访问本地mysql没有问题,本地mysql试过很多版本了(为改变客户端库版本),从web还是访问不了mysql。

自己顶一下

#21


用tcpdump在本地抓包:
成功访问时(命令行执行php脚本):
13:04:15.268459 IP internal.33449 > 172.16.11.99.3306: Flags [.], ack 69, win 49640, length 0
13:04:15.272337 IP internal.33449 > 172.16.11.99.3306: Flags [P.], ack 69, win 49640, length 64
13:04:15.272905 IP 172.16.11.99.3306 > internal.33449: Flags [.], ack 65, win 1460, length 0
13:04:15.272906 IP 172.16.11.99.3306 > internal.33449: Flags [P.], ack 65, win 1460, length 5
13:04:15.272924 IP internal.33449 > 172.16.11.99.3306: Flags [.], ack 74, win 49640, length 0
13:04:15.272977 IP internal.33449 > 172.16.11.99.3306: Flags [P.], ack 74, win 49640, length 13
13:04:15.273558 IP 172.16.11.99.3306 > internal.33449: Flags [P.], ack 78, win 1460, length 11
13:04:15.273643 IP internal.33449 > 172.16.11.99.3306: Flags [P.], ack 85, win 49640, length 11
13:04:15.274213 IP 172.16.11.99.3306 > internal.33449: Flags [P.], ack 89, win 1460, length 11
13:04:15.274365 IP internal.33449 > 172.16.11.99.3306: Flags [P.], ack 96, win 49640, length 55
13:04:15.275066 IP 172.16.11.99.3306 > internal.33449: Flags [P.], ack 144, win 1460, length 126
13:04:15.280236 IP internal.33449 > 172.16.11.99.3306: Flags [P.], ack 222, win 49640, length 5
13:04:15.280274 IP internal.33449 > 172.16.11.99.3306: Flags [F.], seq 149, ack 222, win 49640, length 0
13:04:15.280768 IP 172.16.11.99.3306 > internal.33449: Flags [F.], seq 222, ack 149, win 1460, length 0
13:04:15.280781 IP internal.33449 > 172.16.11.99.3306: Flags [.], ack 223, win 49640, length 0
13:04:15.280832 IP 172.16.11.99.3306 > internal.33449: Flags [.], ack 150, win 1460, length 0


失败(web页面访问)
13:04:20.315355 IP internal.33450 > 172.16.11.99.3306: Flags [S], seq 3299447267, win 49640, options [mss 1460,nop,wscale 0,nop,nop,sackOK], length 0
13:04:20.315379 IP internal.33450 > 172.16.11.99.3306: Flags [R], seq 3299447268, win 49640, length 0
13:04:20.316184 IP 172.16.11.99.3306 > internal.33450: Flags [S.], seq 1463773448, ack 3299447268, win 5840, options [mss 1460,nop,nop,sackOK,nop,wscale 2], length 0
13:04:20.316202 IP internal.33450 > 172.16.11.99.3306: Flags [R], seq 3299447268, win 0, length 0

前两次握手都比较正常,本地最后一次回包很奇怪,"win 0",继续翻文档。

这种方法有点笨,哪位有好点的建议?

#1


密码,IP,用户名,或权限问题。

#2


是同一个PHP文件,密码,用户名相同的。

#3


楼主什么操作系统?我觉得也是访问权限的问题。

#4


系统是solaris10,SunOS external 5.10 Generic_127128-11 i86pc i386 i86pc

从另一台机器,操作系统FreeBsd,同样的程序,命令行方式或者web方式都没有问题。

mysql服务器端授予这台机器的权限是完全一样的。

#5


顶一下

#6


从服务器的命令行执行成功是吗?

#7


是命令行和web的php.ini不同造成的吗?

#8


从命令行运行成功。

使用的php.ini 均是 /usr/local/lib/php.ini 

#9


刚测试,通过web方式连接其它数据库没有问题,确定是版本或者权限问题

#10


php设置,MYSQL权限 密码等 查看下。

#11


那就好好检查一下你的WEB程序。

#12


重装一个数据库就是了

#13


权限?

#14


shell 应该添加 :#!/usr/local/php/bin/php -qd open_basedir =/
apache 应该去掉这个

#15


两个php文件都在一台机器上,没有换到别的ip上?
mysql设置是所有主机都能访问?

#16


回12楼:数据库在生产线上,还是不动了。
回13楼:也是怀疑,但命令行方式和web方式使用的用户是一样的,应该和所使用的帐号没有关系(?)
回14楼:从web方式看到的phpinfo,open_basedir 为未设置,与你建议的设置一样?
回15楼:是同一台服务器,mysql只允许部分主机访问。

多谢几位!
我已经调整客户机器的apache/mysql/php版本,还是一样从web无法连接,还有其它建议么?

#17


应该是MySQL数据库的访问权限问题。命令行访问的用户与网页访问使用的用户是不一样的。

#18


……

#19


回17楼:用户会有不一样吗?或者环境不一样?

#20


昨天测试,访问本地mysql没有问题,本地mysql试过很多版本了(为改变客户端库版本),从web还是访问不了mysql。

自己顶一下

#21


用tcpdump在本地抓包:
成功访问时(命令行执行php脚本):
13:04:15.268459 IP internal.33449 > 172.16.11.99.3306: Flags [.], ack 69, win 49640, length 0
13:04:15.272337 IP internal.33449 > 172.16.11.99.3306: Flags [P.], ack 69, win 49640, length 64
13:04:15.272905 IP 172.16.11.99.3306 > internal.33449: Flags [.], ack 65, win 1460, length 0
13:04:15.272906 IP 172.16.11.99.3306 > internal.33449: Flags [P.], ack 65, win 1460, length 5
13:04:15.272924 IP internal.33449 > 172.16.11.99.3306: Flags [.], ack 74, win 49640, length 0
13:04:15.272977 IP internal.33449 > 172.16.11.99.3306: Flags [P.], ack 74, win 49640, length 13
13:04:15.273558 IP 172.16.11.99.3306 > internal.33449: Flags [P.], ack 78, win 1460, length 11
13:04:15.273643 IP internal.33449 > 172.16.11.99.3306: Flags [P.], ack 85, win 49640, length 11
13:04:15.274213 IP 172.16.11.99.3306 > internal.33449: Flags [P.], ack 89, win 1460, length 11
13:04:15.274365 IP internal.33449 > 172.16.11.99.3306: Flags [P.], ack 96, win 49640, length 55
13:04:15.275066 IP 172.16.11.99.3306 > internal.33449: Flags [P.], ack 144, win 1460, length 126
13:04:15.280236 IP internal.33449 > 172.16.11.99.3306: Flags [P.], ack 222, win 49640, length 5
13:04:15.280274 IP internal.33449 > 172.16.11.99.3306: Flags [F.], seq 149, ack 222, win 49640, length 0
13:04:15.280768 IP 172.16.11.99.3306 > internal.33449: Flags [F.], seq 222, ack 149, win 1460, length 0
13:04:15.280781 IP internal.33449 > 172.16.11.99.3306: Flags [.], ack 223, win 49640, length 0
13:04:15.280832 IP 172.16.11.99.3306 > internal.33449: Flags [.], ack 150, win 1460, length 0


失败(web页面访问)
13:04:20.315355 IP internal.33450 > 172.16.11.99.3306: Flags [S], seq 3299447267, win 49640, options [mss 1460,nop,wscale 0,nop,nop,sackOK], length 0
13:04:20.315379 IP internal.33450 > 172.16.11.99.3306: Flags [R], seq 3299447268, win 49640, length 0
13:04:20.316184 IP 172.16.11.99.3306 > internal.33450: Flags [S.], seq 1463773448, ack 3299447268, win 5840, options [mss 1460,nop,nop,sackOK,nop,wscale 2], length 0
13:04:20.316202 IP internal.33450 > 172.16.11.99.3306: Flags [R], seq 3299447268, win 0, length 0

前两次握手都比较正常,本地最后一次回包很奇怪,"win 0",继续翻文档。

这种方法有点笨,哪位有好点的建议?