Comment planifier des sauvegardes automatiques pour PostgreSQL avec pgAgent dans pgAdmin

De Get Docs
Aller à :navigation, rechercher

Introduction

pgAgent est un outil utilisé pour planifier des tâches pour les bases de données PostgreSQL. Il a également des capacités de planification plus puissantes que le souvent utilisé cron car il est spécialement conçu pour gérer les tâches Postgres. Par exemple, pgAgent peut planifier plusieurs étapes sans script batch ou sans répéter la commande. Il est important de noter que même si vous avez installé pgAdmin, pgAgent doit être téléchargé indépendamment, en particulier en tant qu'extension de pgAdmin.

Dans ce didacticiel, vous allez installer pgAgent, configurer votre base de données pour utiliser pgAgent sur l'interface utilisateur graphique (GUI) de pgAdmin, configurer pgAgent en tant que démon, puis utiliser pgAgent pour planifier une tâche qui sauvegardera votre base de données.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de :

Étape 1 - Installation de pgAgent

Comme mentionné précédemment, pgAgent n'est pas configuré automatiquement lorsque vous installez pgAdmin. Vous pouvez installer pgAgent depuis votre terminal en exécutant apt install et le nom du paquet pgagent comme dans la commande suivante :

sudo apt install pgagent

Après avoir installé pgAgent, passez à l'étape suivante pour configurer votre base de données pour utiliser pgAgent dans pgAdmin.

Étape 2 - Configuration de votre base de données pour pgAgent

Après avoir suivi les prérequis, pgAdmin est configuré et prêt à être utilisé. Vous pouvez configurer votre base de données pour l'utilisation de pgAgent via pgAdmin. Ouvrez votre navigateur Web et accédez à l'application pgAdmin sur http://votre_domaine. Une fois que vous êtes connecté à votre compte, accédez au contrôle de l'arborescence sur le panneau de gauche. Localisez la base de données que vous avez créée appelée sammy et développez la liste. Dans cette liste, il y aura une option appelée Extensions. Une fois que vous l'avez localisé, faites un clic droit dessus et choisissez l'option Query Tool :

Sélectionnez l'éditeur de requêtes dans la liste déroulante Extensions

pgAgent nécessite qu'une extension soit chargée dans votre base de données avant de pouvoir être utilisée dans pgAdmin. Pour cela, écrivez la requête suivante et cliquez sur la flèche latérale signifiant Exécuter pour exécuter la commande :

CREATE EXTENSION pgagent;

Cette étape avec la fonction Query Tool est représentée dans l'exemple suivant :

Exécutez la commande CRÉER EXTENSION

Sous l'onglet Messages, il y aura une sortie qui renvoie Requête renvoyée avec succès en 300 msec. Cela confirme que l'extension pgAgent a été créée avec succès.

Remarque : Si vous ne disposez pas des plpgsql langue chargée dans votre base de données, vous recevrez le message d'erreur suivant :

OutputERROR:  language "plpgsql" does not exist
HINT:  Use CREATE EXTENSION to load the language into the database.
SQL state: 42704

Si cela se produit, vous devez exécuter CREATE LANGUAGE pour installer le langage procédural pl/pgsql requis. Vous pouvez l'installer en exécutant la commande suivante :

CREATE LANGUAGE plpgsql;

Une fois que vous avez installé le langage pl/pgsql, un message en bas indiquera quelque chose comme La requête a été renvoyée avec succès en 231 msec. Après cela, exécutez le précédent CREATE EXTENSION pgagent interroger à nouveau.


Après avoir exécuté ces requêtes, sous Extensions, deux éléments seront répertoriés pour pgagent et plpgsql :

pgAgent et plpgsql listés

Un nouvel élément dans le contrôle de l'arborescence sur le côté gauche apparaîtra appelé pgAgent Jobs. Cela signifie que pgAgent a été installé avec succès sur votre compte pgAdmin. Ensuite, vous configurerez pgAgent en tant que démon afin qu'il puisse exécuter vos tâches avec succès.

Remarque : Si ces éléments ne s'affichent pas immédiatement, actualisez la page de votre navigateur. Ils devraient s'afficher si vos requêtes aboutissent.


Étape 3 - Configuration de pgAgent en tant que démon

Maintenant que pgAgent est installé et configuré pour votre base de données via pgAdmin, vous devez ensuite configurer pgAgent en tant que démon sur votre serveur. Un daemon est un programme qui s'exécute comme un processus continu en arrière-plan et exécute des tâches de service. pgAgent s'exécute en tant que démon sur les systèmes Unix et généralement sur le serveur de base de données lui-même.

