PHPからrootユーザでMySQLのデータベースに接続する際に、“Access denied for user ‘root’@’localhost’”というエラーで接続出来ないことが発生しました。この記事ではその解決方法を紹介しています。
原因
MySQLサーバーへrootユーザでログインする際の認証方法の設定が正しく出来ていないことが原因のようです。MySQLのインストール後、デフォルト設定ではrootユーザのパスワードは設定されていません。rootユーザでログインする場合、パスワードを入力せずにMySQLサーバーへログインすることが出来ます。また、rootユーザでターミナル(コンソール)からphpのプログラムを実行することも問題ありません。しかし、ブラウザからphpのページにアクセスする場合は、phpのプログラムからrootユーザでのアクセスが出来ないようです。
解決方法
MySQLサーバーのrootユーザの認証方法を、デフォルトのパスワード無しからパスワード入力での認証に変更することで解決しました。 次のように設定します。hogehogeの所はご自分で設定したいパスワードを入力して下さい。これがMySQLサーバーへrootユーザでログインする際のパスワードになります。忘れずにFLUSH PRIVILEGES;を実行して下さい。これをしないと設定した認証方法に切り替わりません。
UPDATE mysql.user SET plugin = 'mysql_native_password', authentication_string = PASSWORD('hogehoge') WHERE User='root';
FLUSH PRIVILEGES;
最後までお読み頂きありがとうございます。