# Blog Backup Guide

**Last Updated:** 2026-01-10

Complete guide for backing up and restoring blog content, including WordPress master backups and snapshot backups.

## Overview

This guide covers the complete backup and restoration process for blog content, including:

- WordPress master backup (pre-migration)
- Snapshot backups (post-migration)
- Restoration procedures
- Validation and troubleshooting

## Backup Types

### 1. WordPress Master Backup

**Purpose:** Complete snapshot of WordPress content before migration

**Location:** `docs/backups/wordpress-master/`

**Contents:**

- All 99 blog posts (full HTML content)
- Post metadata
- Image references
- Relationship data

**When Created:** Before migration begins

**See:** [WordPress Backup Documentation](WORDPRESS_BACKUP.md)

### 2. Snapshot Backups

**Purpose:** Regular backups of current blog content

**Location:** `docs/backups/blog-snapshots/YYYY-MM-DD-HHMMSS/`

**Contents:**

- Blog post JSON files (`v2/data/blog/posts/`)
- Categories and topics data
- Extraction data files

**When Created:** Regularly (daily/weekly/monthly)

## Backup Process

### Creating WordPress Master Backup

1. **Extract WordPress Content**

   ```bash
   python3 scripts/blog/extract-content.py
   ```

   This extracts all 99 posts from WordPress.

2. **Create Backup**

   ```bash
   python3 scripts/blog/copy-wordpress-backup.py
   ```

   Copies extraction files to backup directory.

3. **Validate Backup**

   ```bash
   python3 scripts/blog/validate-backup.py docs/backups/wordpress-master
   ```

### Creating Snapshot Backup

**Manual Backup:**

```bash
python3 scripts/blog/backup-blog-content.py --manual
```

**Automated Backup:**

```bash
python3 scripts/blog/backup-blog-content.py --automated
```

Or use the automated script:

```bash
./scripts/blog/automated-backup.sh
```

## Restoration Process

### Restoring from WordPress Backup

1. **Validate Backup**

   ```bash
   python3 scripts/blog/validate-backup.py docs/backups/wordpress-master
   ```

2. **Restore Posts**

   ```bash
   python3 scripts/blog/restore-from-wordpress-backup.py
   ```

3. **Verify Restoration**

   Check restoration report:

   - `docs/backups/restoration-report.json`

### Restoring from Snapshot

1. **List Available Snapshots**

   ```bash
   ls docs/backups/blog-snapshots/
   ```

2. **Restore Snapshot**

   ```bash
   python3 scripts/blog/restore-from-snapshot.py docs/backups/blog-snapshots/2026-01-10-120000
   ```

3. **Verify Restoration**

   Check files restored correctly.

### Dry Run Restoration

Test restoration without modifying files:

```bash
python3 scripts/blog/restore-from-wordpress-backup.py --dry-run
python3 scripts/blog/restore-from-snapshot.py docs/backups/blog-snapshots/2026-01-10-120000 --dry-run
```

## Validation

### Backup Validation

Validate backup integrity:

```bash
python3 scripts/blog/validate-backup.py <backup_directory>
```

Checks:

- JSON file syntax
- File checksums
- Completeness

### Integrity Check

Compare backup with source:

```bash
python3 scripts/blog/check-backup-integrity.py <backup_directory>
```

Checks:

- File counts match
- Checksums match
- No missing files

### Status Check

Check backup status:

```bash
python3 scripts/blog/check-backup-status.py
```

Shows:

- Recent backups
- WordPress backup status
- Overall health

## Backup Retention

### Retention Policy

- **Daily backups:** Keep last 30
- **Weekly backups:** Keep for 3 months
- **Monthly backups:** Keep for 1 year
- **Old backups:** Archive before deletion

### Cleanup

Clean up old backups:

```bash
python3 scripts/blog/cleanup-old-backups.py
```

Dry run (preview):

```bash
python3 scripts/blog/cleanup-old-backups.py --dry-run
```

## Automation

### Automated Daily Backups

Set up cron job:

```bash
# Edit crontab
crontab -e

# Add daily backup at 2 AM
0 2 * * * /path/to/scripts/blog/automated-backup.sh >> /path/to/logs/backup.log 2>&1
```

### Backup Monitoring

Check backup status regularly:

```bash
python3 scripts/blog/check-backup-status.py --days 7
```

## Troubleshooting

### Backup Failed

**Symptoms:**

- Backup script exits with error
- Missing files in backup
- Validation errors

**Solutions:**

1. Check file permissions
2. Verify source files exist
3. Check disk space
4. Review error logs

### Restoration Failed

**Symptoms:**

- Posts not restored
- JSON errors
- Missing files

**Solutions:**

1. Validate backup first
2. Check write permissions
3. Verify backup integrity
4. Review restoration report

### Validation Errors

**Symptoms:**

- Checksum mismatches
- JSON syntax errors
- Missing files

**Solutions:**

1. Re-create backup if corrupted
2. Check file integrity
3. Verify backup wasn't modified
4. Restore from another backup

## Best Practices

1. **Regular Backups**

   - Create snapshots regularly
   - Before major changes
   - After content updates

2. **Validation**

   - Always validate backups
   - Test restoration periodically
   - Monitor backup status

3. **Documentation**

   - Document backup dates
   - Note backup purposes
   - Track restoration history

4. **Retention**
   - Follow retention policy
   - Archive old backups
   - Clean up regularly

## Related Documentation

- [WordPress Backup](WORDPRESS_BACKUP.md) - WordPress master backup details
- [Backup Process](BACKUP_PROCESS.md) - Detailed backup procedures
- [Backup Best Practices](BACKUP_BEST_PRACTICES.md) - Best practices guide