Pour configurer pgAgent en tant que démon, vous avez besoin d'une chaîne de connexion PostgreSQL afin que lorsque vous planifiez votre tâche, le processus s'exécute correctement. Dans ce cas, vous configurez une chaîne de connexion PostgreSQL libpq, c'est-à-dire une chaîne spécifique à l'utilisateur et se connecte à certains paramètres que vous définissez. Vous pouvez en savoir plus sur les fonctions de connexion PostgreSQL libpq dans la Documentation PostgreSQL.

Votre chaîne de connexion fournira les informations d'identification de votre nom d'hôte, de votre nom de base de données et de votre nom d'utilisateur. Dans notre exemple, l'hôte utilisera un socket de domaine Unix, le nom de la base de données est sammy, et l'utilisateur est sammy. Cette chaîne sera ajoutée à un pgagent commande pour lancer le démon. Dans votre terminal, vous exécuterez le code suivant :

pgagent host=/var/run/postgresql dbname=sammy user=sammy

Si rien ne revient dans votre sortie et que vous ne recevez pas de message d'erreur de connexion, la configuration de la chaîne de connexion a réussi.

Après avoir créé la chaîne de connexion, vous êtes prêt à planifier une tâche avec pgAgent.

Étape 4 - Planification d'un travail avec pgAgent

pgAgent sert d'agent de planification qui peut exécuter et gérer des travaux et peut créer des travaux d'une ou plusieurs étapes ou planifications. Par exemple, une étape peut consister en plusieurs instructions SQL sur un script shell et est exécutée consécutivement l'une après l'autre. Dans l'ensemble, vous pouvez utiliser pgAgent pour planifier, gérer, modifier ou désactiver vos travaux.

Pour les besoins de ce didacticiel, vous utiliserez pgAgent pour créer une tâche qui sauvegardera votre base de données sammy toutes les minutes, chaque jour de la semaine. Vous pouvez commencer par cliquer avec le bouton droit sur tâches pgAgent et sélectionner Créer puis tâche pgAgent… comme suit :

Créez votre travail pgAgent

Une fois que vous avez fait cela, une invite intitulée Create - pgAgent Job apparaîtra et vous pourrez commencer à remplir les informations requises dans l'onglet General. Dans cet exemple, nous utiliserons le nom sammy_backup et ne spécifierons pas d'Host agent car nous voulons pouvoir exécuter cette tâche sur n'importe quel hôte. De plus, nous laisserons la Job class en tant que Routine Maintenance. Si vous souhaitez inclure d'autres commentaires, n'hésitez pas à le faire dans la section Commentaire :

Invite de création de votre travail pgAgent

Ensuite, accédez à l'onglet Étapes. Cliquez sur le symbole + dans le coin supérieur droit pour créer une étape. Dans cet exemple, nous nommerons cette étape étape1. Ensuite, pour développer vos options, cliquez sur le crayon à gauche de l'icône de la corbeille. Le bouton Enabled? est activé par défaut et signifie que cette étape sera incluse lors de l'exécution de cette tâche.

Pour l'option Kind, vous pouvez sélectionner soit SQL ou Batch, ici nous avons sélectionné Batch. La raison pour laquelle vous voulez choisir Batch dans cet exemple est parce que c'est ce qui exécutera les commandes PostgreSQL appropriées que vous définirez pour les sauvegardes que vous souhaitez planifier pour votre base de données. L'option SQL est disponible pour planifier une tâche afin d'exécuter du SQL brut. Dans ce cas, nous avons sélectionné Local pour Type de connexion afin que l'étape soit exécutée sur le serveur local, mais si vous préférez, vous pouvez également choisir Distant pour un hôte distant de votre choix. Si vous préférez le faire sur un hôte distant, vous devez spécifier ce critère dans le champ Chaîne de connexion. Si vous avez suivi Étape 1, votre chaîne de connexion est déjà configurée et connectée.

Pour le champ Database, assurez-vous que vous avez sélectionné la bonne base de données, ici nous avons spécifié sammy. Avec l'option Sur erreur, vous pouvez personnaliser la réponse de pgAgent en cas d'erreur lors de l'exécution d'une étape. Dans ce cas, nous avons sélectionné Fail pour nous avertir s'il y a une erreur lorsqu'une étape tente d'être traitée. Encore une fois, si vous souhaitez ajouter des notes supplémentaires, vous pouvez les ajouter dans la case Commentaire :

