Server Migrations with Minimal Downtime
A migration is successful when data, behavior, identity, and operational ownership move—not merely when files appear on the destination server. The safest migrations are staged, measurable, reversible, and boring.
Inventory Before Copying Anything
The visible website is often only one part of the workload. A migration inventory should include:
- Domains, subdomains, parked domains, redirects, and DNS zones
- Website files, symlinks, permissions, ownership, and special filesystem attributes
- Databases, users, grants, stored routines, events, and character sets
- PHP or runtime versions, extensions, modules, and custom configuration
- Mailboxes, forwarders, filters, autoresponders, aliases, and routing mode
- Cron jobs, queues, scheduled tasks, and background workers
- Certificates, private keys, ACME behavior, and external CDN or proxy settings
- External API allowlists, payment callbacks, webhooks, SFTP partners, and monitoring checks
- Backup jobs, retention policies, and restore procedures
- Customer contacts, maintenance restrictions, and approval requirements
Look for hidden coupling
Applications often contain hard-coded IP addresses, local filesystem paths, server hostnames, or assumptions about mail delivery. Search configurations and source code before cutover.
# Examples of things worth locating before a move
grep -R "192\.0\.2\." /home/example/public_html /etc 2>/dev/null
grep -R "/home/olduser" /home/example 2>/dev/null
grep -R "old-hostname" /home/example /etc/cron* 2>/dev/null
# Review timers and cron jobs
systemctl list-timers --all
crontab -l
Prove Compatibility Early
Many migration failures are compatibility failures discovered too late. Compare source and destination before the production window.
| Area | Questions |
|---|---|
| Operating system | Are paths, service names, packages, security policies, and filesystem behavior different? |
| Web server | Does the application depend on Apache overrides, NGINX rules, LiteSpeed behavior, or custom modules? |
| PHP/runtime | Are required versions and extensions available? Are deprecated functions or strict defaults involved? |
| Database | Are SQL modes, authentication plugins, collations, and engine versions compatible? |
| Will local versus remote routing, DKIM, SPF, PTR, and outbound reputation change? | |
| Network | Do firewalls, source-IP allowlists, NAT, IPv6, and MTU remain valid? |
Create a representative test set
Do not test only the easiest account. Select examples that cover:
- The largest account
- The oldest application
- A mail-heavy domain
- An application with scheduled tasks
- A site using external APIs or IP allowlists
- A customer with dedicated IP or custom DNS
Choose the Migration Method
Cold migration
Stop writes, copy everything once, validate, and start on the destination. It is simple and consistent but creates the longest outage.
Pre-copy and final sync
Copy most data while the source remains live, then stop or restrict writes for a short final synchronization.
Replication or log shipping
Continuously move database or storage changes, then promote the destination. It reduces downtime but adds setup and consistency complexity.
Proxy or live-transfer bridge
Temporarily redirect requests that still reach the source to the new service. Useful for DNS transition, but it must not hide incomplete migration work.
Example pre-copy pattern
# Initial file copy while the source is live
rsync -aHAXx --numeric-ids --info=progress2 \
/home/example/ root@new-server:/home/example/
# During the maintenance window, stop application writes and run a final sync
rsync -aHAXx --numeric-ids --delete --info=progress2 \
/home/example/ root@new-server:/home/example/
Use --delete only after verifying source and destination paths. A misplaced slash or reversed source/destination can cause data loss. Test the exact command against nonproduction data first.
A Phased Migration Runbook
- Plan. Define scope, owners, maintenance window, customer communications, success criteria, and rollback deadline.
- Prepare destination. Patch it, configure networking, install required runtimes, establish backups, and enroll it in monitoring.
- Lower DNS TTL where appropriate. Do this far enough in advance for the previous TTL to expire.
- Pre-copy data. Move large, mostly static content before the maintenance window.
- Test privately. Use a hosts-file override, temporary hostname, isolated VLAN, or test listener.
- Freeze writes. Enable maintenance mode, stop jobs, or otherwise create a consistent final state.
- Final synchronization. Copy changed files, databases, mail, and configuration.
- Cut over. Change DNS, routing, NAT, proxy, or service ownership.
- Validate. Test from multiple networks and exercise real application workflows.
- Observe. Keep the source available but protected until the defined rollback window closes.
- Close. Update inventory, backups, monitoring, documentation, and customer communications.
Mail and DNS Require Their Own Plan
Mail can arrive at both old and new systems during DNS transition. Plan for that rather than assuming every sender sees the new MX record immediately.
Mail cutover options
- Perform an initial mailbox copy and a final synchronization after cutover.
- Temporarily forward or proxy mail from the source to the destination where supported.
- Keep the source accepting mail and perform a second mailbox sync after DNS propagation.
- For remote mail services, ensure the migration does not accidentally change local/remote routing.
DNS checklist
- Authoritative nameserver delegation is known.
- A, AAAA, MX, CNAME, TXT, SRV, CAA, and custom records are inventoried.
- DNSSEC state and DS records are understood.
- SPF and DKIM will remain valid after the source IP changes.
- PTR records are scheduled for new mail IPs.
- TTL changes have had time to take effect.
- Monitoring queries authoritative servers, not only recursive caches.
Validate the Service, Not Just the Port
A TCP connection to port 443 proves very little. Validate complete workflows.
| Layer | Validation examples |
|---|---|
| DNS | Authoritative and recursive responses, IPv4 and IPv6, DNSSEC, MX, PTR |
| TLS | Correct certificate, chain, hostname, SNI, expiration, and proxy path |
| Web | Homepage, login, upload, download, redirects, static assets, and error pages |
| Application | Create/update/delete workflow, background job, webhook, and external API |
| Database | Record counts, encoding, routines, events, application writes, and backups |
| Inbound, outbound, local delivery, remote delivery, authentication, and webmail | |
| Operations | Monitoring, logs, backups, alert routes, and support access |
Use external viewpoints
Test from outside the destination network. Internal DNS, hairpin NAT, trusted source addresses, and local certificate stores can make a broken public service appear healthy.
Rollback Is a Decision, Not a Hope
Define a rollback point before the migration. Once both systems accept independent writes, a simple DNS reversal may lose data or create conflicts.
Rollback criteria
- Critical application workflow fails and cannot be corrected within the window.
- Data consistency cannot be proven.
- Performance is materially below the required baseline.
- Mail routing or reputation creates unacceptable delivery risk.
- Monitoring or backup coverage is incomplete.
- The team loses safe administrative access.
Keep the source controlled
After cutover, do not immediately delete the source. Restrict access, disable avoidable scheduled jobs, label it clearly, and preserve it for the agreed rollback or verification period. When decommissioning:
- Take a final archive according to retention policy.
- Remove it from DNS, monitoring, backup, and automation.
- Release licenses and IP assignments.
- Sanitize disks according to the data-handling policy.
- Update diagrams and inventory.
cPanel-Specific Notes
WHM’s Transfer Tool can copy accounts and selected configuration between cPanel servers, and its live-transfer features can reduce user-visible interruption. Still review transfer warnings, test account behavior, and preserve enough destination space for archives and extraction.