Backup Environment Variables

Environment variables for configuring automatic database backups before migrations.

Table of Contents

  1. Overview
  2. Configuration Approaches
    1. Dot-Notation (Recommended)
    2. JSON Format
  3. Variables
    1. MSR_BACKUP
    2. MSR_BACKUP_FOLDER
    3. MSR_BACKUP_TIMESTAMP
    4. MSR_BACKUP_DELETE_BACKUP
    5. MSR_BACKUP_PREFIX
    6. MSR_BACKUP_CUSTOM
    7. MSR_BACKUP_SUFFIX
    8. MSR_BACKUP_TIMESTAMP_FORMAT
    9. MSR_BACKUP_EXTENSION
    10. MSR_BACKUP_EXISTING_BACKUP_PATH
  4. Complete Examples
    1. Development Environment
    2. Production Environment
    3. CI/CD Pipeline
    4. Docker Configuration
    5. Kubernetes ConfigMap
    6. Using JSON Format
  5. Filename Examples
  6. Restore Operations
  7. Source Code

Overview

Backup environment variables control automatic database backups created before migration execution, providing safety and rollback capability.

Key Features:

  • Automatic backups before migrations
  • Flexible filename customization
  • Configurable retention policies
  • Restore from existing backups

Configuration Approaches

Configure individual properties:

export MSR_BACKUP_FOLDER=./backups
export MSR_BACKUP_TIMESTAMP=true
export MSR_BACKUP_DELETE_BACKUP=false
export MSR_BACKUP_PREFIX=db-backup

JSON Format

Configure all settings at once:

export MSR_BACKUP='{
  "folder": "./backups",
  "timestamp": true,
  "deleteBackup": false,
  "prefix": "db-backup",
  "timestampFormat": "YYYY-MM-DD-HH-mm-ss"
}'

Priority: Dot-notation variables override JSON configuration.


Variables

MSR_BACKUP

Complete backup configuration as JSON

  • Type: JSON object
  • Default: None
  • Example: See JSON Format above

Alternative to dot-notation variables. Provides complete backup configuration in a single variable.

export MSR_BACKUP='{"folder":"./backups","timestamp":true,"deleteBackup":false}'

JSON Schema:

{
  folder?: string;              // Backup directory
  timestamp?: boolean;          // Include timestamp
  deleteBackup?: boolean;       // Delete after success
  prefix?: string;              // Filename prefix
  custom?: string;              // Custom component
  suffix?: string;              // Filename suffix
  timestampFormat?: string;     // Timestamp format
  extension?: string;           // File extension
  existingBackupPath?: string;  // Path for restore
}

Programmatic Equivalent:

config.backup = new BackupConfig();
config.backup.folder = './backups';
config.backup.timestamp = true;

MSR_BACKUP_FOLDER

Backup files directory

  • Type: string
  • Default: ./backups
  • Example: ./database/backups, /var/backups/db

Directory where backup files are created. Created automatically if it doesn’t exist.

export MSR_BACKUP_FOLDER=./database/backups

Programmatic Equivalent:

config.backup.folder = './database/backups';

Permissions:

  • Directory must be writable by the application
  • Consider disk space for production databases
  • Should be on reliable storage with sufficient capacity

See Also:


MSR_BACKUP_TIMESTAMP

Include timestamp in filename

  • Type: boolean
  • Default: true
  • Example: true, false

Controls whether timestamp is included in backup filename.

# With timestamp (default)
export MSR_BACKUP_TIMESTAMP=true
# Result: backup-2024-01-15-14-30-45.bkp

# Without timestamp
export MSR_BACKUP_TIMESTAMP=false
# Result: backup.bkp

Programmatic Equivalent:

config.backup.timestamp = true;

Use Cases:

  • true - Keep multiple backups, historical tracking
  • false - Only keep latest backup, save disk space

MSR_BACKUP_DELETE_BACKUP

Delete backup after successful migration

  • Type: boolean
  • Default: true
  • Example: true, false

Controls whether backup is deleted after successful migration.

