一台机器php连mysql出client版本不支持的问题

在控制台上直接执行php test.php
系统出错:
“PHP Warning: mysql_connect(): Client does not support authentication protocol requested by server”
于是就在本机控制台用命令
mysql -h 192.168.1.1 -u user -p
(这里192.168.1.1是mysql服务器ip)
再输入密码来连
这样没有问题
然后在192.168.1.1把程序拷过去
直接执行
然后又没有问题
当时就有点困惑了
这两台机器一样的php-mysql版本呀
一样的mysqlclient版本呀
可为什么一个能连一个出错呢
要说对client那台机器的权限有限制
但是在client那台机器上直接用mysql客户端程序也能连呀
于是
似乎陷入困境
mysql官网对这个错误的解释是老板本的mysql和新版本的mysql的密码格式不兼容
如果用老板本的mysql client去连新版本的mysql server
如果mysql server上的密码格式是新格式的话
就会出这个错误
显然,本例就是这样

最后问题解决后
才发现其实一开始分析问题的时候就出现了偏差
其实知道问题的原因是由于client的版本和server上存储密码的格式相关
那么就应该去确认这两台机器一台连不上一台没问题他们分别的client版本和server上的密码格式的
如果是这样
一开始就去服务器端
use mysql
select * from user where User = ‘user’;
一看就知道了
原来有条记录
Host正好是client的ip
client连过来的时候正好是匹配这条记录
但是其密码格式是新格式
而client上的mysql client版本是老板本
不出问题才怪呢!!
再看看从服务器上通过连为什么又没有问题呢
原来还有条记录
Host是’192.168.1.%’
他的密码格式是老格式的
服务器上连过来的时候正好是匹配这一条记录
自然OK

这样解决起来也就容易了
直接将写着client ip的那条记录删掉就好了

Discussion Area - Leave a Comment




*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word