🏄♂️
BigQueryのバイナリログ同期について概要を理解する
BigQueryのバイナリログ同期について概要を理解するぞ!
バイナリログ確認
-- バイナリログのフォーマット確認
SHOW VARIABLES LIKE 'binlog_format'; # ROW
-- バイナリログの設定確認
SHOW VARIABLES LIKE '%binlog%';
データの流れ
Aurora
- すべてのデータ変更(INSERT/UPDATE/DELETE)をバイナリログに記録
- ROWフォーマット
- INSERT:新しい行の全データ
- UPDATE:変更前と変更後の行データ
- DELETE:削除された行のデータ
バイナリログの構造
mysql-bin-changelog.001376
↓
[Event Header]
- タイムスタンプ
- イベントタイプ
- サーバーID
- イベントサイズ
- ポジション
[Event Data]
- トランザクション開始
- テーブル情報
- 行データ
- トランザクション終了
DataStream
- バイナリログのポジションを記録
- 定期的(デフォルト15分間隔)にログを読み取り
- 変更データをBigQueryに反映
同期の流れ
Aurora MySQLがトランザクションの実行内容をバイナリログに記録(ROWフォーマット)
↓
GCP DataStreamがbq_datastreamユーザ (こちらがTerraformで作成)としてAuroraに接続
↓
GCP DataStreamが前回読んだポジションからバイナリログを読み取り (新しい位置を自身のメタデータとして保存)
↓
GCP DataStreamが読み取った変更内容をBigQuery用のフォーマットに変換
↓
GCP DataStreamが変換したデータをBigQueryにロード
リカバリについて
Discussion