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']); ?>
Shown once. Refreshing this page will not show it again.
$config_backup_key = '<32 random characters>'; to it yourself.
Just the SQL dump. Much smaller and much quicker, but no attachments or documents.
StartThe credential vault key. Only needed if every user password is lost - a normal restore recovers the vault on its own.
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 run daily at = escapeHtml(substr((string)$backup_job['cron_job_daily_at'], 0, 5)) ?>. Scheduled backups are switched off. Turn them on or change the time in Maintenance > 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 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:
= escapeHtml("php " . dirname(__DIR__) . "/scripts/restore_cli.php --file=/path/to/backup.zip") ?>
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.