First: PHP5.3 started using MYSQLND as the default MySQL access driver, and from this version will no longer support the use of the old user interface link MySQL, you may see similar hints:
#2000-mysqlnd cannot connect to MySQL 4.1+ using the old authentication
The solution to the problem is not to tweak PHP, but to check your MySQL, and you need to ensure two things:
- The mysql you are using is 4.1+ or above, and the previous version of 4.1 only supports the use of old 16-bit password storage
- You are ready to use the new password format (41-bit data) for the connection of the database account used by MySQL
The workaround for problem 2 is to reset the account password and ensure that the standard password () function is used to set the account password, with the following instructions:
--select System library use ' MySQL '-Display the current user and password, note that the new password format should be 41-bit encryption characters, the old 16-bit select ' User ', ' Password ' from ' user ';--Update the password of the specified user, Note Using the function password ()--sometimes for special needs, you can use the Old_password () function to create one or several backward-compatible database accounts with Update ' user ' SET ' password ' =password (' NewPassword ') WHERE ' user ' = ' UserName ';--refresh MySQL permissions library flush privileges;--Finally, don't forget, MySQL command line connection method is: mysql-u [email protected ]-p password
Second: The recent development environment has been upgraded to PHP 5.3.2, the link to remote MySQL error occurred:
Connection failed:sqlstate[hy000] [+] mysqlnd cannot connect to MySQL 4.1+ using old authentication
Remote MySQL db my.cnf:
[Mysqld]
Datadir=/var/lib/mysql
Socket=/var/lib/mysql/mysql.sock
# Default to using old password format for compatibility Withmysql 3.x
# clients (those using the mysqlclient10 compatibilitypackage).
Old_passwords=1
Is the use of a compatible format of the password, and php5.3 php_mysql; Php_pdo_mysql uses an enhanced password, which makes the two mismatched, the most convenient way is to update the DB settings, cancel the Old_passwords
Then in Mysql.mysql.user, update all the user's passwords, such as:
Update user set Password=password (' New password ') where user= ' Thisuser ';
Flush privileges;
Can
But update my.cnf need to restart MySQL, for the server in the application, do not need to update the PHP client, haha
Third article:
New MYSQLND library requires the use of MySQL 4.1 new 41-byte password format
Using the old 16-byte password will cause mysql_connect () and a similar function to produce an error: Mysqlnd cannotconnect to MySQL 4.1+ the using-old authentication. (Mysqlnd cannot use old authentication to connect to MySQL version above 4.1)
Workaround
This is a more perverted study, and it's been a long time finding problems in MY.CNF
1 actually configured old-password=1 or old_password=1 (comment out this sentence)
2 Remove after use Set password for ' root ' @ ' localhost ' = password (' xxx ')
A new 41-bit password problem resolution was generated for root
Fourth: The official way of saying is
MySQL 4.1 and up uses a authentication protocol based on Apassword hashing algorithm that's incompatible with that used Byolder clients. .....
If you are experiencing the above problems after upgrading MySQL to 4.1 or above, make sure your MySQL client is 4.1 or higher.
Please use one of the following 2 methods
One: (use Appserv to modify the MySQL password to use the following methods.)
Mysql> SET PASSWORD for
' Some_user ' @ ' some_host ' = Old_password (' newpwd ');
Second:
mysql> UPDATE mysql.user SET Password =old_password (' newpwd ')
-WHERE Host = ' some_host ' and User = ' some_user ';
mysql> FLUSH privileges;
Above Some_user, Some_host, Newpwd is to fill in.
Excerpt from the network
Connect MySQL problem mysqlnd cannot connect to MySQL 4.1+ using the old authentication