MySQLの定期同期が見逃すもの:binlogベースのCDCでBigQueryに完全な変更履歴を届ける

MySQL CDC to BigQuery: what periodic syncs miss, and how binlog avoids it

MySQLの定期同期が見逃すもの:binlogベースのCDCでBigQueryに完全な変更履歴を届ける

MySQLからBigQueryへのデータ同期を、定期的なSELECTベースのバッチ処理で行うと、削除や中間状態の更新を見逃し、本番DBに負荷をかけます。この記事では、MySQLのbinlogを直接読み取るChange Data Capture(CDC)の仕組みと、ROW形式のバイナリログやFULL行イメージ、適切な権限、server-idの一意性、binlog保持期間など、必要な設定を解説します。さらに、BigQueryへの確実なデータ転送と、管理プラットフォームが担う複雑な処理についても紹介します。

SELECTベースの同期は、現在存在するものしか見えません。2回の実行の間に削除された行や、複数回変更された行の中間状態を知る方法はなく、大きなテーブルをスキャンするたびに本番データベースに負荷をかけます。
  1. karakanb

    免責事項:私はBruin(https://github.com/bruin-data/bruin)の共同創業者です。私たちはErathosの競合他社です。

    これは比較的わかりやすいマーケティング記事のようです。ただ、Erathosについて知ることができて嬉しい驚きでした。素晴らしい製品ですね!

    私は個人的には本番環境でのCDCにはあまり賛成ではありません。ストリーミングデータ移動は一般的に混乱を招きやすく、監査ログなしのハードデリートや、更新・削除にタイムスタンプがないなどの悪いデータパターンにつながります。これらは通常、バッチロードを利用できない理由でもあります。CDCは基盤となるデータベースの運用に関する適切な理解を必要とし、Erathosの皆さんが記事で言及したような落とし穴もあります。私たちはクラウドプラットフォームとオープンソースツールの両方でCDCを提供していますが、もし選べるなら、私は常にCDC接続よりもカーソル値を使った増分バッチロードを選びます。

    組織の複雑さやレガシーデータベースの理由でCDCが必要になることも理解していますが、これは単に私の個人的な好みです。

    スタンドアロンのGo CLIとして動作するオープンソースのCDCツールをお探しの方は、ingestr(https://github.com/bruin-data/ingestr)をチェックしてみてください。

  2. gpaulbagetti

    この記事は、同じ失敗パターンを何度も見た後に書きました。それは、ダッシュボードでは正常に見えるMySQL同期ジョブが、スナップショットを比較しているだけでbinlogを読んでいないため、数ヶ月間、削除や中間更新を黙って失っているというものです。CDCが「結果的に整合性がある」だけでなく、実際に完全であるために、MySQL側で何が真実でなければならないか(行イメージ、binlog_row_value_options、server-id、保持期間)を正確に説明しようとしました。これらの詳細について、コメントでさらに深く掘り下げることも歓迎します。

この日のほかの記事

2026-08-25