@idirdev/dbsnap
v1.0.0
Published
Create and manage directory snapshots
Readme
dbsnap
[EN] Database snapshot utility for PostgreSQL and MySQL — create, list, restore, rotate and verify compressed/encrypted SQL dumps from the command line. [FR] Utilitaire de snapshots de base de données pour PostgreSQL et MySQL — créez, listez, restaurez, faites tourner et vérifiez des dumps SQL compressés/chiffrés depuis la ligne de commande.
Features / Fonctionnalités
[EN]
- Creates SQL dumps via
pg_dump(PostgreSQL) ormysqldump(MySQL) - Optional gzip compression (
--compress) to shrink dump files - AES-256-GCM encryption (
--encrypt) with password-derived key - SHA-256 checksum file generated automatically alongside every snapshot
verifycommand confirms snapshot integrity before restorerotatecommand prunes old snapshots, keeping only the last N- Table output with name, size, date, compressed and encrypted flags
- Reads
DATABASE_URLenv variable automatically
[FR]
- Crée des dumps SQL via
pg_dump(PostgreSQL) oumysqldump(MySQL) - Compression gzip optionnelle (
--compress) pour réduire les fichiers dump - Chiffrement AES-256-GCM (
--encrypt) avec clé dérivée du mot de passe - Fichier de somme de contrôle SHA-256 généré automatiquement avec chaque snapshot
- La commande
verifyconfirme l'intégrité du snapshot avant la restauration - La commande
rotatesupprime les anciens snapshots en ne conservant que les N derniers - Sortie en tableau avec nom, taille, date, indicateurs de compression et de chiffrement
- Lit automatiquement la variable d'environnement
DATABASE_URL
Installation
npm install -g @idirdev/dbsnapCLI Usage / Utilisation CLI
# Create a plain snapshot / Créer un snapshot simple
dbsnap create -c postgres://user:pass@localhost/mydb
# Compressed snapshot / Snapshot compressé
dbsnap create -c postgres://user:pass@localhost/mydb --compress -o ./backups
# Compressed + encrypted / Compressé + chiffré
dbsnap create -c postgres://user:pass@localhost/mydb --compress --encrypt "s3cr3tPwd" --name daily-backup
# List existing snapshots / Lister les snapshots existants
dbsnap list -d ./backups
# Restore from a snapshot / Restaurer depuis un snapshot
dbsnap restore ./backups/snapshot-2026-03-16.sql.gz -c postgres://user:pass@localhost/mydb
# Restore an encrypted snapshot / Restaurer un snapshot chiffré
dbsnap restore ./backups/daily-backup.sql.gz.enc -c postgres://... --password "s3cr3tPwd"
# Verify snapshot integrity / Vérifier l'intégrité d'un snapshot
dbsnap verify ./backups/snapshot-2026-03-16.sql.gz
# Keep only last 7 snapshots / Garder uniquement les 7 derniers snapshots
dbsnap rotate -d ./backups --keep 7Example Output / Exemple de sortie
$ dbsnap list -d ./backups
┌──────────────────────────────────────┬────────┬────────────┬────────────┬───────────┐
│ Name │ Size │ Date │ Compressed │ Encrypted │
├──────────────────────────────────────┼────────┼────────────┼────────────┼───────────┤
│ daily-backup.sql.gz.enc │ 1.2MB │ 2026-03-16 │ Yes │ Yes │
│ snapshot-2026-03-15T22-00-00-000Z.sql│ 4.8MB │ 2026-03-15 │ No │ No │
└──────────────────────────────────────┴────────┴────────────┴────────────┴───────────┘
$ dbsnap verify ./backups/daily-backup.sql.gz.enc
Valid: a3f8c1d2e4b56789...API (Programmatic) / API (Programmation)
const { createSnapshot, listSnapshots, restoreSnapshot, rotateSnapshots, verifySnapshot } = require('@idirdev/dbsnap');
// Create a snapshot / Créer un snapshot
const snap = await createSnapshot({
connection: 'postgres://user:pass@localhost/mydb',
output: './backups',
compress: true,
encrypt: 'myPassword',
name: 'pre-deploy',
});
console.log(snap.file, snap.size, snap.checksum);
// List snapshots / Lister les snapshots
const list = listSnapshots('./backups');
list.forEach(s => console.log(s.name, s.size, s.date));
// Verify integrity / Vérifier l'intégrité
const check = verifySnapshot('./backups/pre-deploy.sql.gz.enc');
console.log(check.valid); // true
// Rotate, keep 5 / Rotation, garder 5
const removed = rotateSnapshots('./backups', 5);
console.log(removed + ' old snapshot(s) removed');
// Restore / Restaurer
await restoreSnapshot('./backups/pre-deploy.sql.gz.enc', {
connection: 'postgres://user:pass@localhost/mydb',
password: 'myPassword',
});License
MIT — idirdev