Créer une étape pour votre travail pgAgent

Dans le même onglet Étapes, il y a aussi un onglet Code. Si vous avez sélectionné Batch comme nous l'avons fait dans cet exemple, accédez à cet onglet Code. Une fois que vous êtes dans cet onglet, il y a une ligne vide pour insérer votre commande PostgreSQL. Vous pouvez remplacer votre propre commande de sauvegarde ici par votre ensemble d'options personnalisé. Toute commande valide est acceptable.

Ce didacticiel utilisera pg_dump pour sauvegarder votre base de données Postgres sammy. Dans cette commande, incluez votre nom d'utilisateur spécifique, le nom de la base de données et le --clean drapeau, ce qui aide à pg_dump en supprimant ou en "nettoyant" les objets de la base de données avant de sortir les commandes en cours de création. Pour le --file flag vous spécifiez l'emplacement exact où les fichiers de sauvegarde seront enregistrés. La dernière partie de cette déclaration date +%Y-%m-%d-%H-%M-%S est de générer dynamiquement une date et plusieurs fichiers pour chaque sauvegarde. Sinon, le fichier de sauvegarde remplacera et sauvegardera constamment le fichier existant. De cette façon, vous pouvez garder une trace de chacun de vos fichiers de sauvegarde pour une heure ou une date spécifiée que vous avez planifiée. Votre commande complète sera la suivante :

pg_dump --username=sammy --dbname=sammy --clean --file=/home/sammy/backup-`date +%Y-%m-%d-%H-%M-%S`.sql

Ajouter une commande dans l'onglet Code pour l'étape pgAgent

Remarque : Si vous choisissez d'enregistrer vos fichiers de sauvegarde dans un emplacement différent, assurez-vous d'utiliser un chemin absolu vers le répertoire de votre choix. Par exemple, alors que ~/ pointe normalement vers le répertoire personnel de /home/sammy/, pg_dump dans ce cas nécessite le chemin absolu de /home/sammy/.


Une fois que vous avez ajouté votre commande de sauvegarde, vous pouvez accéder à l'onglet intitulé Schedules. Comme lors de la configuration de Étapes, cliquez sur le symbole + pour ajouter un programme, puis indiquez votre nom préféré, puis cliquez sur l'icône en forme de crayon à côté de l'icône de la corbeille pour développer votre options. Sous l'onglet Général, il y aura le Nom que vous avez écrit, dans cet exemple, c'est schedule1. Encore une fois, pour Enabled, il s'agit de l'interrupteur marche par défaut pour garantir que le programme est correctement exécuté. Pour les options Début et Fin, spécifiez le jour et l'heure de début et de fin de votre tâche planifiée. Étant donné que vous allez tester votre tâche planifiée, assurez-vous que l'heure actuelle est comprise entre Début et Fin. Ajoutez une note dans Commentaire si vous préférez :

Options de planification de pgAgent

Passez maintenant à l'onglet Répéter. Ici, vous pouvez personnaliser la fréquence d'exécution de cette tâche planifiée. Vous pouvez être aussi précis que possible avec la semaine, le mois, la date, les heures ou les minutes. Veuillez noter que si vous ne faites pas de sélection, cela revient au même que de choisir Tout sélectionner. Par conséquent, si vous laissez le champ Jours de la semaine vide, votre horaire prendra en compte tous les jours de la semaine. De même, avec Times, vous pouvez laisser les heures ou les minutes vides, et c'est la même chose que Selecting All. Gardez à l'esprit que les heures sont au format de style cron, donc pour cela Par exemple, pour générer une sauvegarde toutes les minutes, vous devez sélectionner chaque minute dans une heure (00 à 59). Pour le démontrer, nous avons choisi Tout sélectionner pendant quelques minutes. Toutes les minutes sont répertoriées, mais si vous les laissez vides, vous obtiendrez également les mêmes résultats :

Personnalisez les dates et les heures de la planification des tâches dans l'onglet Répéter

S'il y a des jours ou des heures où vous ne souhaitez pas exécuter une tâche, vous pouvez créer un calendrier plus précis ou le définir en accédant à l'onglet Exceptions.

Remarque : Une tâche est également exécutée en fonction de la planification. Par conséquent, chaque fois qu'elle est modifiée, la durée d'exécution planifiée est recalculée. Lorsque cela se produit, pgAgent interroge la base de données pour la dernière valeur d'exécution planifiée et, à partir de là, démarre généralement dans la minute qui suit l'heure de début spécifiée. S'il y a des problèmes, lorsque pgAgent redémarrera, il reviendra au programme régulier que vous avez défini.


