PGStash: Guida ai backup zero-downtime
#python#automation#microsaas
Diventa proprietario di questo asset SEO tecnico ad alta autorevolezza su Dev.to, progettato per la conversione degli sviluppatori. Include una guida ai backup PostgreSQL/MySQL zero-downtime che invia in streaming i dump AES-256 su Cloudflare R2, completa di automazione cron e test di ripristino.
Leggi l'approfondimento tecnicoBackup PostgreSQL a Zero-Downtime su Cloudflare R2 con PGStashmain.pymain.py — estratto d'esempio nello stile del tool
#!/usr/bin/env python3
"""
PGStash - Zero-Downtime Database Backup & Streaming Pipeline.
PGStash is a high-performance CLI tool and engine engineered for streaming
zero-downtime PostgreSQL and MySQL dumps encrypted with AES-256 directly to
S3-compatible storage like Cloudflare R2, complete with cron scheduling,
automated restore drills, and benchmark metrics.
Features:
- Streaming zero-downtime dumps for PostgreSQL and MySQL databases.
- Client-side AES-256-GCM encryption before transport to Cloudflare R2/S3.
- Automated restore validation drills to verify backup integrity.
- Lightweight cron-compatible execution engine with structured JSON logging.
- High-throughput benchmark utility for database dump and upload ops.
Usage:
$ pgstash backup --config /etc/pgstash.toml --target r2
$ pgstash restore --backup-id dump_20260330_01 --target-db test_db
$ pgstash benchmark --db-uri postgresql://user:pass@localhost:5432/db
"""
from dataclasses import dataclass, field
from datetime import datetime, timezone
from enum import Enum
import logging
import os
import sys
from typing import Any, Dict, List, Optional
class EngineType(Enum):
"""Supported database engine types."""
POSTGRESQL = "postgresql"
MYSQL = "mysql"
@dataclass(frozen=True)
class BackupTarget:
"""Configuration for target S3/R2 storage destination."""
endpoint_url: str
bucket_name: str
access_key_id: str
secret_access_key: str
region: str = "auto"
class PGStashEngine:
"""Core engine orchestrating zero-downtime database backup pipelines."""
def __init__(self, target: BackupTarget) -> None:
self.target = target
self._logger = logging.getLogger("pgstash")
# ... the full file ships with your download