MYSQL 4.1 以降、新しいユーザー認証プロトコルが採用され、古いクライアントでは認証プロトコルがサポートされていないというエラーが発生します。以下は公式 Web サイトからの解決策です﹔
1すべてのクライアント プログラムをアップグレードしてください。 4.1.1 以降のクライアント ライブラリ。PHP 拡張ライブラリを更新する必要があります。PHP は、古い API 用の拡張ライブラリを提供しません。
2 4.1 より前のクライアント プログラムでサーバーに接続する場合は、次を使用します。 4.1 より前のスタイルのパスワードがまだ残っているアカウント
以前に確立されたアカウントを使用して接続することは、新しい認証プロトコルで確立されたアカウントには機能しません
3以前の認証プロトコルを使用する必要がある各ユーザーのパスワードを 4.1 より前のスタイルにリセットします。 -4.1 クライアント プログラム。これは、SET PASSWORD ステートメントと OLD_PASSWORD() 関数を使用して実行できます。 mysql> SET PASSWORD FOR
-> 'some_user'@'some_host' = OLD_PASSWORD('newpwd'); または、UPDATE と を使用します。 FLUSH PRIVILEGES: mysql> UPDATE mysql.user SET Password = OLD_PASSWORD('newpwd') -> WHERE Host = 'some_host' AND User = 'some_user';
mysql> FLUSH PRIVILEGES
「」には使用するパスワードを置き換えます。前の例の newpwd'' では、元のパスワードが何であるかを知ることができないため、新しいパスワードを選択する必要があります
これは良いアイデアです。新しく作成されたアカウントでは古い暗号化プロトコルが使用されます
4 サーバーに次のように指示します。古いパスワード ハッシュ アルゴリズムを使用します。
--old-passwords オプションを指定して mysqld を起動します。
この方法では、新しい認証プロトコルの利点を利用できません。
5 パスワードが更新された各アカウントに古い形式のパスワードを割り当てます。これらのアカウントは次のクエリで識別できます: mysql> SELECT Host, User, Password FROM mysql.user
-> WHERE LENGTH(Password) > 16;
クエリによって表示される各アカウント レコードについて、ホストを使用します。前述のように、OLD_PASSWORD() 関数と SET PASSWORD または UPDATE を使用してユーザー値を割り当て、パスワードを割り当てます
。