Amazon Aurora MySQLのバージョンをv2(5.7互換)からv3(8.0互換)へアップデートした際に、AuroraからBigQueryへ転送を行なっているEmbulkの一部タスクが失敗するようになったため、それをどう修正したかをお伝えします。
MySQL 8.0で利用されるようになった予約語とカラム名・テーブル名の衝突
- MySQL5.7互換から->8.0互換になることで予約語が増えているので、少なくとも衝突してしまったカラム名・テーブル名はバッククォートで囲いましょう
- そもそも全部のカラムをバッククォートで囲うようにしてもよいでしょう
{%
include 'template',
bigquery_table: 'groups',
query: "
SELECT
id,
- rank,
+ `rank`,
created_at
- FROM groups;
+ FROM `groups`;
"
%}
一時テーブルの上限を増やす
- 転送量が多いタスクの場合、一時テーブル関係の設定がデフォルトのままだと失敗する可能性があります
- 一時テーブルに利用できるメモリ量を
temptable_max_mmap
とtemptable_max_ram
のパラメーターで調整しましょう- 公式ドキュメント
- デフォルトはどちらも
1GB
(1073741824byte
)です - どちらのパラメーターも実質的な上限値がインスタンスタイプ別に存在するので、そちらを超えないようにしましょう
- 一時テーブルに利用できるメモリ量を
認証プラグインについて
- MySQL8.0ではデフォルトの認証プラグインが
caching_sha2_password
に変更されていますが、Aurora v3では引き続きmysql_native_password
が利用されます-
Aurora MySQL バージョン 3 と MySQL 8.0 コミュニティエディションの比較
-
コミュニティ MySQL 8.0 では、デフォルトの認証プラグインは caching_sha2_password です。Aurora MySQL バージョン3では、mysql_native_password プラグインがまだ使用されます。default_authentication_plugin 設定は変更できません。
-
- この記事を書いた時点で、Embulkは
caching_sha2_password
に対応していないので、開発環境やCIのMySQLもmysql_native_password
を利用するように設定を変えないとタスクが失敗します- いくつか回避策はあるので、どれかを使って
mysql_native_password
を利用するようにしましょう - 参考:
- いくつか回避策はあるので、どれかを使って
-
Aurora MySQL バージョン 3 と MySQL 8.0 コミュニティエディションの比較
まとめ
今回はMySQL8.0に上げるというトピックの中でも、AuroraとEmbulkの2つを軸とした対応を書かせていただきました。
そろそろAurora v2もの標準サポート終了が近くなり、慌てて上げている方ももしかしたらいらっしゃるかもしれないので、そのような方のお助けになれば幸いです。