
Nightly full backups are a blunt instrument. They hammer disk I/O, eat space fast, and make restores feel like a waiting room. This cPanel incremental backups tutorial walks through a cleaner 2026 setup: JetBackup in WHM, practical retention rules, offsite storage, and restore checks you can trust.
What you’ll build (and what you’ll avoid breaking)
- Incremental backups (account files, databases, email) with short RPO and predictable storage growth
- Retention by backup type (hourly/daily/weekly) instead of one giant “keep 7” rule
- Remote backup targets with encryption and bandwidth limits
- Restore drills that confirm you can recover a single file, mailbox, database, or full account
If you want fewer surprises during maintenance windows, pair this with safe maintenance-mode update habits. It helps prevent backup jobs from colliding with major updates.
Prerequisites checklist (WHM + server sizing)
Handle these basics before you install anything. They decide whether backups run quickly or break incremental chains.
- Root WHM access (or a reseller with the right privileges)
- Disk headroom: aim for 20–30% free space on the backup staging volume
- Stable time sync: NTP/chrony working (timestamps matter for incremental chains)
- Reliable DNS and outbound connectivity to your remote target
Incrementals reduce storage growth. They still need decent IOPS.
If you host multiple cPanel accounts or large mailboxes, NVMe makes a real difference. A properly sized HostMyCode VPS can cut a backup window from hours to minutes.
Install JetBackup in WHM (the clean way)
You can install JetBackup through WHM’s plugin system or the vendor installer. Licensing can change the exact prompts. The safe order stays the same: install, activate, then set destinations and schedules before the first run.
- Log into WHM as root.
- Install JetBackup (Plugin/installer as provided by your license).
- Open JetBackup 5 from WHM’s left menu.
- Verify the service is running and shows the server hostname correctly.
Quick diagnostic: after install, confirm core services stay stable. If load spikes or PHP workers stall, check your baseline monitoring before blaming backups.
HostMyCode’s guide on uptime and resource alerts pairs well with schedule tuning.
Pick a backup storage model that won’t fill your disk
Incrementals still need a landing zone. When possible, keep backup writes off the same volume that serves customer data.
- Best: dedicated backup volume mounted to something like
/backupor/jetbackup - OK for small servers: local staging + remote target (keep local retention short)
- Avoid: only local backups on the same disk as
/home
On a dedicated server, a separate NVMe device (or a RAID1 pair) works well for staging. On a VPS, adding a secondary volume is usually easier than recovering from a full root filesystem later.
Configure local backup destinations (paths, permissions, and quotas)
Create a local destination first. Even if your long-term plan is “everything offsite,” local restore points speed up day-to-day recoveries.
- Create or mount a directory, for example:
mkdir -p /backup/jetbackup
chown root:root /backup/jetbackup
chmod 700 /backup/jetbackup
- In JetBackup: Destinations → Add Destination → Local
- Set the path to
/backup/jetbackup - Set a local retention that matches your disk reality (often 3–7 daily incrementals)
Pitfall: don’t place the destination under /home. If an account fills the disk, backups fail when you need them most.
Set up remote storage (S3-compatible, SSH, or provider storage)
Offsite copies turn mistakes and compromises into routine recoveries. Choose a target your server can reach reliably from its network.
- S3-compatible object storage: good for scale and cost control
- SSH/SFTP destination: straightforward and easy to audit; great for another VPS as a backup node
- Provider backup vault: acceptable if you also keep an independent copy elsewhere
If you use object storage, keep credentials minimal and rotate them. HostMyCode’s WHM walkthrough covers the essentials: ship backups to S3-compatible object storage safely.
Scheduling: build an RPO plan that matches real hosting incidents
Incrementals let you mix frequencies by data type. That flexibility helps. It also makes it easy to over-schedule and slow the server.
| Data type | Suggested schedule | Why |
|---|---|---|
| Account files (web) | Daily incremental + weekly full | Most sites can tolerate 24h content loss; weekly full keeps chains short |
| Databases | Every 6–12 hours (busy WooCommerce: 2–4 hours) | Orders and forms change often; tighter RPO reduces customer-impact |
| Every 6–12 hours | Mailbox restores are common after user mistakes | |
| System config | Daily snapshot/backup | Helps after updates, panel changes, or compromise cleanup |
Rule of thumb: if backups push the server above 1.0 load average per CPU core, adjust the plan. Dial back frequency, reduce concurrency, or move heavy jobs off-peak.
Don’t “fix” the issue by starving MySQL or Apache.
Retention rules: stop keeping everything forever
Retention is where backup plans quietly fail. Storage fills up, jobs start failing, and you find out during an outage.
A sensible starting point for hosting in 2026:
- Hourly (if used): keep 24–48 points
- Daily: keep 7–14
- Weekly: keep 4–8
- Monthly (optional): keep 3–6 for compliance/seasonality
Keep chains short: long incremental chains slow restores. They also raise the blast radius of one bad point. A weekly full backup is often the sweet spot.
Performance tuning: reduce I/O spikes and keep sites responsive
Backups compete with production workloads for CPU and disk. You can’t remove that competition. You can limit the impact.
- Throttle bandwidth for remote transfers so you don’t saturate the NIC.
- Limit concurrent backup tasks (especially on smaller VPS plans).
- Exclude junk paths that churn constantly and don’t belong in backups (cache directories, temporary sessions).
On WordPress-heavy servers, exclude cache directories where it’s safe (plugin-dependent). Don’t exclude wp-content/uploads or other user-generated content.
Quick diagnostic commands:
# Disk I/O pressure
iostat -xz 1 10
# Memory and load during backup windows
vmstat 1 10
# Top processes by I/O (install if needed)
apt-get update && apt-get install -y iotop
iotop -oP
If backup windows keep colliding with customer traffic, stop tuning at the margins. Consider managed VPS hosting so someone else handles platform tuning while you manage accounts and client work.
Security: protect backup data like production data
Backups often include database dumps, config files, and mailboxes. Treat them like your most sensitive dataset. In practice, they usually are.
- Encrypt at rest (on the destination or through storage provider features)
- Encrypt in transit (TLS to object storage; SSH keys for SFTP/SSH)
- Restrict access (root-only local directory; minimal IAM policy for object storage)
- Separate credentials per server so one compromise doesn’t expose all backups
While you’re tightening backup automation, don’t leave WHM logins exposed. If you haven’t already, enable cPanel two-factor authentication.
Run your first backup job (then validate the output)
After you set destinations, schedules, and retention, run a manual backup for one test account. Watch the logs and confirm the output matches what the account actually contains.
- In JetBackup: pick a small cPanel account you control.
- Run a backup for files, databases, and email.
- Confirm the job completed and the backup set appears under the account’s restore points.
Don’t stop at the green checkmark. Browse the backup content and sanity-check sizes. If a 30 GB account “backs up” to 200 MB, suspect exclusions, permission issues, or skipped data.
Restore drills: test the three restores you’ll actually need
If you haven’t tested restores, you don’t have a backup plan. Run these drills now, while the configuration details are still fresh.
1) Restore a single website file
- Create a known file in the account:
public_html/restore-test.txt - Back up the account.
- Delete the file.
- Restore just that file from JetBackup and confirm permissions/ownership are correct.
2) Restore a mailbox or a single email folder
- Create a test mailbox and send a few messages.
- Back up email data.
- Delete messages or the folder.
- Restore mailbox content and confirm it appears via webmail/IMAP.
3) Restore a database safely
Database restores are where people accidentally overwrite live data. Move slowly and control the target.
- Take a maintenance window or clone the site to staging first.
- Restore the database from JetBackup.
- Load the site and confirm recent writes match the restore point timestamp.
If you want a broader “restore-first” approach (especially useful for resellers), follow this runbook structure: build a restore-first disaster recovery runbook.
Operational checklist: keep incremental backups healthy month after month
- Weekly: confirm last successful job time for files/db/email; spot-check one restore point
- Weekly: check backup destination free space and growth trend
- Monthly: run a full-account restore test to a non-production account or staging server
- Monthly: rotate/verify remote storage credentials and access policy
- After major changes: new PHP handler, mail routing changes, or migrations → run a restore drill
If disk usage keeps creeping up, don’t guess. Use a structured cleanup process and confirm what’s growing.
This tutorial helps you reclaim space without taking sites down: shrink logs and prevent disk-full outages.
Troubleshooting common JetBackup problems (fast fixes)
Backups complete, but remote uploads fail
- Confirm outbound firewall rules and DNS resolution.
- Check time drift (TLS failures can be clock-related).
- Verify IAM permissions (object storage) or SSH key access (SFTP/SSH).
Backups are slow and load spikes during business hours
- Lower concurrency and move schedules off-peak.
- Reduce database frequency for low-change sites; keep high-change stores tighter.
- Move staging to a separate disk/volume if available.
Restores succeed but files have wrong permissions
- Confirm your account uses standard ownership (not manually changed to root).
- Run a permissions repair only on the affected account; don’t apply broad chmod changes blindly.
Summary: a backup plan that behaves under pressure
JetBackup incrementals give you more restore points with less storage waste than nightly full archives. Schedule backups based on how the data changes. Keep chains short with a weekly full. Push at least one copy offsite.
Then prove it works with regular restore drills.
If you want this setup on infrastructure sized for backup I/O and steady growth, start with a HostMyCode VPS. Move up to dedicated servers for multi-tenant cPanel hosting where backup windows can’t degrade customer sites.
If you’re building a cPanel server that needs reliable incremental backups, run it on storage and CPU with room to breathe. HostMyCode offers VPS hosting for lean single-server setups and managed VPS hosting when you want help handling day-2 admin work.
FAQ
Do incremental backups replace full backups?
No. Use incrementals for frequent restore points, and schedule a regular full (often weekly) to keep restore chains short and predictable.
How many restore points should I keep for cPanel hosting?
For most shared/reseller-style hosting: 7–14 daily points plus 4–8 weekly. Add a small hourly window only for high-change stores or mail-heavy teams.
Should I store backups on the same server?
Keep a short local retention for fast restores, but always push a copy offsite. Same-server-only backups fail during disk loss, filesystem corruption, or total compromise.
What’s the simplest restore test that proves the setup works?
Restore a single file, a mailbox folder, and one database to a controlled target. That combination catches most configuration mistakes early.
Can I use another VPS as a backup node?
Yes. An SSH/SFTP destination to a separate VPS works well, especially if you isolate access and apply tight firewall rules. It’s also easy to verify restores without vendor lock-in.