A walkthrough of migrating 248 GB of MySQL across 30 databases, 34 Nginx sites, GitLab EE, and Neo4j from a $1,432/month DigitalOcean droplet to a $233/month Hetzner AX162-R dedicated box with no downtime.
The path: mydumper/myloader with 32 threads for the bulk MySQL 5.7 to 8.0 import, master-to-replica sync from a recorded binlog position with slave_exec_mode = IDEMPOTENT to bypass 1062 errors, scripted DNS TTL reduction to 300s on A/AAAA records only, converting the old Nginx configs into reverse proxies during propagation, and a final flip of all A records via the DigitalOcean API.










