Aller au contenu
← Tous les articles

Infra & DevOps1 min de lecture

Une sauvegarde qui n’a jamais été restaurée n’existe pas

Sauvegarder PostgreSQL et un stockage compatible S3 est facile. Prouver chaque semaine que la restauration fonctionne l’est moins : voici une routine automatisée.

Silhouettes d’immeubles bleu nuit ponctuées de fenêtres éclairées
Sommaire

Tout le monde a une sauvegarde. Bien moins nombreux sont ceux qui savent combien de temps prendrait une restauration complète, ou si le fichier de la nuit dernière est seulement lisible.

Ce que l’on sauvegarde

  • La base : un pg_dump au format personnalisé, compressé
  • Les médias : une copie miroir du compartiment S3 vers un stockage distant
  • La configuration : versionnée dans le dépôt, donc déjà sauvegardée
Shell
pg_dump --format=custom --no-owner "$DATABASE_URI" > "backup-$(date +%F).dump"
mc mirror --overwrite local/media offsite/media

Restaurer chaque semaine

Une tâche planifiée démarre une base vide, y restaure la dernière sauvegarde et lance une série de requêtes de contrôle : nombre d’articles, dernier message reçu, intégrité des références vers les médias.

SQL
SELECT count(*) AS orphan_media_refs
FROM article_media am
LEFT JOIN media m ON m.id = am.media_id
WHERE m.id IS NULL;

Si une requête échoue, ou si la restauration dépasse le délai fixé, une alerte part.

Ce que la routine a déjà attrapé

  • Une sauvegarde tronquée par un disque plein, restée silencieuse plusieurs jours
  • Une extension PostgreSQL absente de la machine de restauration
  • Des médias supprimés du stockage mais encore référencés
La question n’est pas « avons-nous une sauvegarde ? » mais « quand l’avons-nous restaurée ? ».
  • #PostgreSQL
  • #Docker

Partager

  • Grille en perspective qui file vers un horizon bleu profond

    Infra & DevOps2 min de lecture

    Déployer sans coupure avec Docker Compose et Nginx

    Pas besoin d’un orchestrateur pour mettre à jour une application sans interrompre ses visiteurs : deux conteneurs, une sonde de santé et un rechargement de Nginx suffisent.

  • Treillis de points lumineux sur un halo bleu profond

    Backend1 min de lecture

    Chercher dans sa documentation avec PostgreSQL

    Avant d’ajouter un moteur de recherche à l’infrastructure, la recherche plein texte de PostgreSQL couvre souvent le besoin : accents, pertinence, droits d’accès.

  • Réseau clairsemé de nœuds bleus et de liaisons fines

    Backend1 min de lecture

    PostgreSQL : paginer sans OFFSET

    OFFSET relit toutes les lignes qu’il saute. La pagination par curseur garde un temps de réponse constant, même à la page mille.

Un projet, une question ?

Cet article vous a donné une idée, ou vous bloquez sur un problème proche ? Écrivez-moi, je réponds à chaque message.