The table above gives you the raw numbers, but here's what actually happens when you make the switch. We moved our e-commerce platform off MySQL Cloud last year after a $4,200 surprise bill and three production outages. Here's what we learned the hard way.
The $4,200 Wake-Up Call
Our MySQL Cloud bill exploded overnight because their "automatic scaling" kicked in during a DDoS attack. The database scaled up to handle the load, then stayed there for two weeks before we noticed. Support basically said "working as intended" when we complained.
That's when I started researching alternatives. Not because I love migration projects, but because throwing money at Oracle felt stupid.
PostgreSQL: Just Switch Already
We migrated to PostgreSQL on RDS and immediately regretted not doing it sooner. The JSON support alone saved us from three different microservices we were planning to build.
What broke during migration (PostgreSQL 16 from MySQL 8.0.44):
- `LIMIT` vs `OFFSET` syntax differences broke our pagination
- `AUTO_INCREMENT` became `SERIAL` - had to update all our Django models
- MySQL's weird `GROUP BY` behavior actually masked bugs in our code
Migration tools that saved our ass:
- pgloader converted our schema and data in 2 hours
- AWS DMS handled the cutover with minimal downtime
- Had to rewrite maybe 20 queries total out of thousands
- PostgreSQL vs MySQL syntax differences documented most issues
Real cost comparison:
- MySQL Cloud: $680/month for 16GB + surprise scaling bills
- PostgreSQL RDS: $420/month for equivalent performance + predictable scaling
PlanetScale: Cool Demo, Production Nightmare
We tried PlanetScale for a side project. The branching feature is genuinely cool - you can test schema changes like Git branches. But their limitations will bite you:
No foreign keys. Seriously. They're "coming soon" for two years now. Our referential integrity went to shit because their Vitess proxy strips them out.
Connection limits are brutal. Hit 1000 connections and suddenly you need the $399/month plan. Our Lambda functions kept hitting this because connection pooling is hard in serverless.
Deploy previews broke constantly. Half the time the schema migration would hang and we'd have to restart the whole process. Their GitHub integration is buggy.
Supabase: PostgreSQL for People Who Hate DevOps
Supabase is basically PostgreSQL with a pretty dashboard and some auth magic. It's great until you need to scale beyond their "startup" tier.
Production gotchas:
- Edge Functions timeout randomly on payloads > 1MB
- Real-time subscriptions break when you hit 100+ concurrent connections
- Their auth system conflicts with existing user tables
- Row Level Security can kill performance on complex queries
Cost reality check:
- Started at $25/month (looked cheap)
- Hit $180/month when we got serious traffic
- Aurora PostgreSQL was cheaper at that point
MongoDB: When You Hate Your Future Self
Our mobile team pushed for MongoDB because "documents are more flexible." Six months later we're spending more time writing aggregation pipelines than shipping features.
The $2,200 connection pooling disaster:
MongoDB Atlas charges per connection. Our Node.js app wasn't closing connections properly and we hit 2,000 concurrent connections at $1.10 each. The bill was insane and we couldn't figure out where the connections were coming from for days.
Learning curve is brutal:
- No joins means everything is denormalized
- Aggregation pipelines make SQL look simple
- Schema versioning is a nightmare when you have no enforced schema
- Index design requires completely different thinking
CockroachDB: Distributed Database for Rich People
We evaluated CockroachDB for a multi-tenant app. It's technically impressive but expensive as hell.
Performance reality:
- Simple queries were 2-3x slower than PostgreSQL
- Complex joins sometimes took 10+ seconds
- The "automatic sharding" picked terrible shard keys for our workload
- Distributed transactions add significant latency
Cost explosion:
- Started at $100/month for testing
- Production estimate was $2,000/month for the same workload that costs us $400 on PostgreSQL
- Multi-region features require enterprise tier
Aurora: AWS Lock-In with Extra Steps
Aurora MySQL Serverless v1 was trash. It took 30 seconds to cold start and would pause randomly. v2 is better but you're basically paying Aurora prices for RDS MySQL with some scaling magic.
The "serverless" lie:
- Still pays for storage even when paused
- Minimum billing is $80/month even if you use it once
- Cold starts killed our serverless API performance
- Scaling delays can take minutes
The Migration That Actually Worked
After trying five different alternatives, we settled on PostgreSQL RDS for production and Neon for staging/dev environments.
PostgreSQL migration checklist:
- Export MySQL schema with
mysqldump --no-data
- Convert with pgloader:
pgloader mysql://old postgresql://new
- Fix your application queries (mostly
LIMIT
syntax) - Update connection strings and deploy
- Party because you're done with Oracle
Time to migrate: 2 weeks for a 500GB database with 50+ tables
Downtime: 4 hours (could have been less if we planned better)
Cost savings: $3,600/year
Developer happiness: Finally using a database that doesn't fight us