萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> 解決mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication錯誤

解決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位,那麼就會報錯。信息如下:

Fatal error: Uncaught exception ‘PDOException’ with message ‘SQLSTATE[HY000] [2000] 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 /home/hailong.xhl/test.php:8

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

mysql> select user,length(password) from mysql.user;
+--------------+------------------+
| user         | length(password) |
+--------------+------------------+
| demo         |               16 |
| demo         |               16 |
+--------------+------------------+
上面的密碼是舊的16位格式。如果想改成新的41位格式,通過以下命令就可以。
mysql>UPDATE mysql.user SET Password = PASSWORD('demo') WHERE user = 'demo';
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2  Changed: 2  Warnings: 0
mysql> select user,length(password) from mysql.user;
+--------------+------------------+
| user         | length(password) |
+--------------+------------------+
| demo         |               41 |
| demo         |               41 |
+--------------+------------------+
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

修改完密碼後,還需要在配置文件中修改下old_passwords選項。把值設置為0。即,
old_passwords=0
然後重啟mysql。

copyright © 萬盛學電腦網 all rights reserved