- Remove or comment old_passwords = 1 in my.cnf
Restart MySQL. If you don’t, MySQL will keep using the old password format, which will mean that you cannot upgrade the passwords using the builtin PASSWORD() hashing function.
The old password hashes are 16 characters, the new ones are 41 characters.
Connect to the database, and run the following query:
SELECT user, Length(`Password`) FROM `mysql`.`user`;
This will show you which passwords are in the old format, e.g.:
+----------+--------------------+
| user | Length(`Password`) |
+----------+--------------------+
| root | 41 |
| root | 16 |
| user2 | 16 |
| user2 | 16 |
+----------+--------------------+
Notice here that each user can have multiple rows (one for each different host specification).
To update the password for each user, run the following:
UPDATE mysql.user SET Password = PASSWORD('password') WHERE user = 'username';
Finally, flush privileges:
FLUSH PRIVILEGES;
Source: How to fix "mysqlnd cannot connect to MySQL 4.1+ using old authentication" on PHP5.3
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…