📑
Aurora MySQL v2をv3に切り替え(blue/green deploy) Error発生
過去ログ
1回目
2回目
やりたいこと
- SnapShoot取得
- Aurora MySQL v2からv3に更新(blue/green deploy)
- Errorでここで止まります
- Replication中にDMLの挙動確認
読んでおく資料と要約
-
Upgrading the major version of an Amazon Aurora MySQL DB cluster
- Amazon Aurora MySQLのメジャーバージョンアップグレードに関するガイドライン
- 手動でのアップグレード:自動アップグレードはサポートされていないため、手動でのアップグレードが必要
- 互換性の確認:アップグレード対象のバージョン間の互換性を確認することが推奨
- ダウンタイムの考慮:アップグレードにはインスタンスの再起動や短期間のダウンタイムが発生する可能性があり
- アップグレード後の設定:アップグレード後には、設定やパラメータの調整が必要
-
Comparing Aurora MySQL version 2 and Aurora MySQL version 3
- Amazon Aurora MySQL v2(MySQL 5.7ベース)とv3(MySQL 8.0ベース)の違いを比較
- ベースとなるバージョン:v2はMySQL 5.7、v3はMySQL 8.0を基にしている
- 主な変更点:MySQL 8.0の新機能として、JSONの処理強化、セキュリティ向上、暗号化のデフォルト設定が異なるなどの違いがあり
- 互換性の考慮:v3では、MySQL 5.7と互換性のない変更があるため、アップグレード前に検証することが推奨
-
Amazon Aurora MySQL version 2 (with MySQL 5.7 compatibility) to version 3 (with MySQL 8.0 compatibility) upgrade checklist, Part 1
- 事前の準備:互換性のあるエンジンバージョンを確認し、推奨されるテストを行うことが重要
- アプリケーションの影響:MySQL 8.0に移行する際、アプリケーションが新しい機能や仕様に対応できるかを確認する必要
- 互換性チェック:移行に伴う互換性問題を事前に検出するためのSQLモードやデータ型の変更を検証
-
Amazon Aurora MySQL version 2 (with MySQL 5.7 compatibility) to version 3 (with MySQL 8.0 compatibility) upgrade checklist, Part 2
- アップグレードプロセスの手順:アップグレードに伴うインスタンスの切り替えやデータの検証方法
- ダウンタイムの最小化:Blue/Greenデプロイメントのような技術を使って、アップグレード時のダウンタイムを最小限に抑える方法
- 運用環境での移行:運用環境への影響を最小限にするためのベストプラクティス
-
Overview of Amazon RDS Blue/Green Deployments for Aurora
- Blue/Greenデプロイメントは、新しいバージョンのアプリケーションをスムーズにリリースするためのデプロイ手法
- 仕組み:Blue(現在の環境)とGreen(新しい環境)を並行して維持し、問題がなければGreenに切り替える方法
- メリット:ダウンタイムをほぼゼロに抑え、リスクを低減します。また、万が一問題が発生した場合、すぐに元のBlue環境に戻すことができる
- 適用例:Amazon AuroraやRDSにおけるデータベースのアップグレードや、アプリケーションの新バージョン導入に有効
手順
Snapshotの作成
Snapshotの作成
aws rds create-db-cluster-snapshot \
--db-cluster-snapshot-identifier aurora-mysql-blue-green-cluster \
--db-cluster-identifier aurora-mysql-blue-green-cluster
確認
Statusがavailable
になるまで待機
aws rds describe-db-cluster-snapshots \
--db-cluster-identifier aurora-mysql-blue-green-cluster \
--query "DBClusterSnapshots[*].Status" \
--output text
MySQL8.0のパラメタグループ作成
設定内容は
- 基本7.5に合わせる
- blue/green deployのために論理レプリケーションを有効化する(7.5、8.0ともに)
- binlog_format: ROW
- binlog_row_image: full
- https://github.com/shigeru-oda/aurora-mysql-blue-green/blob/main/terraform/v3/rds.tf#L29-L36
git clone https://github.com/shigeru-oda/aurora-mysql-blue-green.git
cd aurora-mysql-blue-green/terraform/v3
terraform init
terraform apply
再起動
aws rds reboot-db-instance \
--db-instance-identifier aurora-mysql-read
aws rds reboot-db-instance \
--db-instance-identifier aurora-mysql-write
起動まで待ち。
Blue/Greenの実行
Blue/Greenデプロイメントの作成
aws rds create-blue-green-deployment \
--blue-green-deployment-name blue-green-deployment \
--source arn:aws:rds:ap-northeast-1:xxxxxxxxxxxx:cluster:aurora-mysql-blue-green-cluster \
--target-engine-version 8.0.mysql_aurora.3.05.2 \
--target-db-parameter-group-name aurora-mysql-db-param-group-80 \
--target-db-cluster-parameter-group-name aurora-mysql-cluster-param-group-80 \
--no-upgrade-target-storage-config
Blue/Greenデプロイメントの表示
aws rds describe-blue-green-deployments \
--filters Name=blue-green-deployment-name,Values=blue-green-deployment
あ、FAILEDした
ログ確認
ログファイル確認1
aws rds describe-events \
--source-identifier aurora-mysql-blue-green-cluster-green-xdzhnl \
--source-type db-cluster
こんなメッセージが
ログファイル確認2
aws rds download-db-log-file-portion \
--db-instance-identifier aurora-mysql-write-green-8flpxi \
--log-file-name upgrade-prechecks.log \
--output text
{
"level": "Error",
"dbObject": "cube.insert_data_empty",
"description": "at line 4,16: unexpected token 'empty'"
}
{
"level": "Warning",
"dbObject": "cube",
"description": "Schema name"
},
{
"level": "Warning",
"dbObject": "cube.empty",
"description": "Table name"
},
{
"level": "Warning",
"dbObject": "cube.empty.lag",
"description": "Column name"
},
{
"level": "Warning",
"dbObject": "cube.empty.lead",
"description": "Column name"
},
{
"level": "Warning",
"dbObject": "cube.empty.of",
"description": "Column name"
},
{
"level": "Warning",
"dbObject": "cube.empty.rank",
"description": "Column name"
}
{
"level": "Warning",
"dbObject": "global.sql_mode",
"description": "does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
},
{
"level": "Warning",
"dbObject": "session.sql_mode",
"description": " of 8 session(s) does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
}
- やっぱり予約語を含めるとダメっぽい
- 日付にゼロを許容する設定はダメっぽい
- ログ全体はこちら
- 試しで更新してログ確認するのは良いかもね
blue/green deployを終了する
ID=$(aws rds describe-blue-green-deployments \
--query "BlueGreenDeployments[*].BlueGreenDeploymentIdentifier" \
--output text)
aws rds delete-blue-green-deployment \
--blue-green-deployment-identifier $ID
blue/grrenは終わるけど、cluster等は残るんだなぁ
手で消します。。。
Discussion