Blog
Migrating a 50GB WooCommerce site with zero downtime — the runbook we use
May 22, 2026 · 1 min read · by Sudhanshu K.
A recent WooCommerce migration: 50 GB of data, 480,000 products, 14 years of order history, moved from a creaking single-server VPS onto a properly-architected setup. Total customer-facing downtime: 38 seconds. The trick isn't speed — it's setting up MySQL replication to the new host while the old host is still taking orders, so cutover replays only the last few seconds of writes.
The cutover script — the 38-second part
ssh source "wp maintenance-mode activate"
sleep 60 # drain in-flight checkouts
ssh dest "mysql -e 'STOP SLAVE; RESET SLAVE ALL;'"
rsync -avz --delete source:uploads/ dest:uploads/
ssh dest "wp search-replace 'old-domain.com' 'new-domain.com' --all-tables --skip-columns=guid"
curl -X PATCH ".../dns_records/$ID" -d '{"content":"<new-ip>"}'
ssh dest "wp maintenance-mode deactivate"The rsync is fast because the bulk copy ran nightly for a week prior. The DB is fast because replication has been catching up all along.
The full write-up covers:
- Why mysqldump-and-import is wrong for sites this size
- Setting up cross-host MySQL replication for the bulk-copy phase
- Character set + collation traps (emoji in product names will bite you)
- The dry-run cutover against staging — what to test before the real one
- Payment gateway webhook handling during cutover
- The 72-hour reverse-replication safety net for hot rollback
We've run this playbook on every meaningful WooCommerce migration in the past two years. Reach out if you're staring down one.
Full article available
Read the full article