Overview
The CNPERP Backup Management System provides comprehensive data protection with both absolute and incremental backup capabilities, automated scheduling, and secure restore functionality.
Key Features
Backup Types
- Absolute Backups: Complete system snapshots
- Incremental Backups: Only changes since last backup
- Scheduled Backups: Automated with configurable frequency
Backup Components
- Full PostgreSQL database dump
- Application files and configurations
- SHA256 hash verification
- Automatic file compression
Management Features
- Complete backup history
- Real-time status monitoring
- Filter by type, status, date range
- Storage usage tracking
Restore Capabilities
- Selective restore (database, files, or both)
- Multiple confirmation steps
- Complete restore history tracking
- Safety checks before restore
Backup Storage Structure
backups/
+-- absolute/ # Full system backups
¦ +-- backup_absolute_20240101_120000_uuid.sql
¦ +-- files_absolute_20240101_120000_uuid.zip
¦ +-- uuid_backup_metadata.json
+-- incremental/ # Incremental backups
¦ +-- backup_incremental_20240101_120000_uuid.sql
¦ +-- files_incremental_20240101_120000_uuid.zip
¦ +-- uuid_backup_metadata.json
+-- logs/ # Backup operation logs
Creating Manual Backups
Via Web Interface
- Navigate to Admin Panel ? Backup Management
- Click "Create Backup" button
- Select backup type (Absolute or Incremental)
- Add optional description
- Choose backup options (include files, specific tables)
- Click "Create Backup"
Via API
# Create absolute backup
curl -X POST "http://localhost:8000/api/v1/backup/create" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-d '{
"backup_type": "absolute",
"description": "Weekly full backup",
"include_files": true
}'
# Create incremental backup
curl -X POST "http://localhost:8000/api/v1/backup/create" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-d '{
"backup_type": "incremental",
"description": "Daily incremental backup",
"include_files": false
}'
Scheduling Automated Backups
Via Web Interface
- Go to Backup Management ? Scheduled Backups tab
- Click "Schedule Backup" button
- Configure:
- Backup Type: Absolute or Incremental
- Frequency: Daily, Weekly, or Monthly
- Time: When to run (24-hour format)
- Description: Optional description
- Click "Schedule Backup"
Via API
# Schedule daily backup at 2 AM
curl -X POST "http://localhost:8000/api/v1/backup/schedule" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-d '{
"backup_type": "incremental",
"frequency": "daily",
"time": "02:00",
"description": "Daily incremental backup",
"include_files": true
}'
Restoring from Backup
Warning
Restoring from backup will overwrite existing data. Always confirm you have selected the correct backup before proceeding.
Via Web Interface
- Go to Backup Management ? Restore tab
- Select a completed backup from the list
- Click "Restore" button
- Choose restore options:
- Restore Database: Restore all database data
- Restore Files: Restore application files
- Confirm the restore operation
- Wait for restore completion
Via API
# Restore from backup
curl -X POST "http://localhost:8000/api/v1/backup/BACKUP_ID/restore" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-d '{
"restore_database": true,
"restore_files": false,
"confirm_restore": true
}'
Best Practices
- Daily: Incremental backups
- Weekly: Full absolute backups
- Monthly: Long-term archival backups
- Monitor available disk space
- Set retention policies (e.g., 30 days)
- Archive old backups to external storage
- Restrict backup access to authorized users
- Verify backup integrity regularly
- Test restore procedures quarterly
- Check backup completion status daily
- Verify file sizes are reasonable
- Test restore on non-production systems
Database Schema
Backup Records Table
CREATE TABLE backups (
id VARCHAR PRIMARY KEY,
backup_type VARCHAR NOT NULL, -- 'absolute', 'incremental', 'restore'
description TEXT,
status VARCHAR NOT NULL, -- 'in_progress', 'completed', 'failed'
file_path VARCHAR,
file_size INTEGER,
file_hash VARCHAR, -- SHA256 hash for integrity
metadata JSONB, -- Backup metadata
error_message TEXT,
created_at TIMESTAMP DEFAULT NOW(),
created_by VARCHAR NOT NULL,
completed_at TIMESTAMP
);
Backup Schedules Table
CREATE TABLE backup_schedules (
id VARCHAR PRIMARY KEY,
backup_type VARCHAR NOT NULL,
frequency VARCHAR NOT NULL, -- 'daily', 'weekly', 'monthly'
time VARCHAR NOT NULL, -- 'HH:MM' format
include_files BOOLEAN DEFAULT TRUE,
description TEXT,
is_active BOOLEAN DEFAULT TRUE,
last_run TIMESTAMP,
next_run TIMESTAMP,
created_at TIMESTAMP DEFAULT NOW(),
created_by VARCHAR NOT NULL
);