はじめに

MSPチームのまっちゃんです。

RDS for MySQL 5.7から8.0へのアップグレード時、文字コードに関するエラーが発生することがあります。
MySQL 8.0では、utf8mb3 文字セットが非推奨となり、utf8mb4 文字セットの使用が推奨されております。
本記事では、文字コードに関するエラーが発生する原因と解決策について解説します。

原因

こちらはupgradeFailure.log内のエラー内容となります。
該当箇所のコメント部分に無効なutf8mb3の文字列が含まれており、コメントを正しく処理できずに文字化けの状態となっています。

エラー文
2024-09-25T06:20:02.446392Z 2 [ERROR] [MY-013140] [Server] Comment for field 'データベース名.テーブル名.カラム名' contains an invalid utf8mb3 character string: '\x83R\x81'.

上記の場合、該当箇所の文字列(\x83R\x81)がutf8mb3では無効(文字化け)となっているため、文字化けを解消する必要があります。

解決策

  • 文字化けしているカラム名に対して以下のようにデフォルト値へと変更します。

※変更後を例として、CURRENT_TIMESTAMPとしておりますが、適宜ご自身が対応する値に変更をしてください。

'�����X�g�[�N��' → CURRENT_TIMESTAMP

解決方法

1.対象のデータベース選択

USE  '[datebase_name]';

※[datebase_name]は該当のデータベース名に変更して実施をしてください。

2.文字化けしている箇所を特定します。

show create table `[table_name]`;

※[table_name]は該当のテーブル名に変更して実施をしてください。

3.デフォルト値の設定を変更

ALTER TABLE [table_name] MODIFY COLUMN [column_name] DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;

※[table_name]は該当のテーブル名に変更して実施をしてください。
※[column_name]は該当のテーブル名に変更して実施をしてください。

まとめ

今回、エラーログの調査をする際にPrePatchCompatibility.logのエラーログしか見ておらず、他のエラーログの存在を全く想定していませんでした。
PrePatchCompatibility.logを解消後にもアップグレードができなかったため、色々調べると、upgradeFailure.logも確認する必要があることを知り、衝撃を受けました。まさに目から鱗が落ちた瞬間でした、、、
Amazon Aurora MySQLの記事になりますが、以下を参考にしました。
Amazon Aurora MySQL バージョン 2 (MySQL 5.7 互換) からバージョン 3 (MySQL 8.0 互換) へのアップグレードのチェックリスト、パート 1

upgradeFailure.logのエラーログを調査し解消後には無事にアップグレードができました!
PrePatchCompatibility.logの対応後にアップグレードができない際には、upgradeFailure.logもぜひ確認してみてください。