位置:首页 > 数据库 > MySQL
解决mysqlnd cannot connect to MySQL 4.1+ using the old insec的问题
日期:2023-04-25 人气:

大家好,对解决mysqlnd cannot connect to MySQL 4.1+ using the old insec感兴趣的小伙伴,下面一起跟随三零脚本的小编来看看解决mysqlnd cannot connect to MySQL 4.1+ using the old insec的例子吧。

解决mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication错误.

mysqlnd比mysql说使用起来更方便了,但小编在使用时碰到mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication错误了,下面我们一起来看此问题解决办法.

mysqlnd是个好东西,不仅可以提高与mysql数据库通信的效率,而且也可以方便的设置一些超时,如连接超时,查询超时.

但是,使用mysqlnd的时候,有个地方需要注意,就是服务端的密码格式不能使用旧的16位的存储格式,而要使用新的41位的存储格式.

如果服务端的密码格式是16位,那么就会报错,信息如下:

Fatalerror:Uncaughtexception‘PDOException’withmessage‘SQLSTATE[HY000][2000]mysqlndcannotconnecttoMySQL4.1+usingtheoldinsecureauthentication.PleaseuseanadministrationtooltoresetyourpasswordwiththecommandSETPASSWORD=PASSWORD(‘your_existing_password’).Thiswillstoreanew,andmoresecure,hashvalueinmysql.user.IfthisuserisusedinotherscriptsexecutedbyPHP5.2orearlieryoumightneedtoremovetheold-passwordsflagfromyourmy.cnffile’in/home/hailong.xhl/test.php:8--q3060.com

如何查看自己的密码是否符合要求,so easy.

mysql>selectuser,length(password)frommysql.user; +--------------+------------------+
|user|length(password)| +--------------+------------------+
|demo|16| |demo|16|
+--------------+------------------+

上面的密码是旧的16位格式,如果想改成新的41位格式,通过以下命令就可以.

mysql>UPDATEmysql.userSETPassword=PASSWORD('demo')WHEREuser='demo'; QueryOK,2rowsaffected(0.00sec)
Rowsmatched:2Changed:2Warnings:0 mysql>selectuser,length(password)frommysql.user;
+--------------+------------------+ |user|length(password)|
+--------------+------------------+ |demo|41|
|demo|41| +--------------+------------------+
mysql>flushprivileges; QueryOK,0rowsaffected(0.00sec)

修改完密码后,还需要在配置文件中修改下old_passwords选项,把值设置为0,即.

old_passwords=0 然后重启mysql.

 

您可能感兴趣的文章