//Web Panel

Zero‑Downtime Migration: cPanel to Plesk Made Simple

Learn how to migrate cPanel websites and databases to Plesk on a Linux VPS with zero downtime using backups, rsync and DNS TTL tricks.

6 min read
Zero‑Downtime Migration: cPanel to Plesk Made Simple

Moving a website from one control panel to another can feel risky, especially when downtime is not an option. Whether you are switching from cPanel to Plesk to consolidate servers, use different features, or follow a client's preference, a well-planned migration can be completed without interrupting visitors or breaking applications. This guide shows how to migrate web accounts and databases from cPanel to Plesk on a typical Linux VPS (CentOS 7/8 or AlmaLinux 8) with zero downtime. The process is divided into preparation, data export, transfer, import, DNS switchover, and final verification.

1. Preparation – Build a Parallel Plesk Environment

Set up a fresh Plesk instance on a separate IP address or a temporary virtual host before touching the live site. Keeping the original cPanel server untouched ensures that users can still reach the site while you work.

  • Provision a new VPS with the same OS version as the current server (e.g., AlmaLinux 8). Install Plesk using the official one-click installer:
# Install Plesk on AlmaLinux 8
wget https://autoinstall.plesk.com/plesk-installer
chmod +x plesk-installer
./plesk-installer --all-versions --select-product-id=plesk --select-release-current

The installer detects the OS, adds the required repositories, and pulls the latest stable Plesk release.

  • Synchronise PHP, Apache/Nginx, and MySQL versions with the source server to avoid compatibility issues.
# Example: install PHP 7.4 on AlmaLinux 8
dnf module reset php
dnf module enable php:7.4
dnf install php php-mysqlnd php-fpm

After installation, log into the Plesk web UI (https://NEW_IP:8443) and create a subscription (domain) that mirrors the one on cPanel. Do not add any content yet.

2. Export Accounts and Databases from cPanel

cPanel offers built-in tools for backing up accounts. Using the command line gives you more control and makes the process scriptable.

2.1. Create Full Account Backups

Run the following on the cPanel server (CentOS 7/8). The command creates a compressed tarball for each account in /home and stores it in /backup.

# Create a backup for user "exampleuser"
/scripts/pkgacct exampleuser /backup

The script /scripts/pkgacct packages the user's home directory, email, MySQL databases, and Apache configuration into a single file named exampleuser.tar.gz. Repeat the command for every account you need to migrate.

2.2. Export Individual MySQL Databases (Optional)

If you prefer to handle databases separately, use mysqldump. This is useful when you want to import them into existing Plesk databases.

# Export a single database
mysqldump -u root -p exampledb > /backup/exampledb.sql

Replace exampledb with the actual database name. You will be prompted for the MySQL root password.

3. Transfer Data to the Plesk Server

Securely copy the backup files to the new server. rsync over SSH preserves permissions and can resume if the transfer is interrupted.

# From the cPanel server
rsync -avz -e ssh /backup/exampleuser.tar.gz root@NEW_IP:/tmp/

Repeat for each backup file. You may verify the integrity of the transferred files with sha256sum if desired.

4. Import Accounts and Databases into Plesk

4.1. Use Plesk's Migration Tool (Recommended)

Plesk includes a migration component that reads cPanel backups directly, automating many tedious steps.

  1. Log into Plesk as admin.
  2. Navigate to Tools & Settings > Migration & Transfer Manager.
  3. Click Import from cPanel and provide the path to the uploaded .tar.gz file (e.g., /tmp/exampleuser.tar.gz).
  4. Map the cPanel user to a new Plesk subscription, choose the target PHP version, and confirm the import.

The tool extracts the website files to /var/www/vhosts/example.com/httpdocs, creates the corresponding MySQL databases, and restores email accounts.

4.2. Manual Import (When the Migration Tool Is Unavailable)

If you need to import manually, follow these steps for each account.

# Extract the backup on the Plesk server
cd /tmp
tar -xzvf exampleuser.tar.gz -C /tmp

# Copy website files
cp -a /tmp/exampleuser/public_html/* /var/www/vhosts/example.com/httpdocs/

# Set correct ownership (Plesk uses the system user "example.com")
chown -R example.com:psacln /var/www/vhosts/example.com/httpdocs

# Import each MySQL dump
for sql in /tmp/exampleuser/*.sql; do
    dbname=$(basename "$sql" .sql)
    # Create the database in Plesk (Plesk CLI)
    plesk bin database --create $dbname -type mysql
    # Import data
    mysql -u admin -p"$PLESK_ADMIN_PASS" $dbname < "$sql"
done

Replace example.com with the actual domain name. The loop creates a Plesk database for each .sql file and loads the data.

5. DNS Switchover – Keep Traffic Flowing

To achieve zero downtime, change DNS records only after the new server is ready to serve content.

  • Lower the TTL (Time-to-Live) on the domain's A record to 300 seconds (5 minutes) at least 24 hours before the migration. This ensures resolvers pick up the new IP quickly.
  • When the Plesk site is verified (see the next section), edit the DNS zone to point the A record to the new server's IP address.
  • Keep the old cPanel server running for a short overlap period (e.g., 30 minutes) to catch any stray requests that still resolve to the old IP.

6. Verification and Cut-Over Checklist

Before declaring the migration complete, run through this checklist on the Plesk server:

  1. Website rendering: Open the site in a private browser window using the new IP (e.g., http://NEW_IP) and verify that pages load, CSS/JS assets are present, and forms submit correctly.
  2. Database connectivity: Execute a quick query against each imported database to confirm tables and data are intact.
  3. Email functionality: Send and receive test emails for each account. Ensure IMAP/POP3 and SMTP ports are open and that SPF/DKIM records (if managed in Plesk) match the previous configuration.
  4. SSL certificates: If the site uses HTTPS, install the existing certificate in Plesk (or obtain a new one via Let's Encrypt). Verify that the certificate chain is trusted.
  5. Permissions and scripts: Check that PHP scripts have the correct execution permissions and that cron jobs are recreated (Plesk > Scheduled Tasks).

Once all items pass, update the DNS A record as described in Section 5. Monitor traffic for the next few hours using server logs or analytics. If any issue appears, you can quickly revert by restoring the original TTL and pointing the record back to the cPanel server.

Conclusion

Moving from cPanel to Plesk does not have to cause interruptions. By provisioning a parallel Plesk environment, exporting accounts with cPanel's pkgacct tool, using Plesk's built-in migration feature (or a manual import when needed), and carefully managing DNS TTL, you can migrate web files and databases with virtually no downtime for end users. Treat the migration as a staged process—prepare, copy, verify, then switch DNS—so you always have a fallback. Indian developers and businesses can transition smoothly while keeping their sites and applications online.

cpanelplesklinuxwebhostingdatabasemigrationzerodowntimeservermigration

Try it on your own server

Follow along on a Cloud VPS with full root access, or read the step-by-step knowledge base guides.

Guides: VPS for WordPress · Node.js hosting · VPS or dedicated server · Paying by UPI