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 MBNo 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
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
- All tables in the
publicschema — columns, data, constraints uuid→CHAR(36), with(uuid())defaultsjsonb/json→ MySQLJSONtimestamptz→ UTCDATETIME(6)- Sequences and identity columns →
AUTO_INCREMENT - Foreign keys, indexes, unique constraints
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.