Script de transfert de données d’une base PostgresSQL puis un serveur hébergé puis mise en archive compressée dans le dossier adéquat (Windows)

 

 

 

But :

Pouvoir sauvegarder quotidiennement des bases de données PostgresSQL ou autres, présentes sur un serveur virtuel ou pas, hébergé ou pas. Transférer ces données sous forme de backups sur un ordinateur local puis archiver en .rar ces backups avant de les positionner dans le dossier correspondant au mois et à l’année.

 

Script de transfert :

 

Ouvrir un nouveau fichier texte ou sous Word ou avec Notepad ++, du moment que vous le nommez « nomfichier.bat ».

Voici le script, attention, les lignes 3 et 4 en fait n’en font qu’une seule mais la capture d’écran n’aurait pas été possible sinon. Donc entre username et les prochains --  il n’y a pas « entrée » c’est tout à la suite, donc un espace seulement.

 

 

Les « ECHO » correspondent aux # sous linux, ce sont des commentaires pour vous aider. Nous allons donc chercher dans notre programme PostgresSQL  l’exécutable pg_dump.exe qui permet de configurer les backups dont nous avons besoin. S’en suit ensuite une ligne de commande (que l’on peut mettre directement en Cron sous linux sans passer par un script shell) dans lequel on va saisir les diverses information pour la connexion :

--host è le nom du serveur hôte ayant les bases de données intéressantes (nomserveur.nomdomaine.fr)

--port èle port d’écoute configuré sur votre serveur pour ce type d’échange. (par défaut, PostgresSQL utilise en TCP et UDP le port 5432 si vous ne l’avez pas reconfigurer)

--username è le nom d’utilisateur de votre base PostgresSQL

