MariaDB to Snowflake: The Complete Replication Guide

Intergalactic Data Labs
โ
โ
11 min read
If you run MariaDB and need its tables in Snowflake, pick a change data capture tool that names MariaDB as a supported source. MariaDB's binary log has drifted from MySQL's, so a MySQL connector is not a safe stand-in. As of October 2026, nine tools document MariaDB as a source with a path to Snowflake, and version support and delete handling decide between them.
Approach | Tools | Change capture | Pricing unit |
|---|---|---|---|
Native in Snowflake | Snowflake Openflow | Binlog, position only | Snowflake credits |
Hosted ELT | Fivetran, Estuary, Hevo, Stitch | Binlog | Rows, GB, or events |
Self-hosted streaming | Debezium plus the Kafka connector | Binlog to Kafka | Your Kafka bill |
Code-first CLI or library | Sling, ingestr, dlt | Binlog, or queries for dlt | Free or flat token |
How is MariaDB binlog replication different from MySQL?
MariaDB started as a copy of MySQL, but its binary log defaults, its GTID format, and its newer event layout now differ from MySQL's. Fivetran's MariaDB docs put the shared history plainly, "MariaDB is a fork of the MySQL code base (up to version 5.5)."
The binary log, or binlog, is the ordered record of every committed change, and every log-based tool reads it as if it were a replica. The defaults below are where a MySQL-shaped setup goes wrong.
Setting | MariaDB default | MySQL 8.4 default | What CDC needs |
|---|---|---|---|
Binary log | Off until log_bin is set | On | On |
binlog_format | MIXED | ROW | ROW |
binlog_row_image | FULL | FULL | FULL |
binlog_row_metadata | NO_LOG | MINIMAL | FULL for Openflow |
Log expiry | 0, never purged | 30 days | Covers snapshot and outages |
GTID format | 0-1-100 | UUID plus sequence | A parser for MariaDB GTIDs |
Sources for the table are the MariaDB binary log formats page, the MariaDB system variables, the activation guide, and the MySQL 8.4 binary log options.
GTIDs do not cross over. A GTID, or global transaction ID, tags each transaction so a reader can resume after a failover. The two formats cannot be mixed. "MariaDB and MySQL have different GTID implementations, and they are not compatible with each other," per the MariaDB GTID page. MariaDB writes a domain, server, and sequence number such as 0-1-100, per the Debezium MariaDB connector.
MariaDB 11.4 changed the event format. Debezium notes that "A new binary log format was introduced in MariaDB 11.4." It asks you to set binlog_legacy_event_pos to ON, or the connector may lose its resume point after a restart, and Openflow and Hevo ask for the same flag. The same release added a FULL_NODUP row image, which logs only changed columns in the after image.
Versions matter for tool choice. The MariaDB Foundation now maintains four long-term series, and the oldest supported one is 10.11, since 10.6 reached end of life this July, per its Q3 release post. Openflow starts at 11.4, so a team on 10.11 is outside its support range.
Which tools replicate MariaDB to Snowflake?
Nine tools document MariaDB as a source with a documented path into Snowflake, and eight of them read the binlog. Airbyte is the notable gap.
Tool | MariaDB support | Change capture | Runs where | Pricing unit |
|---|---|---|---|---|
Accepts a mariadb URL, docs list MySQL 8.0 and later only | Binlog, beta source, alpha Snowflake sink | Your network | Apache 2.0, self-run | |
Snowflake Openflow | 11.4 or later, RDS | Binlog position | Snowflake or AWS BYOC | Snowflake credits |
Fivetran | 10.1.2 to 11.7, RDS | Binlog, GTID, or Teleport | Hosted, Hybrid | Monthly active rows |
Estuary | 10.3 and later | Binlog | Hosted, private, BYOC | GB plus per connector |
Hevo | 10.2 and later | Binlog, no GTID | Hosted | Events per month |
Stitch | Integration version 2 | Log-based incremental | Hosted | Rows per month |
Debezium | Dedicated MariaDB connector | Binlog to Kafka | Kafka Connect | Your Kafka bill |
Sling | mariadb connection | Binlog on paid tiers | CLI | Pro Max token or Advanced plan |
ingestr | mariadb+cdc scheme | Binlog | CLI | Free, FSL-1.1 |
dlt | Listed SQL source | Queries only | Python library | Free, Apache 2.0 |
Airbyte | No MariaDB source in its registry | None | Not applicable | Credits on Cloud |
Filament is built by Galaxy, which also publishes this site. Every cell comes from the vendor docs linked in the table or below.
Snowflake Openflow is generally available and loads through Snowpipe Streaming into journal tables, then merges on a schedule, per the Openflow MySQL and MariaDB docs. Deletes set _SNOWFLAKE_DELETED to true, and the journal tables "are retained indefinitely."
Openflow "supports only username and password authentication with MySQL or MariaDB," and its GTID page says MariaDB sources "always use binary log position tracking." Runtimes on a Snowflake deployment bill per second with a 5-minute minimum, per the cost page.
Fivetran covers the widest version range, on both Generic MariaDB and RDS. It turns on GTID mode by itself when it finds gtid_binlog_state, and its Teleport Sync fallback skips tables over 20 million rows. Deletes arrive as a _fivetran_deleted flag. Billing is monthly active rows, with 500,000 MAR on the free plan.
Estuary captures MariaDB 10.3 and later and asks for at least a week of binlog, per its MariaDB capture docs. Its Snowflake materialization has a Hard Delete option that removes deleted rows instead of flagging them.
Estuary charges $0.50 per GB plus $100 per month for each of the first six connectors, per its pricing docs.
Hevo and Stitch are the smaller hosted options. Hevo's MariaDB source needs 10.2 or higher, "does not support transaction-based replication using Global Transaction Identifiers," and starts at $299 a month for up to 1M events.
Stitch runs MariaDB integration version 2 on its Standard plan, which starts at $100 a month and bills by rows.
Debezium ships a dedicated MariaDB connector that writes to Kafka and does not support binlog compression, so log_bin_compress must be 0. Snowflake is reached through the Kafka connector, which warns that deleted or updated messages "might not be reflected in the Snowflake table." You own the MERGE.
Sling, ingestr, and dlt are code-first. Sling lists MariaDB as a change capture source, and that mode "requires a CLI Pro Max token or an Advanced Platform Plan." ingestr streams the binlog with the mariadb+cdc:// scheme and writes _cdc_deleted flags, per its MySQL page. dlt's sql_database source reads MariaDB by query, so it never sees a hard delete.
What is the best tool to continuously sync MariaDB to Snowflake?
For MariaDB 11.4 or later, Openflow is the most direct continuous path because it never leaves Snowflake. For older versions, Fivetran covers the range back to 10.1.2, and Estuary is the hosted choice when hard deletes matter.
Tool | Delivery | Fastest cadence | Source |
|---|---|---|---|
Openflow | Snowpipe Streaming plus scheduled MERGE | Continuous ingest | |
Estuary | Continuous capture | Continuous | |
Fivetran | Micro-batch | 1 minute on Enterprise | |
ingestr | Catch-up runs or a stream flag | Continuous with stream | |
Debezium | Kafka topics into Snowflake | Continuous |
Faster is not always cheaper. Snowpipe Streaming makes rows queryable in "as low as 5 seconds," per the Snowpipe Streaming overview. Every MERGE still wakes a warehouse that bills "per-second billing (with a 60-second minimum each time the warehouse starts)," per the warehouse docs. A merge every few minutes is enough for most dashboards.
What are the best practices for loading MariaDB data into Snowflake?
Set the binlog for row-level capture before the first snapshot, keep enough of it to survive a pause, and give the pipeline a key-pair Snowflake user. The block below is a starting my.cnf that meets the documented needs of Openflow, Fivetran, Debezium, and Hevo.
Set
binlog_formatto ROW by hand, since MariaDB defaults to MIXED and statement events break log-based capture.Keep
binlog_row_imageat FULL, which Fivetran, Stitch, and Openflow require, rather than MINIMAL or FULL_NODUP.Turn on
binlog_legacy_event_poson 11.4 and later, as Debezium, Openflow, and Hevo instruct.Keep at least 7 days of binlog, which matches Fivetran's recommendation and Estuary's minimum.
Set the server
time_zoneto a named zone when tables hold DATETIME columns, as Estuary requires.Use a Snowflake key pair of at least 2048 bits, per the key-pair docs, because the MFA rollout will "disallow passwords for all service users."
MariaDB types that need care in Snowflake
MariaDB has a few types MySQL lacks and a JSON type that is really text. Decide each mapping before the first load, since changing it later means a re-snapshot.
MariaDB type | What happens | What to do |
|---|---|---|
JSON | An alias for LONGTEXT, so it arrives as text | PARSE_JSON into a VARIANT column |
UUID, from 10.7 | Not in Openflow's map, so TEXT | Keep as text or cast after load |
INET4 and INET6 | Not in Openflow's map, so TEXT | Keep as text |
DECIMAL over 38 digits | MariaDB allows 65 | Round on purpose or store as text |
Zero dates | Allowed unless NO_ZERO_DATE is set | Choose NULL or the epoch per column |
TINYINT(1) and BIT | Openflow writes INT and a hex string | Cast to BOOLEAN or binary in a view |
MariaDB's JSON page says "JSON is an alias for LONGTEXT," so a tool that maps MySQL JSON to VARIANT sees a text column instead. Run PARSE_JSON in a view or a dbt model. The UUID and INET6 types fall back to TEXT because Openflow's data mapping maps "Any MySQL data types not listed in this table" to TEXT.
Precision and dates are the quiet failures. MariaDB DECIMAL holds up to 65 digits while Snowflake NUMBER stops at 38. MariaDB accepts the zero date unless the SQL mode forbids it, and Fivetran loads invalid dates as NULL while Openflow maps a zero TIMESTAMP to the Unix epoch.
Matching the tool to your MariaDB version and team
Your MariaDB version narrows the list before price does. Start there, then pick by who runs the pipeline.
MariaDB setup | Pick | Why |
|---|---|---|
11.4 or later, Snowflake-first team | Openflow | Native, generally available, billed as Snowflake credits |
10.11 or older, no ops time | Fivetran | Supports 10.1.2 to 11.7, GTID detected automatically |
Hosted, hard deletes required | Estuary | Hard Delete option, billed per GB |
Kafka already in production | Debezium | Dedicated connector, change stream reused |
Small team, scripted pipelines | ingestr or Sling | One CLI, binlog capture, merge by key |
Snapshot only, deletes not needed | dlt | Query-based loads with no binlog setup |
Related guides
MySQL to Snowflake covers the sibling route most of these tools started from.
Postgres to Snowflake covers the same warehouse from a WAL-based source.
MySQL binlog replication explained goes deeper on events, formats, and positions.
The best change data capture tools compares the wider field.
Full load vs incremental vs CDC explains when a query-based load like dlt is enough.
Frequently asked questions
How do I load MariaDB data into Snowflake?
Snapshot each table, load it into Snowflake, then read the MariaDB binary log and apply inserts, updates, and deletes with a MERGE by primary key. Turn on the binlog first, set binlog_format to ROW and binlog_row_image to FULL, and keep at least seven days of logs. Openflow, Fivetran, Estuary, Hevo, Stitch, Debezium, Sling, and ingestr all follow this pattern.
What is the best tool to continuously sync MariaDB to Snowflake?
On MariaDB 11.4 or later, Snowflake Openflow is the most direct option because it streams changes inside Snowflake and bills as Snowflake credits. On older versions, Fivetran supports 10.1.2 through 11.7 and syncs as often as every minute on Enterprise. Estuary streams continuously and can hard delete rows in Snowflake, billed per GB plus per connector.
Can I use a MySQL connector to replicate MariaDB?
Sometimes, but test it first. MariaDB's GTIDs are not compatible with MySQL's, MariaDB defaults to MIXED binlog format instead of ROW, and MariaDB 11.4 introduced a new binlog event format that needs binlog_legacy_event_pos turned on. A connector that documents MariaDB by name has been tested against those differences, and a MySQL connector may not have been.
Does Snowflake Openflow support MariaDB?
Yes. The Openflow Connector for MySQL also accepts MariaDB 11.4 or later, on standard MariaDB and Amazon RDS. It connects through the MariaDB JDBC driver with a username and password only, tracks MariaDB by binlog position rather than GTID, needs binlog_legacy_event_pos set to ON, and soft deletes rows with a _SNOWFLAKE_DELETED flag.
Does Airbyte support MariaDB to Snowflake?
Not as a documented connector. Airbyte's connector registry lists no MariaDB source as of October 2026, and its MySQL source documents MySQL settings only. Teams that want a self-hosted path can use the Debezium MariaDB connector with the Snowflake Kafka connector, or the ingestr and Sling command line tools, which both name MariaDB as a binlog source.
What binlog settings does MariaDB need for change data capture?
Binary logging must be on, binlog_format must be ROW, and binlog_row_image must be FULL. Openflow also needs binlog_row_metadata set to FULL, and on MariaDB 11.4 or later, Debezium, Openflow, and Hevo need binlog_legacy_event_pos set to ON. Debezium also needs log_bin_compress at 0. Keep at least seven days of logs so a paused pipeline can resume.
How are MariaDB deletes handled in Snowflake?
It depends on the tool. Openflow sets _SNOWFLAKE_DELETED to true and keeps the row, Fivetran sets _fivetran_deleted, and ingestr writes a _cdc_deleted flag. Estuary can remove the row with its Hard Delete option. A query-based load such as dlt never sees a hard delete, because the deleted row is no longer there to read.
How does MariaDB JSON load into Snowflake?
As text. MariaDB stores JSON as an alias for LONGTEXT, so replication tools see a string column rather than a native JSON type. Load it as text, then convert it with PARSE_JSON into a VARIANT column in a view or a transformation model. MariaDB adds a JSON_VALID check to columns declared as JSON, so documents should parse cleanly.
More articles
Questions
Answered
FAQ
What does Galaxy do?
What is Filament?
What is enterprise context management?
What does working with Galaxy look like?
How do you handle security and compliance?
Why does Galaxy build in the open?
Company
Copyright ยฉ 2026 Galaxy. All rights reserved.