initial default
Snapshot on first start, then stream
The connector performs a full snapshot the first time it starts (no offsets exist). After the snapshot completes, the connector streams subsequent changes from the transaction log. On later restarts, if offsets exist, the snapshot is skipped and streaming resumes from the saved position.
| Snapshot phase | reads all data as READ events |
|---|---|
| Streaming phase | streams WAL/binlog changes |
initial_only
Snapshot then stop — no streaming
The connector performs a full snapshot exactly like the initial mode, but after the snapshot completes, the connector stops. It does not stream subsequent changes from the transaction log.
| Snapshot phase | reads all data as READ events |
|---|---|
| Streaming phase | connector stops after snapshot |
always
Full snapshot every restart
The connector performs a complete snapshot every time it starts, regardless of whether offsets exist. After each snapshot, it streams subsequent changes. This re-emits READ events for all existing rows on each restart.
| Snapshot phase | full snapshot on EVERY start |
|---|---|
| Streaming phase | streams WAL/binlog changes after |
no_data
Schema only — no data READ events
Skips READ events for existing rows. Relational connectors may capture schema; PostgreSQL resumes from stored LSNs or, without them, the slot creation position. It is not a repair for a missing change history.
| Snapshot phase | captures schema/DDL only, no row data |
|---|---|
| Streaming phase | streams WAL/binlog changes |
never (legacy)
Legacy name; not a Debezium 3.7 mode
The pinned 3.7 connector enums do not accept never. This entry preserves historical links; use the documented mode for your connector version.
| Snapshot phase | legacy entry |
|---|---|
| Streaming phase | version-dependent |
when_needed
Snapshot only if offsets are missing or stale
The connector performs a snapshot only if it cannot detect any stored offsets, or if the stored offset refers to a log position that is no longer available on the server (e.g., the WAL segment or binlog file has been purged).
| Snapshot phase | conditional — only if offsets absent or invalid |
|---|---|
| Streaming phase | streams WAL/binlog changes |
recovery
Rebuild lost schema history topic
Restores a lost or corrupted internal schema history topic by re-reading the DDL directly from the live database tables. The connector rebuilds the schema history and then resumes streaming from the last known offset.
| Snapshot phase | rebuilds schema history from live DB |
|---|---|
| Streaming phase | resumes from last offset |
configuration_based
Fine-grained control via properties
Controls snapshot behavior through specific connector properties prefixed with snapshot.mode.configuration.based.*. Allows separately configuring whether to snapshot data, schema, and what to do on subsequent restarts.
| Snapshot phase | determined by configuration properties |
|---|---|
| Streaming phase | determined by configuration properties |
custom
Inject a custom Snapshotter implementation
Loads a user-provided class that implements the io.debezium.spi.snapshot.Snapshotter SPI. The class name must be set via snapshot.mode.custom.name. This mode provides complete control over snapshot decisions.
| Snapshot phase | determined by custom class |
|---|---|
| Streaming phase | determined by custom class |
when_needed_no_data
Conditional schema snapshot without READ events
SQL Server combines the when_needed decision with no_data snapshot behavior. It does not emit existing rows as READ events.
| Snapshot phase | conditional schema snapshot; no READ events |
|---|---|
| Streaming phase | resumes according to connector offsets |