エラー: mysqlnd は古い安全でない認証を使用して MySQL 4.1+ に接続できません 質問する

エラー: mysqlnd は古い安全でない認証を使用して MySQL 4.1+ に接続できません 質問する

次のエラーが発生します:

データベース接続に失敗しました: mysqlnd は、古い安全でない認証を使用して MySQL 4.1+ に接続できません。管理ツールを使用して、コマンドでパスワードをリセットしてくださいSET PASSWORD = PASSWORD('your_existing_password')

これにより、新しい、より安全なハッシュ値が に保存されます。このユーザーがPHP 5.2以前で実行される他のスクリプトで使用されている場合は、ファイルmysql.userから古いパスワードフラグを削除する必要があるかもしれません。my.cnf

ローカル マシンでは PHP 5.3.8 と MySQL 5.5.16 を使用しており、ホスト (media temple) では PHP 5.3 MySQL 5.0.51a を実行しています。ライブ サーバー上のバージョンは、私のマシンのバージョンよりも古いです。

このエラーを修正してローカルマシンから MySQL に接続するにはどうすればよいですか?

これと似たような投稿があることは知っていますが、すべて試してみましたが、どれも機能しません。

ベストアンサー1

  • my.cnf の old_passwords = 1 を削除するかコメントアウトします。

MySQL を再起動します。再起動しないと、MySQL は古いパスワード形式を使い続けるため、組み込みの PASSWORD() ハッシュ関数を使用してパスワードをアップグレードできなくなります。

古いパスワードハッシュは 16 文字で、新しいパスワードハッシュは 41 文字です。

  • データベースに接続し、次のクエリを実行します。

    SELECT user, Length(`Password`) FROM  `mysql`.`user`;
    

これにより、どのパスワードが古い形式であるかが表示されます。例:

+----------+--------------------+
| ユーザー | 長さ(`パスワード`) |
+----------+--------------------+
| ルート | 41 |
| ルート | 16 |
| ユーザー2 | 16 |
| ユーザー2 | 16 |
+----------+--------------------+

ここで、各ユーザーは複数の行 (異なるホスト仕様ごとに 1 つ) を持つことができることに注意してください。

各ユーザーのパスワードを更新するには、次のコマンドを実行します。

UPDATE mysql.user SET Password = PASSWORD('password') WHERE user = 'username';

最後に、権限をフラッシュします。

FLUSH PRIVILEGES;

ソース:PHP5.3 で「mysqlnd は古い認証を使用して MySQL 4.1+ に接続できません」を修正する方法

おすすめ記事