Docs/Streams/Database Guides/MySQL

MySQL CDC Source Configuration

Use this page when MySQL is the source for a CDC workflow.

CDC mode reads changes from the MySQL binary log. It is different from Load mode, which reads tables directly without binlog setup.

If you only need a bounded load, use MySQL Load Mode Guide instead.

For the canonical setup flow, combine this page with:

Check CDC readiness

There are two places in the UI that surface CDC readiness:

Database Overview in Data Explorer — open the database in the sidebar. The CDC readiness card shows whether CDC is enabled along with the current binlog format, row image, and server ID.

Stream wizard — when creating a new stream, the Data Transfer Mode step checks the source automatically. If binlog is not configured for CDC, the Stream (Change Data Capture) option shows a warning and is disabled.

If both show CDC as ready, the source is configured. If not, apply the settings below and restart MySQL.

Required server settings

For a self-managed MySQL instance, add or update these in the MySQL configuration:

[mysqld]
server_id             = 1
log_bin               = mysql-bin
binlog_format         = row
binlog_row_image      = full
binlog_checksum       = none
expire_logs_days      = 3
SettingPurpose
server_idUnique identifier for replication. Each replica client needs a distinct value.
log_binEnables the binary log.
binlog_formatMust be ROW — statement-based or mixed logging is not supported.
binlog_row_imageMust be FULL — partial row images can miss column values.
binlog_checksumSet to NONE to avoid checksum-related parsing issues.
expire_logs_daysBinlog retention period. Set high enough that the stream can start before logs are purged. On MySQL 8.0+, use binlog_expire_logs_seconds instead.

Restart MySQL after changing these settings.

Required privileges

The CDC user needs SELECT for reading table metadata and REPLICATION CLIENT + REPLICATION SLAVE for consuming the binlog:

GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'cdc_user'@'%';
FLUSH PRIVILEGES;

Verify with:

SHOW GRANTS FOR 'cdc_user'@'%';

Use a dedicated CDC user where practical instead of reusing a broad administrative account.

Cloud-hosted MySQL CDC sources

If the source is provider-managed, use the provider page for network and parameter group setup, then return here for the DBConvert Streams-side CDC requirements:

Validation checklist

  1. Test the MySQL connection from the Data Explorer sidebar (right-click → Test connection) or from the connection editor.
  2. Open the database in Data Explorer and check the CDC readiness card — it should show enabled with BINARY LOG: ON, FORMAT: ROW, and ROW IMAGE: FULL.
  3. Run SHOW GRANTS for the CDC user and confirm REPLICATION CLIENT and REPLICATION SLAVE are granted.
  4. Start with a narrow CDC stream (one or two tables) before scaling to a larger scope.

Troubleshooting

SymptomLikely causeFix
Stream fails to start with binlog errorlog_bin is OFFEnable binary logging and restart MySQL
Events missing column valuesbinlog_row_image is not FULLSet to FULL and restart
Checksum parse errorsbinlog_checksum is not NONESet to NONE and restart
Permission denied on binlogCDC user lacks replication privilegesRun the GRANT statement above
Stream starts but misses old eventsBinlog retention is too shortIncrease expire_logs_days or binlog_expire_logs_seconds
Provider-managed settings not taking effectParameter group change pending rebootReboot the instance from the cloud console

For background on how binlog-based CDC works — trigger vs query vs binlog methods, their trade-offs, and common production pitfalls — see MySQL Change Data Capture: a practical guide.

Further reading