--password è le mot de passe  de votre base PostgresSQL (s’il n’y a pas de mot de passe configuré ce sera :

--no-password

--role ènom du rôle à tenir, ici la base de données postgres

--format è format du fichier backup à transférer

--blobsèpermet l’inclusion des objets de grande taille dans le backup (Binary Large OBject).

--verboseègénère un fichier log indiquant certains commentaires sur les objets, les erreurs ou de suivi de transmission.

--file è chemin de dépôt du backup et  configuration du nom du fichier :

%date :~-4,4% è code l’année en cours

%date :~-7,2% è code le mois en cours, sous forme 01 à 12 d’où notre arborescence qui va suivre

%date :~-10,2% è code le jour en cours

« intranet » è nom de la base de données. 

 

 

Plus de renseignements sur PostgresSQL et dump_pg.exe sur :

 http://www.postgresql.org/docs/8.3/static/app-pgdump.html

 

 

 

Ainsi les backups apparaîtront dans notre fichier avec ce format et ces noms-ci :

 

 

Préparatifs de l’arborescence :

C’est très facile, pour cela choisissez votre dossier de destination sur votre ordinateur local.

Pour ma part ce sera C:/dumps/pg (pour Postgres)

Dans ce dossier je crée deux dossiers : 2012 et 2013.

A l’intérieur de ces dossiers, 12 sous-dossiers allant de : 01 à 12 correspondant comme on s’en doute, aux mois de l’année.

 

 

 

Pourquoi 01 à 12 plutôt que de les appeler par leur nom respectif ?  Pour une raison que j’évoque sur un autre script de ce site : Les codes reconnaissent le 01 comme janvier jusqu’au 12 pour décembre et il est plus facile d’automatiser une tâche ainsi pour faire une correspondance entre le nom du fichier qui contiendra la date d’application et son dossier de destination.

 

 

 

 

Ci-dessous l’exemple dans le dossier 2013

 

 

 

 

Script d’archivage :

Le but est de mettre en archive le backup et de le poser directement dans le bon dossier (année/mois).

Pour la mise en archive j’ai choisi le .rar qui est présent sur mon installation et a la particularité d’être commandable via le prompt, donc scriptable (prompt = fenêtre MS-DOS).

 

Donc j’ai créé ce script. Les ECHOS sont des commentaires perso pour m’y retrouver à savoir quelle ligne code quelle commande.

 

Script RARification.bat.

 

La première commande : positionnement dans le répertoire de winrar pour pouvoir appeler la commande rar.exe

Ici la commande rar (a, permet d’ajouter des fichiers à une archive) créé le fichier, indiqué avec son chemin et son nom (ici en relatif avec les valeurs % pour les dates) terminé par .rar à partir du fichier éponyme en .backup.

è remarque ce script n’est valable que s’il est lancé le même jour que la création des fichiers .backup sinon le nom relatif ne correspondra plus puisqu’il s’agit de dates en cours.

Plus sur la commande rar ici (merci à Ballajack) : http://www.ballajack.com/commande-rar-expliquee

 

La seconde commande : puisque l’archive est créée dans le dossier dumps/pg et que nous n’avons plus besoin de la commande rar nous pouvons nous positionner dans dumps/pg

 

La troisième commande : Nous allons d’abord déplacer l’archive dans le dossier correspondant à l’année et au mois. Nous aurions pu faire en deux fois le déplacement, et dans le dossier de l’année et dans celui du mois mais même si j’ai appris par expérience que vouloir faire trop de choses à la fois, finit par poser problème et surtout pour les tests, si ça ne fonctionne pas, nous sommes plus difficilement à même de savoir ce qui à raté. Donc plus de simplicité = plus d’assurance. Ici Il n’y avait pas beaucoup de problèmes à gérer.

Pour déplacer une archive ou un fichier la commande « move » très simple à utiliser. Nous donnons le chemin du fichier suivi du chemin de destination. Ici remarquons que j’appelle le dossier de destination par les variables % des dates de l’année et du mois en cours, ainsi comme les noms de mes dossiers correspondent, l’interpréteur de commande comprend dans quel dossier les ranger en fonction du nom et du jour en cours. Par la suite il est même renommé en fonction de la date en cours, mais que normalement il portait déjà grâce à la première commande.

è notons que j’appelle les fichiers avec leur chemin absolu et non relatif alors que nous sommes déjà dans le dossier dumps/pg. Vous avez l’œil, et bien oui je pourrai très bien appeler les fichiers sans mettre C:\dumps\pg devant, d’ailleurs c’est ce qui se passe dans la 4 ième commande.

 

La quatrième commande : (superbe transition non ?) Elle supprime juste le fichier .backup à partir duquel nous avons créé l’archive afin de ne pas avoir des tonnes de fichiers backup  ne servant à rien.

 

 

 

 

 

Voyons l’exécution du script via la fenêtre de prompt. Je l’ai placé dans un dossier appelé scripts dans lequel je me place pour le lancer en ligne de commande pour voir son évolution.

Comme chacun sait à partir de la 4 ième ligne où je lance RARification.bat, tout le reste se fait automatiquement sans intervention de ma part normalement, c’est justement afin de savoir si et où ça coince que je lance toujours mes scripts en ligne de commande dans mes phases de tests.

 

 

 

 

Nous voyons bien le changement de répertoire pour aller se placer dans celui de winrar et créer l’archive. Nous voyons aussi que je n’ai qu’une version d’évaluation…bon.

Nous voyons ensuite le déplacement dans le répertoire C:\dumps\pg et le déplacement de l’archive dans le dossier de l’année et ensuite du mois, qui d’ailleurs ici sont déjà codés avec la date en cours.

Suit la suppression du backup original.

A partir de ce moment, nous savons que le script est opérationnel.

Il ne nous reste qu’une chose à faire : automatiser les tâches.

 

 

 

Automatisation des tâches pour lancer les scripts :

Nos deux scripts sont opérationnels. Pour que leurs tâches se lancent seules il va falloir créer des tâches dans le gestionnaire de tâches automatiques.

Pour ce faire aller dans le panneau de configuration et rentrer dans « tâches planifiées ».

Créez une tâche par script ainsi vous pourrez décider l’heure à laquelle chacune des tâches doit se lancer. C’est aussi une des raisons pour lesquelles j’ai réalisé deux scripts. Ainsi je peux décider de laisser assez de temps à la première tâche pour pouvoir démarrer la seconde sans risquer de créer des tâches superposées et incomplètes.

 

Créez donc une nouvelle tâche que vous nommerez de la même façon que le script qu’elle doit lancer ainsi visuellement ce sera plus facile de s’y retrouver. Dans les différents onglets, renseignez le script à lancer  ainsi que la planification. Pour ne paramétrer que certains jours, choisissez «Toutes les semaines » et ainsi vous pourrez cocher que les jours où vous voudrez activer ces scripts.

 

 

 

Une fois les deux tâches créées elles devraient apparaître ainsi, avec les indications de l’heure d’exécution, les jours et la mise en place de ces scripts.

 

 

Nos tâches sont créées et soit nous pouvons attendre la prochaine exécution, soit nous pouvons les lancer manuellement en cliquant droit et «lancer maintenant».

 

Vérification de la bonne exécution des scripts :

Rentrons dans le dossier 2012 /04 puisque c’est le mois en cours et voyons après un mois si les archives sont bien à leur place.

 

Nous voyons que c’est le cas. Voyons maintenant plus en avant, à partir du prompt (fenêtre agrandie) et d’un dir /S (dir –R sur linux) l’arborescence complète des dossiers et de leur contenu.

 

Dir /S sur dumps/pg/2012

   

 

 

Voilà, j’espère comme d’habitude que ce didacticiel vous a été utile.

Pour toutes questions supplémentaires ou incorrections présentes, merci de me contacter.

 

 

Rédigé par Jason Pinaud en mai 2012.