サイトやブログを立ち上げようとWordPressのインストールを進めて、データベースの設定を行なった時に、アカウントもパスワードも間違いないのにデータベース接続確立エラーと表示されてしまう場合があります。もし利用しているデータベースがMySQL8.0の場合、それは作成したユーザーで利用される認証プラグインが正しくないことが原因かもしれません。この記事では、その内容の確認と対応方法をまとめました。そして何を隠そうこの私もこれに少しハマりました。。。
なぜ接続できないのか
まず、なぜ接続ができないのかというと、以下のコマンドでユーザーを作成した場合、MySQL8.0では「caching_sha2_password」という認証プラグインがデフォルトで設定されます。
# ユーザーを新規作成
mysql> create user 'example'@'localhost' identified by 'password';
Query OK, 0 rows affected (0.01 sec)
# 作成したユーザーを確認
mysql> select User, Plugin from mysql.user where User = 'example';
+------------------+-----------------------+
| User | Plugin |
+------------------+-----------------------+
| example | caching_sha2_password |
+------------------+-----------------------+
1 rows in set (0.00 sec)
この作成したユーザーの「Plugin」が「caching_sha2_password」となっている場合、WordPressが「caching_sha2_password」に対応していないため、何度試してもデータベース接続エラーが発生します。
認証プラグインの変更
では「Plugin」が「caching_sha2_password」だった場合にどうすればよいのかというと、以下のalter文を実行して利用される認証プラグインを「caching_sha2_password」から「mysql_native_password」に変更します。
# 実行前の内容を確認
mysql> select User, Plugin from mysql.user where User = 'example';
+------------------+-----------------------+
| User | Plugin |
+------------------+-----------------------+
| example | caching_sha2_password |
+------------------+-----------------------+
1 rows in set (0.00 sec)
# 認証プラグインを変更
mysql> alter user 'example'@'localhost' identified with mysql_native_password by 'passowd';
Query OK, 0 rows affected (0.05 sec)
# 実行後の内容を確認
mysql> select User, Plugin from mysql.user where User = 'example';
+------------------+-----------------------+
| User | Plugin |
+------------------+-----------------------+
| example | mysql_native_password |
+------------------+-----------------------+
1 rows in set (0.00 sec)
問題なく変更されているのを確認できたら、もういちどWordPressのインストールを試してみてください。無事に接続できましたかね?
ユーザー作成時に認証プラグインを指定する
なお、上記では既に作成されたユーザーについての対応方法を記載しましたが、以下の形のSQLでユーザーの作成すると、最初から「mysql_native_password」に設定すること出来ます。
mysql> create user 'example'@'localhost' identified with mysql_native_password by 'password';
Query OK, 0 rows affected (0.01 sec)
それではみなさん、自由なWEBライフをお過ごしください!