Homebrew で MySQL 8系にアップグレードしたら WP-CLI でエラーが出るようになったので対処したときの備忘録

Homebrew で update をかけたら強制的に MySQL 8系にアップグレードされたんですが、その後 WP-CLI でデータベースに接続するとこんな感じのエラーが出るようになりました。

PHP Warning:  mysqli_real_connect(): Unexpected server respose while doing caching_sha2 auth: 109 in /.../wp-includes/wp-db.php on line 1531
Warning: mysqli_real_connect(): Unexpected server respose while doing caching_sha2 auth: 109 in /.../wp-includes/wp-db.php on line 1531
PHP Warning:  mysqli_real_connect(): MySQL server has gone away in /.../wp-includes/wp-db.php on line 1531
Warning: mysqli_real_connect(): MySQL server has gone away in /.../wp-includes/wp-db.php on line 1531
PHP Warning:  mysqli_real_connect(): (HY000/2006): MySQL server has gone away in /.../wp-includes/wp-db.php on line 1531
Warning: mysqli_real_connect(): (HY000/2006): MySQL server has gone away in /.../wp-includes/wp-db.php on line 1531
Error: データベース接続確立エラー. これは、`wp-config.php` ファイルのユーザー名とパスワードが正しくないか、あるいは `localhost` のデータベースサーバーに接続できないかのどちらかを意味します。ホスティングサービスのデータベースサーバーがダウンしているかもしれません。

このエラーは MySQL 8.0.4 からデフォルトの認証形式が変更になったことが原因のようです。気になる人はcaching_sha2_passwordでググってみましょう。ここでは備忘録としてその対処法をまとめておきます。

手順

1. ルートユーザーの認証を変更

MySQL でルートユーザーの認証を変更します。

$ mysql -u root

で接続したら、

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';

で認証プラグインを変更します。パスワードを設定している場合は BY ''のところでパスワードを入力してください。

mysql> SELECT user,host,plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
4 rows in set (0.01 sec)

pluginの欄がmysql_native_passwordに変更されていることを確認してください。

2. my.cnf の編集

my.cnfを編集します。my.cnf

$ mysql --help | grep my.cnf
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf

でどの順番に読み込まれているかが確認できます。Homebrew でインストールした場合は /user/local/etc/my.cnfを編集してください。

# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1
# 次の行を追加
default_authentication_plugin=mysql_native_password

2. MySQL の再起動

Homebrew でインストールした MySQL は

$ mysql.server stop

で止めようとしても止まりません。止めるにはlaunchctlで登録されているサービスをアンロードする必要があります。

$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

これで

$ mysql.server status
 ERROR! MySQL is not running

となっていれば MySQL は停止しています。

起動は

$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

です。

$ mysql.server status
 SUCCESS! MySQL running (XXXXX)

となっていることを確かめましょう。

WP-CLI をチェック

適当な WP のディレクトリで

wp plugin status

とかを打ってみて、エラーなく表示されることを確認してください。

参考ページ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です