Skip to content

Backup & Restore

The Admin Menu > Backup & Restore page creates and restores backups without leaving the CMS Admin. It has two sections:

  • Website Backup — a single zip of your entire web root and data folder, with a database dump included by default. Useful before upgrading or moving servers.
  • Database Backup — an SQL dump of the CMS tables only, saved to the data folder’s backups/ directory.

All backup, restore, and download actions on this page are recorded in the audit log.

Enter an optional backup name and click Create Backup. The CMS zips the web root and the data folder, then creates a database dump and adds it to the zip under the data folder’s backups/ path.

Website backups require the PHP ZipArchive extension and are allowed up to 10 minutes to run.

Backup Name

Optional text appended to the backup filename. Lowercased, with invalid characters replaced by dashes. If left blank, a random 5-digit number is appended instead so filenames are harder to guess when saved under the web root.

Skip database backup

Skips the database dump. Backups created this way get a -noDB marker in the filename and don’t count as a current backup for the website Restore button.

Save to web root

Saves the zip inside the web root instead of the default location, the web root’s parent directory. Checked automatically when the parent directory isn’t writable.

Backups are named _backup-{YYYYMMDD-HHMMSS}-{hostname}[-noDB]-{name}.zip, e.g. _backup-20260827-153000-example.com-pre-upgrade.zip. The Backup Details section shows a live size estimate of all files and the database, free disk space, the output directory and filename, and the list of excluded items.

  • Previous website backups (_backup-*.zip) and previous database backups (*.sql.php, *.sql.zip)
  • Symbolic links, unreadable files, and folders starting with a dot
  • Any folder containing an empty file named .cms-no-backup (create one to exclude a folder yourself)
  • wkhtmltopdf binaries (commonly bundled with the CreatePDF plugin)
  • Upload directories located outside both the web root and the data folder. These appear in the excluded list so you know to back them up separately

The Previous Backups dropdown lists _backup-*.zip files found in the web root and its parent directory, newest first. Download saves the selected zip to your computer; Restore extracts it over the current installation.

  1. Create a fresh Website Backup first. The Restore button is disabled whenever data has changed since your last backup (backups made with Skip database backup don’t qualify).

  2. Select a backup and click Restore. A confirmation dialog warns that the restore replaces files only (the database must be restored separately) and that a failed restore may require manual recovery over FTP.

  3. Extraction overwrites existing files with the archived versions. Files created since the backup are left in place, and the database dump inside the zip lands in the data folder’s backups/ directory.

  4. Restore the database dump under Database Restore below.

Select an option to back up and click Backup:

all database tables (exclude skipped)

The default. Backs up all CMS tables except the skipped list below.

all database tables (include skipped)

Backs up every CMS table, including the normally skipped log and session tables.

single table

Any individual section table can be selected for a single-table backup. Single-table backups get the table name appended to the filename and don’t count as a current backup for the Restore button.

Skipped by default (transient log and session data): _cron_log, _error_log, _outgoing_mail, _nlb_log, _log_audit, and _sessions. Plugins can change this list via the backupDatabase_skippedTables filter.

Backups are saved to the data folder’s backups/ directory. The exact path is shown on the page. Files are named {hostname}-v{version}-{YYYYMMDD-HHMMSS}.sql.php and compressed to a .sql.zip when ZipArchive is available (the dropdown hides the random suffix added to zip filenames). The dump uses #TABLE_PREFIX#_ placeholders in place of the actual table prefix, so it can be restored into an installation with a different prefix, and begins with a PHP die() line so the file can’t be executed if requested directly. Tables are dumped inside a consistent-snapshot transaction, so a backup taken on a live site is internally consistent.

If uncompressed .sql.php backups exist, a Zip uncompressed backups link appears below the restore controls to compress them in place.

The Database Restore dropdown lists backup files (.sql.php and .sql.zip) in the data folder’s backups/ directory, newest first. To restore a backup from another server, upload the file into that directory and it appears in the list. Download saves the selected file to your computer.

  1. Create a fresh Database Backup first. The Restore button is disabled whenever data has changed since your last full-database backup.

  2. Select a backup and click Restore. A confirmation dialog warns that the backup data will overwrite existing data.

  3. The restore runs incrementally: statements are executed in batches with the browser reloading between batches, showing a progress percentage. This avoids PHP timeouts and memory limits on large databases. Zipped backups are extracted automatically (requires ZipArchive). Each table in the backup is dropped and recreated.

  4. On completion, the CMS re-creates any schema tables and fields missing from the backup and reports the restored filename and elapsed time.

Restoring a backup during installation (the Restore From Backup tab) is a separate flow; see Moving Servers.

Documents CMS Builder 3.83