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
とかを打ってみて、エラーなく表示されることを確認してください。