SwapSQL

Supabase to MySQL converter

Supabase runs PostgreSQL — export it, convert it, run it on MySQL. Two ways to migrate.

Upload a dump file

Free

Export your Supabase project with pg_dump or the Supabase CLI, upload the file, and get MySQL 8-ready SQL — uuid, jsonb, arrays and time zones mapped properly, output verified on a real MySQL server.

// converter

uploads deleted on completion real engine, not regex free account, e-mail only

Live Supabase-to-MySQL

Free up to 5 MB

No dump file needed. Paste your Supabase connection string and your MySQL connection details — SwapSQL reads from one and writes to the other.

  • Paste your Supabase connection string directly
  • Test both connections before starting
  • Tables, data, indexes and keys transferred directly
  • Full report when the migration completes
  • Use Supabase's Session pooler string (IPv4) — the direct host is IPv6-only
Open live migration

Compare plans — or start free, upgrade when you need it.

Step 1 — Export your Supabase database

Find your connection string in the Supabase dashboard under Settings → Database → Connection string. Pick the Session pooler option (host …pooler.supabase.com, port 5432) — it works over IPv4. Supabase's direct host (db.[ref].supabase.co) is IPv6-only and won't connect from most tools or servers.

pg_dump "postgresql://postgres.[ref]:[password]@aws-0-[region].pooler.supabase.com:5432/postgres" > dump.sql

# or with the Supabase CLI:
supabase db dump --db-url "postgresql://..." > dump.sql

# compress for faster upload:
gzip dump.sql

Step 2 — Convert it

Upload dump.sql (or .sql.gz) above. The dump is restored into an isolated PostgreSQL sandbox, the schema is read directly from the live catalog, translated to MySQL DDL, and the data is exported as efficient batched INSERTs. Supabase-specific objects (auth schema, RLS policies, extensions) are skipped cleanly.

Step 3 — Import into MySQL

mysql -u USER -p -e "CREATE DATABASE mydb CHARACTER SET utf8mb4"
mysql -u USER -p mydb < dump.mysql.sql

What converts

What doesn't convert (and why)

Row-Level Security policies, Supabase Auth tables (auth.*), Storage buckets, Edge Functions, and Realtime subscriptions are Supabase platform features without MySQL equivalents. They are listed in your conversion report so nothing is silently dropped. Your application data converts fully.

// faq

Frequently asked questions

Can I convert a Supabase database to MySQL?

Yes. Supabase runs standard PostgreSQL, so any tool that converts PostgreSQL to MySQL works. Export your Supabase database with pg_dump, upload it above, and download MySQL-ready SQL.

How do I export my Supabase database?

Go to your Supabase project dashboard → Settings → Database, copy the connection string, then run pg_dump "your_connection_string" > dump.sql. You can also use the Supabase CLI with supabase db dump.

What happens to Supabase-specific features like RLS policies?

Row-Level Security policies, Supabase auth tables, and realtime subscriptions are PostgreSQL-level features that don't have MySQL equivalents. They are listed in the conversion report for reference. Your application tables, data, indexes and constraints all convert.

Are uuid columns preserved?

Yes — uuid columns become CHAR(36) in MySQL, and gen_random_uuid() defaults are mapped to MySQL's (uuid()) function. All existing uuid values transfer as-is.

What about jsonb columns used with Supabase?

PostgreSQL jsonb maps to MySQL JSON. Your data stays queryable using MySQL's JSON functions (JSON_EXTRACT, JSON_VALUE, etc.).

Can I migrate without a dump file?

Yes — live migration is included on the free plan for source databases up to 5 MB (two per day). Paste your Supabase connection string as the source and your MySQL server as the target, and SwapSQL transfers everything directly. The Pro plan removes the size and daily limits.

Which Supabase connection string should I use for live migration?

Use the Session pooler string (host ends in pooler.supabase.com, port 5432). It works over IPv4. Supabase's direct host (db.[ref].supabase.co) is IPv6-only and is unreachable from most servers and tools, so a direct connection will fail with a "network is unreachable" error.