こんにちは、大久保です。
今回は、Auroraのマイナーバージョンアップ時に大量発生したWarningログへの対応方法について記事となります。
目次
起こったこと
Aurora MySQL 3.06.0(compatible with MySQL 8.0.34)
へのマイナーバージョンアップ検証を行っていたところ、それは起こりました。
「CloudWatch Logsに大量のWarningログが出力されてる…」
※1. この画像は再現したものになります。
※2. エラーログの出力設定を有効化していないと出力されません。
なぜこんなことに?
下記の状態にもかかわらず、延々とWarningログが出力され続けていました。
- クラスターに対して誰も接続をしていない。
- クラスターに対して誰もクエリを実行していない。
なるほど、どうして…
というところで監査ログも確認したところ、同時間帯にrdsadminユーザーによって内部処理が実行されていました。
つまり何かしらのクエリごとに、このWarningログが出力されていそうです。
MY-013360のWarningログはなんなのか?
そもそも発生している以下のログは何なのか?
[Warning] [MY-013360] [Server] Plugin mysql_native_password reported:
''mysql_native_password' is deprecated and will be removed in a future release.
Please use caching_sha2_password instead' (sql_authentication.cc:4314)
調べたところMySQLの認証方式に関するログで、「mysql_native_password
は非推奨で将来的に廃止するから、caching_sha2_password
に変えてね」というものでした。
mysql_native_password
は、MySQL 5.7
までデフォルトで利用されていた認証方式で、SHA-1を用いてユーザーパスワードをハッシュ化しています。
この方式がMySQL 8.0.34
以上で非推奨となり、mysql_native_password
で認証があった場合にWarningログが出力される運びとなったようです。
The
Changes in MySQL 8.0.34 (2023-07-18, General Availability) ※2024/12/04時点mysql_native_password
authentication plugin now is deprecated and subject to removal in a future version of MySQL.CREATE USER
,ALTER USER
, andSET PASSWORD
operations now insert a deprecation warning into the server error log if an account attempts to authenticate usingmysql_native_password
as an authentication method.
ここでは詳しく触れませんが、caching_sha2_password
はMySQL 8.0
で追加された認証機能で、SHA-256を用いたものになります。MySQL 8.4
では、mysql_native_password
に変わりcaching_sha2_password
がデフォルトの認証として利用されています。
そして、このWarningログが大量に出力されるのはバグでした。
※MySQL 8.0.38
で1度のみ出力するように修正されているようです。
The deprecation warning issued when authenticating with the
Changes in MySQL 8.0.38 (2024-07-01, General Availability) ※2024/12/04時点mysql_native_password
plugin is now issued only once. (Bug #35792948)
困ること
このWarningログが出力されつづけることによってなにが一番困るかというと、CloudWatch Logsのデータ取り込みよるコストの増加です。
CloudWatch Logsはログの取り込みで、$0.76/1GBの料金が発生します。
Warningログは1行で大したデータ量ではありませんが、塵も積もれば山となり、対処を怠るとコストが増加します。
対応方法
では、どのような対応すればいいか?
現状、以下の3つ方法があると考えています。
- Warningログが発生しないバージョンを利用する
- バグ修正済みのバージョンへアップデートする
- Warningログの出力を抑制する
1. Warningログが発生しないバージョンを利用する
身も蓋もないですが、そもそもWarningログが出力される変更が入っていないバージョンを利用するという方法です。
このWarningログは、MySQL 8.0.34以上で出力されるものなので、Aurora MySQL 3.05.2(compatible with MySQL 8.0.32)
以下のバージョンを利用していれば発生しません。
2. バグ修正済みのバージョンへアップデートする
次はバグが修正されたバージョンへアップデートする方法です。
先ほど記載しましたが、このバグはMySQL 8.0.38
で修正が行われています。
2024/12/04の時点で、この修正を含むAurora MySQL 3.08.0(compatible with MySQL 8.0.39)
がリリースされており、このバージョンへのアップデートを行うことで、Warningログが1度しか出力されなくなります。
本日より、Amazon Aurora MySQL 互換エディション 3 (MySQL 8.0 互換) は MySQL 8.0.39 をサポートするようになりました。MySQL 8.0.39 には、いくつかのセキュリティ強化とバグ修正に加えて、多数のテーブルを処理するときのデータベースの可用性を向上させ、REDO ロギングとインデックス処理に関連する InnoDB の問題を軽減する拡張機能が含まれています。
Amazon Aurora MySQL 3.08 (MySQL 8.0.39 互換) の一般提供を開始 ※2024/12/04時点
実際に
にバージョンアップして確認したところ、大量にWarningログが出力されることはありませんでした。Aurora MySQL 3.08.0(compatible with MySQL 8.0.39)
3. Warningログの出力を抑制する
最後はカスタムパラメーターグループの設定を用いて、Warningログの出力を抑制する方法です。
対象のAuroraクラスターで利用しているカスタムパラメーターグループで、下図のようにlog_error_suppression_list
の値にMY-013360
を設定し保存することで、出力を抑制することが出来ます。
※1. この設定項目はDynamicのため、クラスターの再起動は不要です。
※2. デフォルトパラメーターグループでは、設定変更が出来ません。
まとめ
今回は、mysql_native_password
に関するWarningログの対応方法について記載しました。
Auroraでもmysql_native_password
からcaching_sha2_password
に移行したいところですが、現状Auroraではcaching_sha2_password
に対応していません。
コミュニティ MySQL 8.0 では、デフォルトの認証プラグインは
Aurora MySQL バージョン 3 と MySQL 8.0 コミュニティエディションの比較 ※2024/12/04時点caching_sha2_password
です。Aurora MySQL バージョン3では、mysql_native_password
プラグインがまだ使用されます。default_authentication_plugin
設定は変更できません。
のちのちcaching_sha2_password
に対応すると思うので、その際は移行方法についての記事を書ければ良いなと思います。
この情報が誰か助けになれば幸いです。
参考にしたもの
- MySQL8.0新機能 (caching_sha2_password 認証プラグイン)
- MySQL8.4での mysql_native_password 認証プラグインの扱い
- 最近のMySQLのデフォルト認証プラグインの変遷とAWS RDS/Auroraの対応状況をまとめた
- After upgrade 8.0.33-25.1 to 8.0.34-26.1 error.log flooded with [Warning] [MY-013360]
- Getting rid of warning: “Plugin mysql_native_password reported: ”mysql_native_password’ is deprecated…”