🏄‍♂️

BigQueryのバイナリログ同期について概要を理解する

2024/11/16に公開

BigQueryのバイナリログ同期について概要を理解するぞ!

バイナリログ確認

-- バイナリログのフォーマット確認
SHOW VARIABLES LIKE 'binlog_format';  # ROW

-- バイナリログの設定確認
SHOW VARIABLES LIKE '%binlog%';

データの流れ

Aurora

  • すべてのデータ変更(INSERT/UPDATE/DELETE)をバイナリログに記録
  • ROWフォーマット
    • INSERT:新しい行の全データ
    • UPDATE:変更前と変更後の行データ
    • DELETE:削除された行のデータ

https://cloud.google.com/datastream/docs/configure-amazon-aurora-mysql?hl=ja

バイナリログの構造

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にロード

リカバリについて

https://cloud.google.com/datastream/docs/recover-a-stream?hl=ja

Discussion