@extends('admin.admin_dashboard') @section('admin')
Home System Database backups Super Admin @if($stats['hourly_enabled']) Hourly schedule on @endif @if(session('success')) {{ session('success') }} @endif @if(session('error')) {{ session('error') }} @endif @if($migrationRequired ?? false) The backup module needs its database table before you can create snapshots.
@csrf

Or via SSH: php artisan migrate --force

@endif

Creates an on-demand snapshot of {{ $stats['database_name'] }}.

@if($stats['size_validation_enabled'] && $stats['previous_size_bytes'] > 0)
Size check enabled
New backup must be larger than {{ $stats['previous_size_human'] }} (from {{ $stats['previous_at_label'] }}).
@elseif($stats['size_validation_enabled'])
First backup has no size baseline. Later backups must grow larger than the previous file.
@endif
@csrf
@if($stats['size_validation_enabled'] && $stats['previous_size_bytes'] > 0)
@endif
@if($stats['uses_php_dump_only'] ?? false) PHP backup mode

This server has proc_open disabled, so backups use PHP via the live database connection (no mysqldump).

@endif Storage location

{{ $stats['storage_directory'] ?? '—' }}

Automatic hourly backups
  • Scheduler runs db:backup --scheduled every hour.
  • Requires cron: * * * * * php artisan schedule:run
  • Scheduled runs also pass the size validation.
Backup history
Manual and hourly scheduled snapshots
@forelse($backups as $backup) @empty @endforelse
Created Type File Size Method By Status Actions
{{ $backup->created_at->format('M j, Y') }}
{{ $backup->created_at->format('g:i A') }}
{{ $backup->filename }}
@if($backup->notes) {{ Str::limit($backup->notes, 60) }} @endif @if($backup->error_message) {{ Str::limit($backup->error_message, 100) }} @endif
{{ $backup->humanSize() }} {{ $backup->method }} {{ $backup->creator?->name ?? 'Scheduler' }}
@if($backup->isCompleted() && $backup->fileExists()) @endif
@csrf @method('DELETE')
@if($backups->hasPages()) @endif
@endsection