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:
Connection page in Data Explorer — click the connection in the sidebar. The CDC readiness panel sits under Server Stats, because binlog settings belong to the server. The badge at the top says whether CDC can run; the line below shows the binary log status, 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
| Setting | Purpose |
|---|---|
server_id | Unique identifier for replication. Each replica client needs a distinct value. |
log_bin | Enables the binary log. |
binlog_format | Must be ROW — statement-based or mixed logging is not supported. |
binlog_row_image | Must be FULL — partial row images can miss column values. |
binlog_checksum | Set to NONE to avoid checksum-related parsing issues. |
expire_logs_days | Binlog 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
| Privilege | Why it is needed |
|---|---|
SELECT | Reading table metadata, and the rows themselves during the initial snapshot |
REPLICATION CLIENT | Reading the server's binlog position |
REPLICATION SLAVE | Consuming the binlog stream |
RELOAD | The initial snapshot runs FLUSH TABLES WITH READ LOCK to take a consistent starting point |
GRANT SELECT, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'cdc_user'@'%';
FLUSH PRIVILEGES;
Verify with:
SHOW GRANTS FOR 'cdc_user'@'%';
The stream wizard enables the initial snapshot by default. Without RELOAD the stream fails at
startup with ERROR 1227 (42000): Access denied; you need (at least one of) the RELOAD privilege(s) for this operation. RELOAD is a server-level administrative privilege, and some managed providers
do not grant it — if yours does not, create the stream in CDC-only mode, without the initial
snapshot.
On MariaDB 10.5 and later, REPLICATION CLIENT is accepted but stored and displayed as
BINLOG MONITOR, so SHOW GRANTS echoes the grant under that name. Nothing is wrong; the privilege
is the same one.
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:
- Amazon RDS for MySQL Guide
- AWS Aurora MySQL Guide
- Google Cloud SQL Connection Guide
- Azure Database Connection Guide
- DigitalOcean Managed Database Guide
Validation checklist
- Test the MySQL connection from the Data Explorer sidebar (right-click → Test connection) or from the connection editor.
- Open the connection in Data Explorer and check the CDC readiness panel — it should show Ready for CDC, with binlog
ON, formatROWand row imageFULL. - Run
SHOW GRANTSfor the CDC user and confirmSELECT,RELOAD,REPLICATION CLIENTandREPLICATION SLAVEare granted — on MariaDB 10.5+, expectBINLOG MONITORin place ofREPLICATION CLIENT. - Start with a narrow CDC stream (one or two tables) before scaling to a larger scope.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| Stream fails to start with binlog error | log_bin is OFF | Enable binary logging and restart MySQL |
| Events missing column values | binlog_row_image is not FULL | Set to FULL and restart |
| Checksum parse errors | binlog_checksum is not NONE | Set to NONE and restart |
| Permission denied on binlog | CDC user lacks replication privileges | Run the GRANT statement above |
you need ... the RELOAD privilege(s) | RELOAD missing; the initial snapshot cannot lock | Grant RELOAD, or run the stream without the initial snapshot |
| Stream starts but misses old events | Binlog retention is too short | Increase expire_logs_days or binlog_expire_logs_seconds |
| Provider-managed settings not taking effect | Parameter group change pending reboot | Reboot 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.