Skip to main content

Data integration

MySQL to Iceberg: land MySQL and MariaDB data as Apache Iceberg tables

MySQLApache Iceberg

Last updated Tuesday, Aug 25, 2026

How it works

  1. 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. 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. 3

    Validate and infer schema

    OptimaFlo confirms connectivity, then reflects column names and types into the same type vocabulary every connector shares.

  4. 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.

We value your privacy

We use cookies to enhance your browsing experience, serve personalized content, and analyze our traffic. By clicking "Accept All", you consent to our use of cookies. You can customize your preferences or learn more in our Cookie Policy and Privacy Policy.