こんにちは、サーバエンジニアの池脇です。
今回はローカルのMySQLクライアントからAmazon Auroraにアクセスしようとした際に繋げなくなった話とその際の解決方法について共有します。
なにもしてないのにこわれました
ある日、普段通りの業務でサーバ上のデータを見にいこうとすると
ERROR 2059 (HY000): Authentication plugin 'mysql_native_password' cannot be loaded: dlopen(/opt/homebrew/Cellar/mysql/9.2.0/lib/plugin/mysql_native_password.so, 0x0002): tried: '/opt/homebrew/Cellar/mysql/9.2.0/lib/plugin/mysql_native_password.so' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/Cellar/mysql/9.2.0/lib/plugin/mysql_native_password.so' (no such file), '/opt/homebrew/Cellar/mysql/9.2.0/lib/plugin/mysql_native_password.so' (no such file)
このようなエラーが発生しました。
エラーを詳しく見てみるとMySQLのバージョンが9.2.0
になっている模様……
よくよく考えると直近でbrew update
を行っていたため、HomebrewでインストールしているMySQLのバージョンが最新になっているのでは??
$ mysql --version
mysql Ver 9.2.0 for macos13.7 on arm64 (Homebrew)
犯人はお前かー!!
ということでHomebrewのアップデートを安易に行った自分のせいでした。
mysql_native_password
はユーザパスワードのハッシュ化にSHA-1
を用いており、MySQL5.7まではデフォルトの認証プラグインでした。
MySQL8.0からはハッシュ化により安全なSHA-256
を用いたcaching_sha2_password
認証プラグインが追加され、デフォルトとして利用されています。
そのためmysql_native_password
はMySQL8.1で非推奨、MySQL8.4でデフォルト無効となっており、それが原因で上記エラーが発生しているようです。
詳しくは以下をご覧ください。
MySQL8.4での mysql_native_password 認証プラグインの扱い
対応方法を考える
考えるといってもすでに動いているサービスのアップデートは難しい1ためローカルのMySQLクライアントのバージョンを下げる必要があります。
ということでまずはHomebrewのMySQLのページを確認してみましょう。
その他のバージョンの中に8.0系があったのでこちらをインストールしましょう。
$ brew install mysql@8.0
今後のことを考えて最新のバージョンと8.0系とを切り替えられるように対応します。
切り替えのコマンドは以下です。
$ brew unlink mysql && brew link --force mysql@8.0
Unlinking /opt/homebrew/Cellar/mysql/9.2.0... 99 symlinks removed.
Linking /opt/homebrew/Cellar/mysql@8.0/8.0.41... 99 symlinks created.
切り替え後にバージョンを確認してみます。
$ mysql --version
mysql Ver 8.0.41 for macos13.7 on arm64 (Homebrew)
問題なく切り替えられました!
その後アクセスの確認も行いましたが、特に問題なく今まで通り作業を進められました。
まとめ
今回はMySQLクライアントのバージョンアップによってサーバ上のDBにアクセスできなくなった際の解決方法についてご紹介しました。
バージョンアップ周りの問題はよく発生するものであり、対応についても都度考える必要があるため、エラーの内容から対応方針を決めて対応するようにしましょう。
参考
-
そもそもAmazon Auroraが2025年2月時点でMySQL8.0系までしか対応していない ↩