Warning: mysql_connect() [function.mysql-connect]: Premature end of
data (mysqlnd_wireprotocol.c:554) in
path/to/the/file/where/connection/script/is/written/
Warning: mysql_connect() [function.mysql-connect]: OK packet 1
bytes shorter than expected in
path/to/the/file/where/connection/script/is/written/
Warning: mysql_connect() [function.mysql-connect]: mysqlnd cannot
connect to MySQL 4.1+ using the old insecure authentication. Please
use an administration tool to reset your password with the command
SET PASSWORD = PASSWORD('your_existing_password'). This will store
a new, and more secure, hash value in mysql.user. If this user is
used in other scripts executed by PHP 5.2 or earlier you might need
to remove the old-passwords flag from your my.cnf file in
path/to/the/file/where/connection/script/is/written/
具体原因我还不是很清楚,跟old密码长度有关?先记录下来,日后研究。解决方法如下:
SET old_passwords = 0;
UPDATE mysql.user SET Password = PASSWORD('testpass') WHERE User = 'testuser' limit 1;
SELECT LENGTH(Password) FROM mysql.user WHERE User = 'testuser';
FLUSH PRIVILEGES;
php更新5.3版本后,在连接mysql数据库的时候会报如上错误
问题的核心在于:mysql可能仍使用旧的密码加密方式,加密后的密码为16位字符串,而为了安全,php5.3的mysql连接库并不支持
在解决问题之前我们来看一下mysql的旧的密码长度
mysql> SELECT LENGTH(PASSWORD(‘xyz’));
得到的结果应该是16
解决方法:
mysql> SET old_passwords = 0;
mysql> UPDATE mysql.user SET password = PASSWORD(‘密码’) WHERE
user = ‘帐号’;
mysql> FLUSH PRIVILEGES;
说明:
1、不使用旧的密码加密方法
2、更改所有用户密码
3、FLUSH PRIVILEGES 后不需要重启mysql服务即可使用修改的密码
ps:
如果使用php5.2或者更低的脚本,你需要移除my.cnf文件中的old-passwords=1
最后
mysql> SELECT LENGTH(Password) FROM mysql.user WHERE User =
‘帐号’;
查看密码的长度,这个时候为41位,而旧的密码加密方式生成的密码长度是16位