# Delete after success (default)
export MSR_BACKUP_DELETE_BACKUP=true

# Keep backups
export MSR_BACKUP_DELETE_BACKUP=false

Programmatic Equivalent:

config.backup.deleteBackup = true;

Behavior:

Migration Result true false
Success 🗑️ Delete ✅ Keep
Failure ✅ Keep ✅ Keep

Use Cases:

  • true - Production (automatic cleanup)
  • false - Development, compliance, audit requirements

MSR_BACKUP_PREFIX

Filename prefix

  • Type: string
  • Default: backup
  • Example: db-backup, prod-backup, myapp

Prefix component of backup filename.

export MSR_BACKUP_PREFIX=prod-backup
# Result: prod-backup-2024-01-15-14-30-45.bkp

Programmatic Equivalent:

config.backup.prefix = 'prod-backup';

Filename Format:

{prefix}[-{custom}][-{timestamp}][{suffix}].{extension}

Examples:

Configuration Filename
prefix: backup backup-2024-01-15.bkp
prefix: db-backup db-backup-2024-01-15.bkp
prefix: prod prod-2024-01-15.bkp

MSR_BACKUP_CUSTOM

Custom filename component

  • Type: string
  • Default: '' (empty)
  • Example: production, staging, v1.2.0

Custom component inserted into backup filename between prefix and timestamp.

export MSR_BACKUP_PREFIX=backup
export MSR_BACKUP_CUSTOM=production
# Result: backup-production-2024-01-15-14-30-45.bkp

Programmatic Equivalent:

config.backup.custom = 'production';

Use Cases:

  • Environment identification: production, staging, dev
  • Version tracking: v1.2.0, release-2024-01
  • Custom identifiers: customer-name, tenant-id

Examples:

prefix custom timestamp Result
backup prod 2024-01-15 backup-prod-2024-01-15.bkp
db v1.2.0 2024-01-15 db-v1.2.0-2024-01-15.bkp

MSR_BACKUP_SUFFIX

Filename suffix

  • Type: string
  • Default: '' (empty)
  • Example: -pre-migration, -before-update

Suffix component appended before file extension.

export MSR_BACKUP_SUFFIX=-pre-migration
# Result: backup-2024-01-15-14-30-45-pre-migration.bkp

Programmatic Equivalent:

config.backup.suffix = '-pre-migration';

Note: Suffix should include leading dash if desired.


MSR_BACKUP_TIMESTAMP_FORMAT

Timestamp format

  • Type: string (Moment.js format)
  • Default: YYYY-MM-DD-HH-mm-ss
  • Example: YYYYMMDD-HHmmss, YYYY-MM-DD

Moment.js format string for backup timestamp.

# Default format
export MSR_BACKUP_TIMESTAMP_FORMAT=YYYY-MM-DD-HH-mm-ss
# Result: backup-2024-01-15-14-30-45.bkp

# Compact format
export MSR_BACKUP_TIMESTAMP_FORMAT=YYYYMMDD-HHmmss
# Result: backup-20240115-143045.bkp

# Date only
export MSR_BACKUP_TIMESTAMP_FORMAT=YYYY-MM-DD
# Result: backup-2024-01-15.bkp

Programmatic Equivalent:

config.backup.timestampFormat = 'YYYY-MM-DD-HH-mm-ss';

Common Formats:

Format Example Use Case
YYYY-MM-DD-HH-mm-ss 2024-01-15-14-30-45 Full precision (default)
YYYYMMDD-HHmmss 20240115-143045 Compact format
YYYY-MM-DD 2024-01-15 Daily backups
YYYY-MM-DD-HH 2024-01-15-14 Hourly backups

See Also:


MSR_BACKUP_EXTENSION

File extension

  • Type: string
  • Default: bkp
  • Example: bak, backup, sql, dump

File extension for backup files (without leading dot).

export MSR_BACKUP_EXTENSION=sql
# Result: backup-2024-01-15-14-30-45.sql

Programmatic Equivalent:

config.backup.extension = 'sql';