Lorsque vous avez terminé de configurer et de personnaliser le programme que vous souhaitez exécuter, appuyez sur le bouton Save. Un nouveau travail pgAgent apparaîtra sur le contrôle de l'arborescence sur le côté gauche avec le nom de votre travail. Pour cet exemple, sammy_backup apparaît avec les Schedules et Steps répertoriés en dessous :

L'étape et la planification de votre tâche de sauvegarde pgAgent seront désormais répertoriées

Maintenant que vous avez créé avec succès une tâche pgAgent, à l'étape suivante, vous apprendrez comment vérifier que votre tâche pgAgent s'exécute correctement.

Étape 5 - Vérification de votre travail pgAgent

Vous pouvez vérifier si votre tâche planifiée pour créer un fichier de sauvegarde de votre base de données toutes les minutes fonctionne de plusieurs manières. Dans pgAdmin, vous pouvez naviguer jusqu'au contrôle de l'arborescence sur le côté gauche et cliquer sur sammy_backup. De là, passez à l'onglet intitulé Statistiques. La page Statistics répertorie chaque instance de votre tâche planifiée fonctionnant comme suit :

Vérifiez si votre travail fonctionne avec l'onglet Statistiques de pgAgent

Veuillez noter que les statistiques peuvent ne pas apparaître ou s'actualiser immédiatement, vous devrez donc peut-être quitter ou actualiser le navigateur. N'oubliez pas que votre tâche est planifiée pour s'exécuter à un intervalle défini, alors gardez cela à l'esprit si vous définissez une date ou une heure périodique ou d'une durée plus longue.

Si vous préférez vérifier que votre travail fonctionne à partir de la ligne de commande, vous pouvez exécuter le ls ~ commande pour lister les fichiers de votre répertoire personnel. Dans ce didacticiel, vous configurez l'emplacement exact de ce répertoire personnel lors de l'écriture du pg_dump commande dans Étape 4 :

ls ~

La sortie listera chaque instance des fichiers de sauvegarde en cours d'enregistrement.

Étape 6 - Modification, désactivation, suppression et exécution manuelle des tâches pgAgent (facultatif)

pgAgent offre de la flexibilité lorsqu'il s'agit de modifier ou de désactiver une tâche. À l'aide de pgAdmin, vous pouvez accéder à la tâche pgAgent spécifique, dans ce cas, sammy_backup. Cliquez ensuite avec le bouton droit de la souris et choisissez l'option Propriétés dans la liste. À partir de là, vous pouvez appuyer sur l'icône en forme de crayon en haut pour apporter des modifications à votre tâche :

Options de propriétés de pgAgent telles que la modification de votre travail

Si vous êtes dans Properties et que vous appuyez sur l'icône en forme de crayon, vous pouvez accéder à l'onglet Schedules pour désactiver votre tâche comme suit :

Vous pouvez désactiver votre travail pgAgent dans l'onglet Propriétés

De plus, à partir de l'arborescence sur le côté gauche, si vous cliquez avec le bouton droit sur la tâche pgAgent, vous pouvez sélectionner la sélection SUPPRIMER/DROP pour supprimer complètement la tâche. Si vous souhaitez exécuter une tâche manuellement, vous pouvez répéter la même étape, mais cette fois, choisissez la sélection EXÉCUTER MAINTENANT dans la liste :

Vous pouvez également choisir de supprimer ou d'exécuter manuellement votre travail à partir de la liste déroulante

Bien qu'il ne s'agisse que de quelques fonctions permettant d'utiliser pgAgent pour planifier des tâches, il existe de nombreuses autres possibilités. Par exemple, vous pouvez planifier une tâche qui crée une sauvegarde pour tous les utilisateurs et rôles de votre base de données, en particulier avec le pg_dumpall --globals only commande. Vous pouvez même utiliser des scripts plus complexes avec des tâches par lots, dont vous pouvez en savoir plus sur la page wiki PostgreSQL.

Conclusion

pgAgent est utile pour planifier diverses tâches qui peuvent aider à réduire certaines de vos tâches quotidiennes plus banales mais nécessaires, telles que la sauvegarde cohérente de votre base de données. Une fois que vous serez plus à l'aise avec cet outil, vous pourrez même essayer de créer un travail en plusieurs étapes ou des tâches SQL nécessitant une planification complexe. Si vous souhaitez en savoir plus, vous pouvez lire la documentation officielle de pgAgent sur le site Web de pgAdmin.