Sources

MySQL

Binlog CDC from MySQL, RDS, Aurora, Cloud SQL, and Azure Database — binlog format, row metadata, retention, and server ID.

MySQL sources are read from the binary log: Fabric snapshots the selected tables, then tails binlog row events for every insert, update, and delete. Resume is by binlog file and position— GTID is not required.

Supported deployments

The same connector serves self-hosted MySQL, Amazon RDS for MySQL, Amazon Aurora MySQL, Google Cloud SQL for MySQL, and Azure Database for MySQL. The server settings below are the same everywhere; on a managed service they are parameter-group or flag changes rather than my.cnf edits.

Prerequisites

Server settings

  • MySQL 8.0+ — binlog_row_metadata does not exist on 5.7, and Fabric refuses a server without it.
  • log-bin=mysql-bin and a standard basename, so a position can be resumed across log rotation.
  • binlog_format=ROW — statement or mixed logging yields no row events.
  • binlog_row_image=FULL — partial images arrive with missing columns.
  • binlog_row_metadata=FULL — row events must carry column names and enum/set values.
  • A non-zero server_id on the server, and a distinct server ID for Fabric (set in the connection form).
  • Binlog retention longer than 72 hours. Apply and persist:
SET PERSIST binlog_expire_logs_seconds = 259201;  -- > 72h
SET PERSIST expire_logs_days = 0;                -- legacy knob must be 0

A session time zone that can be pinned to UTC is also required (SET SESSION time_zone = '+00:00' must succeed); --default-time-zone=+00:00 is recommended.

A replication login

CREATE USER 'replicator'@'%'
  IDENTIFIED WITH mysql_native_password BY '<password>';
GRANT REPLICATION SLAVE, REPLICATION CLIENT, SELECT ON *.*
  TO 'replicator'@'%';
FLUSH PRIVILEGES;

On MySQL 8 use mysql_native_password: the bundled client cannot authenticate with caching_sha2_password.

Other requirements

  • Every table you select must have a primary key — a keyless table is refused by name.
  • If you read from a replica, log_replica_updates must be ON, or upstream changes never reach its binlog.
  • The runner must reach host:port. utf8mb4 is the recommended server charset.

Connection fields

FieldRequiredDefaultNotes
Connector nameYes—Unique across sources.
HostYes—TCP host of the server.
PortYes3306
UsernameYes—The replication/SELECT user.
PasswordYes on create—Leave blank on edit to keep the stored password.
DatabaseYes—Test connection lists the visible databases (system schemas are hidden). Read-only after creation.
Server IDYes—Fabric's reader identity. Must differ from the server's own server_id and from every replica's, and be unique across MySQL sources. A collision makes MySQL kill the older connection.

How it replicates

  • The snapshot runs inside one consistent-snapshot transaction and is always serial; parallel snapshot workers above 1 are ignored.
  • The binlog position is captured before the scan, and each table's progress is checkpointed after every chunk.
  • On resume the stored position is validated against the live server — a position ahead of the current file, or older than the oldest retained file, is a loud error rather than silent data loss.

Gotchas

Watch out

  • Each failed prerequisite is named explicitly: binlog format, row image, row metadata, retention, missing grant, server ID, replica updates, time zone, or a keyless table.
  • A schema change while the runner is down is refused on resume with a column diff — recover with a pipeline reset, not a cursor clear. A live ALTER TABLE while the runner is up lands additively.
  • tinyint(1) is boolean only by convention: Fabric scans for out-of-range values and widens the column to SMALLINT when needed.