ubuntu-latest(Ubuntu 26.04)で「ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded」:ランナーの MySQL が 8.4 に・抜け道
ランナーのイメージには、MySQL が止まった状態で入っています。ubuntu-24.04 では MySQL 8.0.46、2026年11月に ubuntu-latest の向き先になる ubuntu-26.04 では MySQL 8.4.11 です(ランナーのイメージの README)。MySQL のドキュメントには、mysql_native_password プラグインは 8.0.34 で非推奨、8.4 で既定で無効、9.0.0 で削除とあります。WordPress などの PHP のテストでよく使う、ユーザーをこのプラグインに切り替えるステップが、リポジトリを何も変えていないのに毎回失敗するようになりました。
見え方
Run sudo systemctl start mysql mysql -h 127.0.0.1 --port 3306 -u root --password=root -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';" ERROR 1524 (HY000) at line 1: Plugin 'mysql_native_password' is not loaded
(tarosky/workflows #145。失敗したジョブには Image: ubuntu-26.04、前の日に成功したジョブには Image: ubuntu-24.04 と出ていました。)2026年10月22日から11月4日に、convertkit-wordpress #1270・pantheon-hud #267・eventespresso/actions #77・flarum #5273 でも同じステップが失敗しています。
抜け道
- クライアントに要らないなら、切り替えをやめます。eventespresso/actions #77 によれば、PHP 7.4.4 以降は MySQL 8 の既定の
caching_sha2_passwordでログインでき、flarum #5273 はALTER USERを PHP 7.3 のジョブだけで動かすようにしました。パスワードを設定し直すなら、既定のプラグインのまま設定します:ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';(pantheon-hud #267)。 mysql_native_passwordしか話せないクライアントなら、MySQL を起動する前にプラグインを有効にします。MySQL のドキュメントでは、[mysqld]の節にmysql_native_password=ONを書きます。convertkit-wordpress #1270 は、sudo systemctl start mysql.serviceの前にこのステップを足しました:printf '[mysqld]\nloose-mysql_native_password=ON\n' | sudo tee /etc/mysql/mysql.conf.d/native-password.cnf
loose-を付けると、ubuntu-24.04 の MySQL 8.0 は起動を断らずにこの設定を読み飛ばすので、同じワークフローが両方で動きます。- 時間を稼ぐなら、
runs-on: ubuntu-24.04に固定すれば MySQL 8.0 のままです(tarosky/workflows #145)。今回の切り替えで Ubuntu 24.04 がなくなるわけではありませんが、移行を先に延ばすだけです。 mysql:9やmysql:latestのサービスコンテナにはmysql_native_passwordそのものがないので、使えるのは1つ目の方法だけです。
どの MySQL につないでいるかを確かめる
tarosky/workflows #145 では、services.mysql のコンテナ(mysql:8.0)が一度も使われていなかったことも分かりました。ports: - 3306/tcp だと Docker はホスト側に 32768 のような空いたポートを割り当てるので、127.0.0.1:3306 につないだテストはランナー自身の MySQL に届いていました。- 3306:3306 で割り当てるか、job.services.mysql.ports['3306'] からポートを読み、同じジョブではランナーの MySQL を起動しないようにします。
mysql -h 127.0.0.1 -P 3306 -u root -proot -e "SELECT VERSION(), @@hostname;"
見分け方
- PostgreSQL を使うジョブで「unrecognized configuration parameter "transaction_timeout"」:Ubuntu 26.04 の pg_dump 18。
- イメージと一緒に変わったほかの道具:ubuntu-latest が Ubuntu 26.04 に移るときに変わること。
失敗したジョブを IntelliJ IDEA から見るなら
Pipeline Inbox for GitHub Actions Workflows は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。すべてのリポジトリの実行を、ジョブ・ステップと一緒に IDE のツールウィンドウに並べるので、イメージが変わった後にいくつものリポジトリで失敗し始めたデータベースのステップがすぐ分かり、いまのブランチの実行はステータスバーに出ます。読むのは無料、失敗したジョブの再実行・キャンセル・ワークフローの実行・デプロイのレビューは Pro(月 US$1.50・30日の無料試用つき)です。
GitHub・GitHub Actions は GitHub, Inc. の商標、MySQL は Oracle およびその関連会社の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・Oracle・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:Ubuntu 26.04 の pg_dump 18 · 「The ubuntu-latest label will migrate to Ubuntu 26」 · IntelliJ IDEA で使える GitHub Actions のプラグインの比較 · English