はじめに
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
もぜひ確認してみてください。