Log-Based CDC for MySQL and PostgreSQL

Stream committed changes to databases, files, and S3. No Kafka required.

Change data capture (CDC) keeps a target system updated by reading changes from the source database's transaction log — MySQL's binlog or PostgreSQL's WAL — instead of polling for differences. Reading the log is the easy part; the hard parts are starting safely after the initial load, checkpointing only after the target acknowledges the write, and preserving order when changes are applied to the target in parallel.

DBConvert Streams reads the binlog or WAL directly, normalizes events into a single internal format, and writes them to the target through embedded JetStream — no external Kafka, no separate orchestrator. Checkpoints advance only after the target write is acknowledged, per-table ordering is preserved, and the same workflow can either start from live changes only or bootstrap an empty target first and continue with CDC.

Measured Performance

Performance You Can Measure

Real numbers from local replication tests.

100 MB/s

local transfer rate

50+ GB

verified, no upper limit

~10M rows

replicated in seconds

Per-stream

parallel processing

<10 ms

processing latency

Example: MySQL → PostgreSQL — 1,000,000 rows in ~4 seconds (~100 MB/s)

Per-stream routing and worker pools for stable throughput, with protocol-native CDC readers and optimized bulk-write paths.

Workflow

How It Works

From transaction logs to reliable delivery in four steps.

1. Capture

Connects directly to MySQL binlog or PostgreSQL logical replication slots. Committed row changes are decoded from the source log and streamed as CDC events.

2. Normalize

Changes are normalized into a unified internal event format. Rolled back transactions are not delivered to the target.

3. Deliver

Events are written to target destinations. CDC messages are acknowledged only after the target write succeeds.

4. Monitor

Live metrics, checkpoint position, per-table progress, and full stream history are visible in the UI and via API.

Reliability Model

Built for continuous CDC on stable infrastructure, with JetStream-backed buffering, commit-aware checkpoints, and explicit failure state when the target cannot accept a write.

  • At-least-once delivery
  • Per-table ordering preserved
  • Durable checkpoint resume
  • Rollback-safe transaction handling
  • CDC reliability state in Monitor

Flexible Targets

Stream changes to operational databases, analytics stores, and storage layers without additional infrastructure.

  • MySQL
    MySQL
  • PostgreSQL
    PostgreSQL
  • S3 / MinIO
    S3 / MinIO
  • Local files (CSV, JSON, JSONL, Parquet)
    Local files (CSV, JSON, JSONL, Parquet)
  • Snowflake
    Snowflake Coming soon
Start Pattern

Choose how the CDC rollout starts

Some teams start from live changes only. Others need the same CDC run to bootstrap an empty target first and then keep it current.

CDC only

Start from live changes

Use this when the target is already prepared and the main goal is ongoing replication from the current log position forward.

  • No bootstrap copy of existing source rows
  • Best when a separate migration step already happened
  • Focused on continuous change delivery and checkpoint resume

Initial Load + CDC

Bootstrap an empty target and keep it current

Use this when one CDC run should copy existing rows into an empty target first and then continue with live changes for controlled cutover.

  • Single workflow for bootstrap plus ongoing replication
  • MySQL can use Resumable Load automatically on eligible bootstrap tables
  • Good fit for empty-target cutovers that should stay current during validation
Replication Status stepper showing snapshot completion, handoff, and CDC apply for a PostgreSQL target

The Replication Status stepper shows snapshot completion, handoff, and CDC apply while the stream is writing into PostgreSQL.

Common Use Cases

Real-Time Analytics

Stream production MySQL into a PostgreSQL analytics replica without impacting primary workload.

Controlled Cutover

Run a snapshot migration first, then keep changes flowing with CDC while you plan cutover.

Disaster Recovery

Maintain a continuously synchronized standby database across regions or providers.

Data Archival to S3

Stream database changes into compressed Parquet or CSV files with Hive-style partitioning.

Debezium — log-based CDC with Kafka.

Airbyte — log-based CDC, orchestrated as recurring sync jobs.

DBConvert Streams — continuous CDC without external infrastructure.

FAQ

Technical questions

What does "log-based CDC" actually read?

On MySQL it reads the binary log (binlog) using the standard replication protocol — the same one a MySQL replica uses. On PostgreSQL it reads from a logical replication slot using the standard logical-decoding output. No triggers, no polling, no source-side schema changes.

Is delivery exactly-once?

No. Delivery is at-least-once, which means a target write may occasionally repeat after a failure. Targets should be configured with idempotent writes (upsert / merge by primary key) so that retries do not produce duplicates.

What happens if the target write fails?

The CDC checkpoint is not advanced until the target acknowledges the write. If the target rejects a write or becomes unavailable, the stream stops in an explicit failure state and resumes from the last committed checkpoint when restarted — not from the latest source position.

What about long-running transactions and CDC lag?

CDC events are emitted only after the source commits a transaction. Long-running transactions delay the visibility of their events because the entire transaction is held until commit. This is a property of log-based CDC in general, not specific to DBConvert Streams.

What about schema changes on the source?

DBConvert Streams does not automatically replicate DDL. When you change the source schema (for example, add a column or change a type), apply the corresponding compatible change to the target as part of your operational procedure, then resume the stream.

Start with a controlled CDC test

Validate source and target state first, then run the CDC path you plan to use for cutover.

Use pricing when you are ready to size production streams and team seats.

See Product Overview