Overview
This project demonstrates how to perform a zero-downtime database migration across AWS regions using:
AWS Database Migration Service (DMS)
Amazon RDS (MySQL)
AWS CloudFormation
The system uses Change Data Capture (CDC) to continuously replicate database changes, ensuring minimal downtime and real-time synchronization.
🎯 Key Features
✅ Zero/near-zero downtime migration
🔄 Real-time data replication using CDC
🌍 Cross-region migration (e.g., Mumbai → Singapore)
⚡ Automated infrastructure setup
🔍 Data validation and consistency
🏗️ Architecture
🔁 Workflow
Full data load from source to target
CDC captures real-time changes
DMS applies changes continuously
Target DB stays in sync
Cutover to target database
🧰 Tech Stack
AWS DMS
Amazon RDS (MySQL)
AWS CloudFormation
MySQL Workbench
⚙️ Step-by-Step Implementation
🟦 Step 1: Create Source Database (RDS - Region A)
Go to AWS Console → RDS
Click Create Database
Select:
Engine: MySQL
Instance: db.t3.micro
Set username & password
Enable public access (for testing)
or (Use cloud formation code)
download the source-db.yaml from cloudformaton/ folder
open cloudformation in aws cli
click on create stack
select - choose an existing template
select - upload a template file
create stack
🟦 Step 2: Create Target Database (RDS - Region B)
Switch AWS region
Repeat same steps as source
or (Use cloud formation code)
use target-db.yaml file from cloudformation/ folder
🟦 Step 3: Enable CDC (IMPORTANT)
Create Parameter Group
Go to RDS → Parameter Groups
Create new parameter group
Set:
binlog_format = ROW
binlog_row_image = FULL
Attach to source DB
Reboot database
Step 4: Create DMS Replication Instance
Go to DMS → Replication Instances Click Create Select: Instance: dms.t3.medium
Step 5: Create Endpoints
Source Endpoint
Enter source DB details (endpoint of source RDS)
Test connection
Target Endpoint
Enter target DB details (endpoint of destination RDS)
Test connection
Step 6: Create Migration Task
Go to DMS → Tasks → Create Task Configure: Migration Type: Full Load + CDC (change data capture) Table Mapping: Schema: demo_db Table: users
Step 7: Start Migration
Start the task Monitor: Full load CDC status
Step 8: Validate Data
connect source-db RDS database to mysql workbeanch
username admin password - Password123!
endpoint is RDS database endpoint
do the same for target RDS database
Source: INSERT INTO users VALUES (1, 'test_user');
Source database:
Step 9: Test CDC
UPDATE users SET name = 'updated' WHERE id = 1;
👉 Changes should reflect in target DB instantly Target database :
Step 10: Cutover
Stop writes to source Ensure replication lag = 0 Switch application to target DB
Key Concepts
🔹 What is CDC?
CDC captures changes (INSERT, UPDATE, DELETE) from database logs and replicates them in real time.
🔹 What is Replication Instance?
It is the compute engine that:
Reads source DB
Processes data
Writes to target DB
🔹 What is DMS Task?
Defines:
What to migrate
How to migrate
When to migrate
Common Issues & Fixes
possible errors
Error 1236 (Binlog Not Found)
Cause: Old logs deleted
Fix:
Recreate task Start from beginning
CDC Not Working Fix: binlog_format = ROW binlog_row_image = FULL
Data Not Syncing Check task status Ensure CDC enabled
Cost Estimation
Service Cost RDS (2 instances) ~$1.6 DMS ~$2.4 Data Transfer ~$0.2 Total ~$4–5
Results
✅ Zero downtime migration achieved
🔄 Real-time replication working
📈 Data consistency maintained
🏁 Conclusion
This project demonstrates how AWS DMS with CDC enables seamless and reliable database migration with minimal downtime.
References
1.AWS DMS Documentation 2.AWS RDS Documentation 3.MySQL Binlog Documentation
Author
Darshan B










Top comments (0)