Skip to content

Account Backups

A CorePanel backup captures a whole account: its home directory, its databases, its domains and subdomains, its FTP accounts and its mailboxes, plus the account’s own identity and limits. The result is a single .tar archive that can rebuild the account from scratch.

It is, deliberately, the inverse of the cPanel importer: the same idea of a self-describing archive, in the other direction.

ResourceCaptured
Home directoryEvery file the account owns, with ownership and permissions
MySQLEach database, dumped, plus its users and their grants
DomainsPrimary, aliases and addon domains, with their serving modes and settings
SubdomainsWith their document roots
MailboxesAccounts and their mail
FTP accounts
The account itselfuid/gid, home path, PHP version, package reference and every limit

A manifest.json at the root of the archive indexes all of it, so an archive can be inspected — and a restore planned — without unpacking it first.

Backups → Create backup, pick the account, and the job starts in the background. The job list shows progress and, when it finishes, a per-resource report of what was captured and what was not.

From the CLI:

Terminal window
corepanel account backup <username>

Archives are written to /var/lib/corepanel/backups on the server.

The Schedules tab defines recurring backups.

FieldNotes
NameHow the schedule appears in the list
ScopeA single account, or all accounts on the server
Frequencydaily (02:00), weekly (Sundays 02:00), monthly (1st, 02:00), or a custom five-field cron expression
Retention — keepMaximum number of archives to keep. 0 = no limit
Retention — daysDelete archives older than N days. 0 = no limit
EnabledA disabled schedule stays defined but does not fire

A server-wide schedule runs a bounded number of accounts at a time rather than starting one job per account at once — a full backup is a heavy mysqldump plus a large tarball, and firing hundreds in parallel would take the server down.

Run now executes a schedule immediately, which is the right way to verify one before trusting it.

Restore takes an archive and rebuilds the account: system user (with its original uid/gid and home path), files, databases and users, domains, subdomains, mailboxes and FTP accounts.

Two options shape the run:

OptionEffect
Dry runReports everything the restore would do, and every conflict it would hit, without writing anything
On conflictabort (default) stops at the first collision; skip restores everything that does not collide and reports the rest

Always dry-run a restore onto a server that already hosts things. A domain name is unique across the whole server, so an existing domain is the most common collision.

The account’s password — for the panel and for FTP — is preserved when the archive carries a recoverable hash, so the customer’s credentials keep working. When it does not, the account is restored with a random password and the report says a reset is required.

MySQL users are recreated with their original credentials where the hash can be recovered. A user whose password cannot be recovered is skipped and reported rather than recreated with a random password — recreating it would silently break the application that connects with it.

A failure in one resource does not abort the whole run: it downgrades the job to partial and is recorded in the report. You get an account that mostly came back plus an explicit list of what did not, instead of an all-or-nothing failure.

Backup archives are not deleted when an account is deleted. That is the point of a backup: it must outlive what it describes. Restoring a deleted account is the ordinary restore flow, with no collisions to worry about.

Copy the archive to the target server and restore it there. The account’s uid/gid, home path and limits come from the archive, and its hosting package is re-mapped by name if the ID differs on the target.

Plan DNS separately: the restore rebuilds the zones on the new server, but the domain keeps resolving to the old one until the delegation or the records change.

Backups are written to local storage on the server itself, unencrypted. Two consequences worth planning around:

  • Copy them off the server. A backup on the same disk as the account does not survive the failure it is there to protect against. rsync or rclone from a cron job is the usual answer.
  • Treat the backup directory as sensitive. An archive contains the account’s files, its databases and its mail.
Account backupWordPress restore point
ScopeThe whole accountOne WordPress instance
ContentsFiles, databases, domains, mail, FTPThat instance’s document root and database
HistoryGoverned by retentionThree per instance
Survives account deletionYesNo
PurposeDisaster recovery, migrationAn undo button for an update

Use restore points around risky updates. Use backups for everything else.