Migrate your website to VirtualCloud
You can move a site without your visitors noticing: copy it, test the copy on our server, and only then point the domain at us. Our engineers will do all of it for free, or you can do it yourself with one of the three methods below. Either way, keep your old hosting running until the move is finished.
Before you start
- Your VirtualCloud account is active and you can log in to cPanel (or SSH, on a VPS).
- Access to the old host: its control panel, or SFTP plus the database name, user and password from the site's config file.
- A list of what's moving: domains and subdomains, databases, mailboxes, cron jobs and anything tied to the old server's IP.
Pick a website migration method
| Method | Best for | Moves email? | Your time |
|---|---|---|---|
| 1. Free migration | Any site from almost any host, done by our engineers | Yes, synced over IMAP | About 10 minutes |
| 2. cPanel backup | Moving from another cPanel host | Mail folders, yes | 30–60 minutes |
| 3. WordPress plugin | A single WordPress site from any host | No | 30–60 minutes |
| 4. Manual copy | Custom PHP and MySQL sites, or non-cPanel hosts | No | 1–2 hours |
Not sure? Let us do it. The DIY methods below are here for people who like to stay hands-on. The free service costs nothing extra, moves mail too, and the site is tested before anything changes for your visitors.
Option 1: Let our engineers move it, free
Free migration covers unlimited cPanel-to-cPanel sites on web, WordPress and reseller hosting, and one site or server with a VPS. Fill in the migration request form with your domains, the old host and roughly what's moving. We open a ticket and confirm the scope there.
- Access is arranged on the ticket, never by email or chat. A fresh cPanel backup you upload, or a temporary login you remove afterwards, keeps your main password private.
- Timing: one cPanel site within 24 hours, up to ten within 48 hours, larger or non-cPanel moves in a window agreed with you. The clock starts once access works.
- Tested before DNS moves: we check the copy on a temporary URL, you check it too, and the domain switches only when you say go.
Option 2: Move a cPanel account with a backup
A full cPanel backup contains everything: files, databases, mail, DNS zones and settings. Restoring a full backup needs WHM access, so on shared hosting you restore a cPanel backup in parts, or upload it and let us restore it in one go.
-
Download the backups from the old host
In the old cPanel, open FilesBackup. Under Partial Backups, download the Home Directory, each MySQL database, and the Email Forwarders and Email Filters. Want us to do the restore? Choose Download a Full Account Backup instead and wait for the email saying it's ready.
-
Restore them in your new cPanel
Open cPanelFilesBackup on VirtualCloud and use the matching Restore buttons: home directory first, then each database, then forwarders and filters. The home directory includes your mail folders. Afterwards, check EmailEmail Accounts and recreate any mailbox that's missing, using the same address.
-
Recreate database users
The database backup holds the data but not the user and password your site logs in with. In cPanelDatabasesMySQL Databases, create a user, add it to the database with All Privileges, and update your site's config file. Names now start with your new cPanel username, for example yourus3r_shop.
On a VPS or reseller plan with WHM, WHMTransfersTransfer Tool can pull whole accounts straight from another cPanel server, and Restore a Full Backup/cpmove File restores a backup file in one go, if your WHM access includes it.
Option 3: WordPress: use a migration plugin
Plugins such as Duplicator, All-in-One WP Migration or Migrate Guru package the whole site, files and database, and rewrite its URLs on arrival. Each works slightly differently, but the pattern is the same:
-
Prepare the new account
Add the domain in cPanel and, if the plugin needs an existing WordPress to import into, install a blank one with Softaculous. Large sites may need a higher upload limit; see raising PHP limits.
-
Export from the old site
Turn off caching and security plugins that might block the export, then create the package. Check the plugin's free-tier size limit before you start on a large site.
-
Import, then tidy up
Import the package on the new site and log in with your old admin details. Then open SettingsPermalinks and click Save to rebuild the rewrite rules, and purge the LiteSpeed cache.
Option 4: Copy files and database by hand
This works for any PHP and MySQL site from any host. If the old host offers SSH, export the database and pack the files there. Otherwise use phpMyAdmin's Export and download the files over SFTP with a client such as FileZilla.
# On the old server: export the database and pack the site's files
mysqldump --single-transaction --no-tablespaces -u olduser -p olddb | gzip > site.sql.gz
tar -czf site-files.tar.gz -C ~/public_html .
On VirtualCloud, create the database and user with cPanelDatabasesMySQL Database Wizard, upload both files to your home directory, then unpack and import them from the cPanel Terminal:
tar -xzf ~/site-files.tar.gz -C ~/public_html
gunzip < ~/site.sql.gz | mysql -u yourus3r_wpuser -p yourus3r_wp
# Standard permissions: folders 755, files 644
find ~/public_html -type d -exec chmod 755 {} \;
find ~/public_html -type f -exec chmod 644 {} \;
Finally, point the site at its new database. For WordPress, edit these lines in wp-config.php; other apps keep the same four values in their own config file, often .env or config.php:
define( 'DB_NAME', 'yourus3r_wp' );
define( 'DB_USER', 'yourus3r_wpuser' );
define( 'DB_PASSWORD', 'the-password-you-set' );
define( 'DB_HOST', 'localhost' );
Test the copy, then switch DNS
-
Preview the new site from your own computer
Your hosts file lets one computer see the new server while everyone else still sees the old one. Open it as administrator (
C:\in Notepad on Windows,Windows\ System32\ drivers\ etc\ hosts sudo nano /etc/hostson macOS and Linux) and add a line with your new server's IP from cPanel:203.0.113.24 yourdomain.in www.yourdomain.inClick through the home page, inner pages, forms, admin login and checkout. The browser will warn about the certificate, because AutoSSL can't issue one until DNS points to us; that's expected at this stage. Prefer not to edit system files? Ask us on a ticket for a temporary URL.
-
Prepare the switch
A day ahead, lower the TTL on your domain's records to
300so the change spreads quickly (see DNS records explained). Right before the switch, pause anything that writes to the old site, such as orders, comments or form entries, or plan a final database export once DNS has moved. -
Point the domain at VirtualCloud
Change the nameservers or the A record, as described in Point your domain to VirtualCloud, and remove the hosts-file line so you see what everyone else sees.
After the move. Confirm the free certificate issued and HTTPS is forced (Turn on free SSL). Match the PHP version the site ran on before. Recreate cron jobs in cPanelAdvancedCron Jobs. Check EmailEmail Deliverability for SPF and DKIM. Update payment-gateway webhooks or IP allow-lists that named the old server.
Keep the old hosting for at least a week. Some visitors' providers cache DNS for up to 48 hours, and mail can keep arriving at the old server meanwhile. Take a final backup from the old host before you cancel it.
Troubleshooting
"Error establishing a database connection"
The config file doesn't match the new database. Check all four values, including the yourus3r_ prefix on the database and user names. Then confirm in cPanelDatabasesMySQL Databases that the user is added to the database with All Privileges.
500 Internal Server Error after the move
The old host's .htaccess often carries lines that only made sense there, such as AddHandler application/x-httpd-ea-php74 or php_value settings. Comment them out with #, set the PHP version in cPanel instead, and check error_log in the site's folder.
The site redirects to the old domain or a temporary address
WordPress still stores the old address. Update it with WP-CLI, which handles serialised data safely; a plain SQL find-and-replace would corrupt it:
wp search-replace 'old-address' 'https://yourdomain.in' --skip-columns=guid --dry-run
Run it again without --dry-run once the preview looks right.
phpMyAdmin says the import file is too large
Import over the Terminal with the gunzip … | mysql command above, which has no upload limit. Or raise upload_max_filesize and post_max_size for a one-off import and lower them again afterwards.
Emails sent during the switch are missing
They were delivered to the old server before DNS caught up. Add the old mailbox to your mail app as a second account and drag the messages across, or ask us on a ticket to run an IMAP sync from the old server.
Was this guide helpful?Your answer stays in this browser; nothing is sent unless you write to us below.
Related guides
All 16 guidesStill stuck? Ask an engineer.
Tickets and email are answered 24/7 in English and Hindi. Tell us the domain, where it's moving from and which step you're on, or hand the whole move to us for free.