MySQL to Supabase converter
Move your MySQL data to Supabase — convert the dump or migrate live.
Upload a dump file
Free
Export with mysqldump,
upload the .sql file,
and download PostgreSQL-ready SQL to import into Supabase. Powered by a real engine —
AUTO_INCREMENT, ENUMs, zero dates all handled.
// converter
uploads deleted on completion real engine, not regex free account, e-mail only
Live MySQL-to-Supabase
Free up to 5 MBNo dump file needed. Enter your MySQL connection details and paste your Supabase connection string — SwapSQL reads from one and writes to the other.
- ✓ Paste your Supabase connection string as the target
- ✓ 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 MySQL database
mysqldump --single-transaction --no-tablespaces \
-h HOST -u USER -p DATABASE_NAME > dump.sql
# compress for faster upload:
gzip dump.sql Need more detail (Docker, phpMyAdmin, remote servers)? See the full mysqldump guide.
Step 2 — Convert it
Drop dump.sql (or dump.sql.gz) into the box above. The dump is loaded
into an isolated MySQL 8.0 sandbox, migrated to PostgreSQL 16 table-by-table, and exported
with pg_dump — so the file you download is guaranteed-valid PostgreSQL, ready for Supabase.
Step 3 — Import into Supabase
Copy your Supabase connection string from the dashboard
(Settings → Database → Connection string). Pick the
Session pooler option (host …pooler.supabase.com,
port 5432) — it works over IPv4. The direct host
(db.[ref].supabase.co) is IPv6-only and won't connect from most
tools or servers. Then:
psql "postgresql://postgres.[ref]:[password]@aws-0-[region].pooler.supabase.com:5432/postgres" \
-f dump.postgresql.sql Alternatively, you can use the Supabase CLI:
supabase db push --db-url "postgresql://..." < dump.postgresql.sql What converts automatically
- Tables, column types (full mapping table), character sets → UTF-8
- All data, including JSON, BLOBs and emoji/multibyte text
- Primary keys, foreign keys, unique constraints, indexes
- AUTO_INCREMENT → sequences, reset to the correct next value
- ENUM and SET columns → native PostgreSQL types
After importing: Supabase setup
Once your data is in Supabase, you may want to:
- Enable Row-Level Security on tables that need access control
- Set up Supabase Auth if you're replacing a custom authentication system
- Create database functions for any MySQL stored procedures you were using
- Update your application's connection string to point to Supabase
// faq
Frequently asked questions
How do I migrate a MySQL database to Supabase?
Export your MySQL database with mysqldump, upload it above to convert it to PostgreSQL, then import the result into your Supabase project with psql using your Supabase connection string.
Does AUTO_INCREMENT convert to Supabase correctly?
Yes. AUTO_INCREMENT columns become PostgreSQL identity columns (or sequences), and the counter continues from your highest existing id. Supabase handles them natively.
What happens to ENUM columns?
MySQL ENUMs become native PostgreSQL ENUM types, which Supabase supports fully. The same labels and constraints carry over.
Can I use the converted dump with Supabase's migration system?
Yes. The output is a standard pg_dump-format file. You can import it directly with psql, or place it in your supabase/migrations/ folder for version-controlled deployments.
Will Row-Level Security work after the import?
The converted schema won't include RLS policies — those are specific to your Supabase application logic. After importing the data, set up RLS policies in the Supabase dashboard or via SQL as part of your application setup.
Can I migrate directly without a dump file?
Yes — live migration is included on the free plan for source databases up to 5 MB (two per day). Enter your MySQL source connection and your Supabase connection string 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.