SYSTEMS OPERATIONAL
Hosting

WHM Transfer Tool: Move cPanel Accounts Between Servers

Getwebup 6 min read

You've outgrown your current server, or you're moving a client's cPanel account to a new box, and someone mentions "just use the Transfer Tool." Then the transfer fails halfway through, or it finishes but DNS is pointing at the wrong IP, or email stops working for six hours. Here's what WHM's Transfer Tool actually does, where it breaks, and how to run a migration that doesn't wake anyone up at 2 a.m.

What the Transfer Tool Actually Does

WHM's Transfer Tool (under Transfers > Transfer Tool in WHM) connects to a source server over SSH or API token, runs pkgacct on each cPanel account you select, and streams the resulting archive straight to the destination server where it's unpacked with restorepkg. That one job carries files, the MySQL databases, email accounts and forwarders, DNS zone records, and cron jobs — everything tied to the account, not just public_html.

That's the appeal: it's a single admin-level operation instead of you manually rsyncing files, dumping databases, and re-creating mailboxes by hand. It's also why it can go wrong in ways a plain file copy never would — it's moving more moving parts at once.

Symptom: The Transfer Stalls, Fails, or "Succeeds" With Missing Pieces

The three complaints we hear most from admins running their first Transfer Tool job:

  • The transfer queue shows a account stuck at a percentage for an hour with no progress
  • The job finishes green, but logging into the account shows missing email, a broken database connection, or an empty public_html
  • The site "moved" but visitors still hit the old server, or mail bounces for hours after the DNS change

Each of these has a specific, findable cause — it's rarely a random glitch.

Cause: Where Transfers Actually Break

1. Disk space on the destination

The destination server needs room for the full archive plus the unpacked account — effectively double the account's size during the restore. If the destination is already tight on space, restorepkg fails partway and you get a partially restored account with no clear error in the UI, just a red status line in the transfer log.

2. Package/plan limits don't match

If the destination's hosting package caps disk space, email accounts, or databases below what the source account actually uses, WHM will restore what it can and silently skip or truncate the rest. This is the single most common cause of "email is missing" after a transfer — the account got restored under a package with a lower mailbox limit.

3. Version mismatch between servers

Restoring a MySQL 8 dump onto a server still running MySQL 5.7, or a PHP 8.2 account onto a server that only has 7.4 installed, restores the files fine but leaves the site broken until you fix the PHP/MySQL version on the new account manually.

4. DNS and mail don't move at the same moment

The account transfer itself takes minutes. Updating nameservers or A records, and having that change propagate, takes hours. If you flip DNS before verifying the new account is fully working, or you flip it and forget the old server is still receiving mail during propagation, messages sent in that window can bounce or get delivered to the wrong box.

Fix: Running a Clean Transfer Step by Step

Step 1 — Check destination capacity first

Before queuing anything, SSH into the destination and check free disk space against the source account's actual usage:

df -h /home
du -sh /home/username

Leave real headroom — at least 1.5x the account size — not just barely enough to fit the compressed archive.

Step 2 — Match or exceed the source package limits

In WHM, check the source account's package under List Accounts, then either use the same package name on the destination or create one with equal or higher limits before you transfer. The Transfer Tool interface lets you remap which package a restored account lands under — don't leave it on a default that's smaller than what the account needs.

Step 3 — Queue the transfer with the right options

In WHM: Transfers > Transfer Tool, add the source server (hostname, root credentials or API token, port), select the accounts, and before you hit start, check these boxes:

  • Restore to same account name unless you specifically need to rename
  • Skip existing accounts only if you're re-running a partial transfer, otherwise it can leave stale data mixed with new
  • Leave DNS as-is on the destination for now — don't let the tool touch live DNS until you've verified the account

Run it in small batches (5-10 accounts at a time) rather than all 200 at once. A batch failure is much easier to diagnose than digging one broken account out of a 200-account job.

Step 4 — Verify before touching DNS

On the destination, before changing a single nameserver, confirm the account actually works:

  • Edit your local hosts file to point the domain at the new server's IP and load the site directly
  • Log into the new account's webmail or an email client using the new server's mail settings to confirm mailboxes and messages came across
  • Check Cron Jobs in the restored account's cPanel against the original

Step 5 — Cut over DNS with a short TTL

Drop the domain's A record TTL to 300 seconds a day ahead of the cutover if you can. Then update the A record (or nameservers) and keep the old server running, untouched, for at least 48 hours — that's your safety net if propagation is slow or something surfaces late. Only decommission the old server once mail flow and site traffic have clearly moved to the new IP in your access logs.

Common Transfer Tool Errors

Error / SymptomLikely CauseFix
"Insufficient disk space" mid-restoreDestination doesn't have 2x account size freeFree up space or resize the volume before retrying
Transfer shows complete, mailboxes emptyDestination package's email account limit was lower than source usageRaise the package limit, re-run transfer for that account only
Site loads but shows a database errorMySQL version mismatch or database user privileges not restoredCheck MySQL error log, re-grant privileges via phpMyAdmin or WHM's MySQL page
Job hangs at a fixed percentageSSH connection to source dropped, or one huge file (large backup, log) is still streamingCheck the transfer log for the specific account, retry that account alone
Mail bounces for a few hours post-cutoverMX records still pointed at old server during propagation windowKeep old server's mail queue running during the TTL window; don't shut it down early

Prevention: Make the Next Transfer Boring

  • Always run a test transfer of one small, low-risk account first before queuing the rest
  • Match PHP and MySQL versions on the destination to the source before transferring, not after
  • Keep the source server alive and untouched for 48+ hours after cutover
  • Document package limits on both servers side by side so nothing gets silently downgraded

Done this way, the Transfer Tool genuinely is the fastest, cleanest way to move cPanel accounts between servers — the failures almost always trace back to a mismatched package limit or disk space, not the tool itself.

Frequently asked questions

Does WHM's Transfer Tool move email messages, or just mailbox configuration?

It moves the actual mail stored on the account's disk under the mail directory, not just the account settings, as long as you're using full account transfer rather than a partial or files-only option. If mail seems missing afterward, check whether the destination package's email limits were lower than the source's actual mailbox count first.

Can I use the Transfer Tool between two different WHM/cPanel versions?

Yes, within reason — cPanel supports transfers across recent version differences, but a large version gap (several major versions apart) increases the odds of restore warnings for things like PHP handlers or Apache config. Check cPanel's compatibility notes for your specific source and destination versions before a big batch.

How long should I keep the old server running after a transfer?

At least 48 hours after DNS cutover, and longer if your domain's previous TTL was high. This covers slow DNS propagation and gives you a fallback if an issue only shows up under real traffic.

Why did only some email accounts transfer, not all of them?

This is almost always a package limit mismatch — the destination account's hosting package capped the number of email accounts below what the source actually had. Raise the limit on the destination package and re-run the transfer for that account.

Is the Transfer Tool safe to run on a live, in-use account?

Yes — pkgacct reads the account without taking it offline, so the source keeps serving traffic and mail during the copy. The risk isn't the copy itself, it's cutting DNS over before you've verified the destination account is fully working.

#whm #transfer-tool #cpanel #server-migration #pkgacct #dns

Keep reading

Chat with Support