Data integration
MySQL to Iceberg: land MySQL and MariaDB data as Apache Iceberg tables
Last updated Tuesday, Aug 25, 2026
How it works
- 1
Share connection details
Give the Ingestion Engineer a connection string, or host, port, database, and a read-only credential. MariaDB uses the same connector.
- 2
Pick a database and table (or write a query)
In MySQL, the database is the schema namespace, so table reflection is scoped to it directly. A custom SQL query is the alternative for multi-table sources.
- 3
Validate and infer schema
OptimaFlo confirms connectivity, then reflects column names and types into the same type vocabulary every connector shares.
- 4
Land in Raw (Iceberg), in your own AWS account
The first load pulls the full result set into an Apache Iceberg table in your own S3, with snapshot history from the start. That is the destination, not a staging step before one.
MySQL and MariaDB share one connector in OptimaFlo, and both land the same way on AWS: as an Apache Iceberg table in the Raw layer, inside your own S3, under OptimaFlo's BYOC model. Setup is 15 to 20 minutes for the connection and table selection; the schema reflects automatically once a table is chosen.
What is actually different about MySQL
The connector mirrors the Postgres one almost exactly (same SQLAlchemy reflection approach, same type mapping to integer/float/string/boolean/timestamp/date, same fail-loud behavior when no table or query is set), with one structural difference: in MySQL, the database is the schema namespace. Postgres has a separate schema concept inside a database; MySQL does not, so table reflection is scoped straight to the database you connect to. It accepts a mysql:// connection string or discrete host, port, database, and credential fields, plus a raw SQL query as the table-less alternative.
Getting from MySQL into Iceberg on AWS
The first pipeline run pulls the target table (or query result) in full and writes it as an Apache Iceberg table in the Raw layer, inside your own AWS account. From there the AI data team builds Clean and Ready models, the same layered process every source goes through, whether it started as a database, a file in cloud storage, or an API response. There is no intermediate stop in a warehouse you did not ask for: Iceberg in your own S3 is the deliverable of this connector, not a checkpoint on the way to one.
Full refresh, not change data capture
There is no binlog tailing here. MySQL supports row-based binary log replication for true CDC, but this connector does not use it: every run is a plain SELECT, either against the whole table or against a query you write yourself. For most reporting workloads, an hourly or daily run against an indexed, append-heavy table (orders, events, logs) is enough. If a table gets frequent in-place updates and you need to track exactly which rows changed since last run, add your own filter (WHERE updated_at > ...) to a custom query; the pipeline does not track a watermark for you automatically today.
If you still want a warehouse on top
Landing in Iceberg does not close off BigQuery or Snowflake, it just stops treating one of them as mandatory. Once Ready-layer tables exist on top of your Iceberg data, the same destination export used by every other connector can push a Gold table to Snowflake, another Postgres, or another MySQL, in append, overwrite, or upsert mode. BigQuery specifically requires a GCP project to receive it, so it is only reachable if your organization also has a GCP BYOC deployment or a GCP project you are willing to export into.
Honest limits
No CDC, no schema-from-query (a query-based source returns an empty schema rather than guessing one), and no automatic incremental watermarking. If sub-minute freshness is the requirement, this pipeline is not built for that; it is built for the modeling, versioning, and orchestration around a scheduled batch load.
Frequently asked questions
Set up by an AI data team, not a config file
Connect this source and see it land in your own cloud.
Now in early beta. One flat plan, no per-query tax. Runs in your cloud. We never store your data.