Common Extensions:

Extension Use Case
bkp Generic backup (default)
bak Alternative backup extension
sql SQL dump files
dump Database dump files
tar.gz Compressed archives

Note: Do not include the leading dot.


MSR_BACKUP_EXISTING_BACKUP_PATH

Path to existing backup for restore

  • Type: string
  • Default: undefined
  • Example: ./backups/backup-2024-01-15.bkp

Path to existing backup file for restore operations.

export MSR_BACKUP_EXISTING_BACKUP_PATH=./backups/backup-2024-01-15.bkp

Programmatic Equivalent:

config.backup.existingBackupPath = './backups/backup-2024-01-15.bkp';

Use Cases:

  • Restore from specific backup
  • Disaster recovery
  • Environment synchronization

See Also:


Complete Examples

Development Environment

Keep all backups for safety:

export MSR_BACKUP_FOLDER=./backups
export MSR_BACKUP_TIMESTAMP=true
export MSR_BACKUP_DELETE_BACKUP=false
export MSR_BACKUP_PREFIX=dev-backup

Production Environment

Automatic cleanup with environment identification:

export MSR_BACKUP_FOLDER=/var/backups/database
export MSR_BACKUP_PREFIX=backup
export MSR_BACKUP_CUSTOM=production
export MSR_BACKUP_TIMESTAMP=true
export MSR_BACKUP_TIMESTAMP_FORMAT=YYYY-MM-DD-HH-mm-ss
export MSR_BACKUP_DELETE_BACKUP=true
export MSR_BACKUP_EXTENSION=bkp

CI/CD Pipeline

Compact backups with build identification:

export MSR_BACKUP_FOLDER=./build/backups
export MSR_BACKUP_PREFIX=ci
export MSR_BACKUP_CUSTOM=${BUILD_NUMBER}
export MSR_BACKUP_TIMESTAMP=false
export MSR_BACKUP_DELETE_BACKUP=false

Docker Configuration

ENV MSR_BACKUP_FOLDER=/var/backups \
    MSR_BACKUP_PREFIX=docker-backup \
    MSR_BACKUP_TIMESTAMP=true \
    MSR_BACKUP_DELETE_BACKUP=true \
    MSR_BACKUP_EXTENSION=bkp

Kubernetes ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: msr-backup-config
data:
  MSR_BACKUP_FOLDER: "/var/backups/database"
  MSR_BACKUP_PREFIX: "k8s-backup"
  MSR_BACKUP_CUSTOM: "production"
  MSR_BACKUP_TIMESTAMP: "true"
  MSR_BACKUP_TIMESTAMP_FORMAT: "YYYY-MM-DD-HH-mm-ss"
  MSR_BACKUP_DELETE_BACKUP: "true"
  MSR_BACKUP_EXTENSION: "bkp"

Using JSON Format

Complete configuration in single variable:

export MSR_BACKUP='{
  "folder": "/var/backups/database",
  "prefix": "backup",
  "custom": "production",
  "timestamp": true,
  "timestampFormat": "YYYY-MM-DD-HH-mm-ss",
  "deleteBackup": true,
  "extension": "bkp"
}'

Filename Examples

Based on different configurations:

Configuration Filename
Default backup-2024-01-15-14-30-45.bkp
Custom prefix db-backup-2024-01-15-14-30-45.bkp
With custom component backup-production-2024-01-15-14-30-45.bkp
With suffix backup-2024-01-15-14-30-45-pre-migration.bkp
Different extension backup-2024-01-15-14-30-45.sql
No timestamp backup.bkp
Compact timestamp backup-20240115-143045.bkp
Full customization prod-v1.2.0-20240115-143045-pre-update.sql

Restore Operations

To restore from an existing backup:

# Specify the backup file to restore
export MSR_BACKUP_EXISTING_BACKUP_PATH=./backups/backup-2024-01-15.bkp

# Run restore operation (programmatically)
# executor.restore()

See Also:


Source Code

TypeScript enum definition: src/model/env/BackupEnvVars.ts