Cron - archives are built by the dispatcher, so a dead // crontab means the buttons below queue work that never runs $cron_is_running = $cron_last_dispatch_at !== null && (time() - strtotime($cron_last_dispatch_at)) < 300; $backup_job = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT cron_job_enabled, cron_job_daily_at FROM cron_jobs WHERE cron_job_name = 'backup'")); $backups = mysqli_query($mysqli, "SELECT * FROM backups ORDER BY backup_created_at DESC LIMIT 100"); $pending_count = intval(mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT(*) AS c FROM backups WHERE backup_status IN ('Pending','Running')"))['c']); ?>
Master encryption key

Shown once. Refreshing this page will not show it again.

No backup encryption key
ITFlow could not write a backup encryption key to config.php, so it cannot produce an encrypted backup. Make config.php writable by the web server user and reload this page, or add a line like $config_backup_key = '<32 random characters>'; to it yourself.
Cron is not running
Backups are built by the cron dispatcher, not by your browser. Until cron is running, anything you start here will sit in the queue. See Settings > Cron.
Cron is switched off in Settings > Notifications.

Create a Backup

0) { ?>
backup queued or building. You will get a notification when ready - this page does not refresh itself.
Full Backup

The database and everything in the uploads folder. This is the one to keep.

Start
Database Only

Just the SQL dump. Much smaller and much quicker, but no attachments or documents.

Start
Master Key

The credential vault key. Only needed if every user password is lost - a normal restore recovers the vault on its own.

Backups

Type Created Size Source Status Action
No backups yet.
0 ? escapeHtml(backupFormatBytes($backup['backup_size'])) : '-' ?>

Encryption Key

Write this down and keep it somewhere other than this server. Every backup is encrypted with it, and without it a backup cannot be restored - not by you, not by anyone. It is stored in config.php and never in the database, which is what stops a stolen backup from carrying its own key.

Archives are AES-256 encrypted zips. 7-Zip, WinZip, PeaZip and Keka can open them with this key. The unzip command, Windows Explorer and the macOS Archive Utility cannot - they do not support AES.

Scheduled Backups & Retention

0 disables age-based deletion.
The newest is never deleted.

Scheduled backups run daily at . Scheduled backups are switched off. Turn them on or change the time in Settings > Cron.

Old backups are removed by the nightly job, never by the backup itself, so a failed nightly cannot delete an archive that was never replaced.

Restoring

Restoring replaces the database and the uploads folder with what is in the archive. It cannot be done from here, on purpose - a running install is the wrong place to be dropping its own tables from a browser.

From the command line - the only option that works for large backups:

From a browser, on a fresh install only, the setup wizard has a restore step at /setup. Once an install has users, that step closes itself.