# MySQL vs Amazon Aurora: When to Migrate and When to Stay in 2026
By Daniel Rozin | A Versus B | May 6, 2027
Amazon Aurora MySQL-compatible is built on MySQL — your existing queries, schemas, and drivers work without modification. But Aurora's internal storage architecture is fundamentally different, and that difference has significant implications for performance, availability, and cost. Here's when it makes sense to migrate and when it doesn't.
---
What Aurora MySQL Actually Is#
Amazon Aurora is a cloud-native relational database that is binary-compatible with MySQL 8.0 (and PostgreSQL, in its Aurora PostgreSQL variant). It rewrites the storage layer entirely while preserving the MySQL SQL interface and wire protocol.
Standard MySQL (RDS): The database engine writes to EBS (Elastic Block Store) volumes. Data is replicated by syncing EBS snapshots.
Aurora MySQL: The storage layer is distributed across a fleet of AWS-managed storage nodes in multiple Availability Zones. The database engine communicates with this distributed storage pool rather than local disk. Replication is built into the storage layer, not the database engine.
This architectural difference produces Aurora's main advantages — and its cost premium.
---
Performance Comparison#
Read Performance#
Aurora's distributed storage enables multiple read replicas to serve reads from the same shared storage pool without replication lag. Standard MySQL read replicas use binary log replication, which introduces a lag of milliseconds to seconds under heavy write load.
| Workload | MySQL RDS | Aurora MySQL | Advantage |
|---|---|---|---|
| Simple SELECT (small table) | ~0.5ms | ~0.5ms | Equivalent |
| Complex JOIN (production load) | Varies | 2–3× faster | Aurora |
| Read replica lag | 50–500ms | <10ms (typically) | Aurora |
| 1000 concurrent reads | Degrades | Scales linearly | Aurora |
AWS claims 5× MySQL throughput — this is measured under specific high-concurrency read scenarios. In practice, the speedup is 2–3× for typical web application workloads.
Write Performance#
Aurora's storage architecture adds latency to individual writes (the engine must confirm writes across storage nodes in two Availability Zones), but enables better throughput under concurrent write pressure.
| Workload | MySQL RDS | Aurora MySQL |
|---|---|---|
| Single-row INSERT | ~1ms | ~1.5ms |
| Concurrent INSERTs (100+) | Degrades | Better sustained throughput |
| Transaction throughput | ~2,000 TPS | ~3,500 TPS |
For write-heavy workloads with many concurrent transactions, Aurora typically outperforms MySQL RDS. For low-concurrency write workloads, MySQL RDS may be marginally faster per transaction.
---
Cost Comparison#
This is where the decision gets complicated.
Storage Costs#
| Service | Storage Cost |
|---|---|
| MySQL RDS | ~$0.115/GB/month (gp3 EBS) |
| Aurora | ~$0.10/GB/month (Aurora storage, automatically scales) |
Aurora's per-GB storage cost is slightly lower, and it scales automatically from zero to 128 TiB without pre-provisioning. MySQL RDS requires you to provision storage in advance (though gp3 auto-scaling is available).
Compute Costs#
| Instance | MySQL RDS (db.r6g.large) | Aurora (db.r6g.large) |
|---|---|---|
| Per hour | $0.26/hr | $0.29/hr |
| Monthly (730hr) | $190 | $212 |
| With Multi-AZ | $380/month | $424/month |
Aurora compute is approximately 10–15% more expensive than equivalent RDS MySQL instances.
The Real Cost Difference: I/O#
MySQL RDS: Storage I/O is included in the EBS volume (gp3 provides 3,000 IOPS free, with additional IOPS at $0.02/IOPS/month).
Aurora Standard: I/O is charged at $0.20 per million read I/O requests and $0.20 per million write requests. At high I/O volumes, this can be the largest cost driver.
Aurora I/O-Optimized (launched 2023): Eliminates per-I/O charges in exchange for a ~25% higher instance price. This becomes cost-effective when I/O charges exceed 25% of instance costs — roughly at sustained high-traffic production scale.
Real-world cost difference for a medium application:
- MySQL RDS (db.r6g.large, Multi-AZ): ~$380/month
- Aurora MySQL (db.r6g.large, Multi-AZ, standard): ~$550–650/month
- Aurora MySQL (I/O Optimized): ~$540–590/month
Aurora costs approximately 40–75% more for equivalent configurations at medium scale. At small scale (db.t3.medium), Aurora is sometimes cheaper because its storage auto-scaling removes the over-provisioning penalty common in MySQL RDS.
---
Reliability and Availability#
MySQL RDS Multi-AZ#
- Synchronous replication to standby in second AZ
- Automatic failover: 30–60 seconds typically
- Read replicas: separate, can lag behind primary
Aurora MySQL#
- 6-way replication across 3 AZs (2 copies per AZ) — data is more durable
- Automatic failover: < 30 seconds (often < 10 seconds with Global Database)
- 15 read replicas maximum (vs MySQL RDS's 5)
- Zero-copy storage for read replicas (no replication lag, shared storage pool)
- Aurora Global Database: active-active replication across AWS regions in < 1 second
For applications requiring 99.99%+ availability, Aurora's failover time and storage architecture are significantly more resilient than MySQL RDS.
---
Migration: How Hard Is It?#
Aurora is MySQL-compatible, meaning migration is simpler than moving to a different database:
If you're on MySQL 8.0 (RDS or self-managed):
- Use AWS DMS (Database Migration Service) for live migration with minimal downtime
- Or: take a mysqldump/Percona backup and restore to Aurora
- Most applications require zero code changes
Compatibility caveats:
- Aurora uses its own storage routines — some very low-level MySQL internals differ
- Specific MySQL storage engines (MyISAM) don't work on Aurora (InnoDB required)
- Some admin commands behave differently
- For most standard web applications: 100% compatible
---
Decision Framework: Should You Migrate?#
Stay on MySQL RDS if:#
- Database is < 100GB and traffic is modest (< 100 concurrent connections)
- Budget is a primary constraint — Aurora's 40–75% premium doesn't fit
- Your workload is write-heavy and latency-sensitive (Aurora's per-write overhead matters)
- You're running dev/test environments where full Aurora costs aren't justified
- Your team has no familiarity with Aurora's I/O pricing model and want simplicity
- Single-region deployment without cross-region replication needs
Migrate to Aurora MySQL if:#
- Read-heavy traffic requires low-latency read replicas with near-zero lag
- You need more than 5 read replicas
- Automatic storage scaling (128 TiB) matters — removing the need to pre-provision
- High availability is critical — failover in < 30 seconds matters to your SLA
- Multi-region active-active replication is a requirement (Aurora Global Database)
- You're already at a scale where the performance gains offset the 40–75% cost premium
---
Aurora Serverless v2: The Middle Path#
Aurora Serverless v2 (generally available since 2022) offers auto-scaling compute:
- Scales from 0.5 ACUs to 128 ACUs (where 1 ACU ≈ 2GB RAM)
- Scales in seconds (vs minutes for provisioned instances)
- Ideal for: variable workloads with unpredictable spikes, dev/staging environments
Pricing: ~$0.12/ACU/hour. A minimum 0.5 ACU instance runs ~$43/month. For intermittent workloads, Serverless v2 can cost less than provisioned MySQL RDS.
---
Frequently Asked Questions#
Q: Is Amazon Aurora faster than PostgreSQL?
A: Aurora MySQL vs RDS PostgreSQL is an apples-to-oranges comparison — they're different database engines. Aurora PostgreSQL-compatible offers similar storage architecture benefits over standard RDS PostgreSQL. The right comparison is always engine-to-engine: Aurora MySQL vs RDS MySQL, or Aurora PostgreSQL vs RDS PostgreSQL.
Q: Can I move from Aurora back to MySQL?
A: Yes — take a snapshot and restore to MySQL RDS, or use mysqldump. The migration is the same in reverse. There's no lock-in beyond typical database migration complexity.
Q: What is Aurora I/O-Optimized and when should I use it?
A: Aurora I/O-Optimized (launched 2023) eliminates per-I/O request charges and instead charges a higher base instance price (~25% more). It's cost-effective when your I/O charges exceed 25% of instance costs — roughly 200,000+ I/O requests per second sustained.
Q: Does Aurora work with SQLAlchemy / Django ORM / Prisma?
A: Yes — because Aurora is MySQL-compatible at the wire protocol level, all MySQL drivers and ORMs work without modification. You connect with the same MySQL connection string, just pointing to Aurora's endpoint.
---
MySQL RDS is the right choice for small-to-medium applications where cost optimization matters more than performance ceiling: lower cost, simpler pricing model, and adequate for most web application database workloads. Migrate to Aurora when read performance at scale, near-zero replica lag, faster failover, or multi-region replication become requirements — the 40–75% cost premium is well-justified at that point.
Share this article
Get the best comparisons in your inbox
Weekly digest of trending comparisons, new categories, and expert insights. No spam.
Join 1,000+ readers · Unsubscribe anytime
Related Comparisons
3 head-to-head comparisons