更新 mysql 版本以後,尤其是從 4.0.x 到 4.1.x,發生 phpMyAdmin 有以下的問題:
- 如果 root 密碼是空的,可以登入。
- 如果 root 密碼改了以後,不是空的,無法登入,且有以下的訊息
#1251 - Client does not support authentication protocol requested by server; consider upgrading MySQL client
原因是因為 mysql 4.1.x 以後,可能是因為安全性的理由,密碼的演算法更新了,這個演算法,只能在 4.1.x 以後的版本以及新的 client 端可以用。
根據官方的說法 如下:
Client does not support authentication protocol requested by server; consider upgrading MySQL client.
To solve this problem, you should use one of the following approaches:
- Upgrade all client programs to use a 4.1.1 or newer client library.
- When connecting to the server with a pre-4.1 client program, use an account that still has a pre-4.1-style password.
- Reset the password to pre-4.1 style for each user that needs to use a pre-4.1 client program. This can be done using the SET PASSWORD statement and the OLD_PASSWORD() function:mysql> SET PASSWORD FOR
-> 'some_user'@'some_host' = OLD_PASSWORD('newpwd');Alternatively, use UPDATE and FLUSH PRIVILEGES:
mysql> UPDATE mysql.user SET Password = OLD_PASSWORD('newpwd')
-> WHERE Host = 'some_host' AND User = 'some_user'; mysql> FLUSH PRIVILEGES;
Substitute the password you want to use for “newpwd” in the preceding examples. MySQL cannot tell you what the original password was, so you'll need to pick a new one.
- Tell the server to use the older password hashing algorithm:
- Start mysqld with the --old-passwords option.
- Assign an old-format password to each account that has had its password updated to the longer 4.1 format. You can identify these accounts with the following query:mysql> SELECT Host, User, Password FROM mysql.user
-> WHERE LENGTH(Password) > 16;For each account record displayed by the query, use the Host and User values and assign a password using the OLD_PASSWORD() function and either SET PASSWORD or UPDATE, as described earlier.
以上的情形,在 Win32s 底下最常發生,解決方式以是在 MySQL Command Line Client 打入密碼登入後,執行以下指令最快:
SET PASSWORD FOR root@localhost = OLD_PASSWORD('passwd');
相關文章:
謝謝你解決了我的問題 :laugh_tb:
to: jiajou
應該說,解決了我們曾經有的共同問題喔!