Script de sauvegarde en batch

Résolu
Bonjour,

Alors voila. Je souhaite sauvegarder une base mysql. à ce niveau je n'ai pas de soucis. j'ai rentré mes commandes dans mon fichier batch et j'ai fait une tâche planifié. Le script écrit même le résultat de la sauvegarde dans un fichier log.

Ce que j'aimerais faire et que je ne vois pas du tout comment faire c'est :

pour chaque jours de la semaine lui associer un numéro
lundi --> 1
mardi --> 2
mercredi --> 3
jeudi --> 4
vendredi --> 5
samedi --> 6
dimanche --> pas de sauvegarde, donc pas de numéro.

Donc, on lance la sauvegarde la semaine 1
lundi --> création du fichier "sauv_lundi.sql"
mardi --> création du fichier "sauv_mardi.sql"
mercredi --> création du fichier "sauv_mercredi.sql"
jeudi --> création du fichier "sauv_jeudi.sql"
vendredi --> création du fichier "sauv_vendredi.sql"
samedi --> création du fichier "sauv_samedi.sql"

Les sauvegardes se sont toutes bien faites sans soucis.
Passons maintenant à la semaine 2.

lundi --> la nouvelle sauvegarde écrase le fichier "sauv_lundi.sql" créé lors de la semaine 1
mardi --> etc.

J'espère avoir été clair sur le principe.

merci d'avance.
Configuration: Windows XP
Firefox 3.0.3

28 réponses

Résumé de la discussion

Le sujet porte sur une sauvegarde MySQL automatisée via un script batch sous Windows, avec un besoin d associer chaque jour de la semaine à un nom de fichier distinct sans écraser les anciennes sauvegardes. Des solutions variées ont été proposées: renommer chaque sauvegarde avec une date, utiliser des noms comme sauv_lundi.sql, ou regrouper les sauvegardes dans des répertoires distincts pour éviter l écrasement. Des exemples de scripts Windows, Linux et même du code C ont été partagés, couvrant jour.exe et mysqldump, et des solutions envisagées incluent l'utilisation de dates dans les noms et l'organisation par répertoires.

Bobot (l’IA à votre service)
  1. bonjour j'aimerai aussi faire la meme chose mais moi je voulais créer un batch pour faire un sauvegarde planifié d'une base de données informix

    pour montrer les etapes je voulais exporter la base de données informix vers un répértoire sous unix ensuite créer un batch pour automatisée la sauvegarde chaque jour

    c'est urgent et merci d'avance
    0
    1. Salut,
      Je connais pas blat mais à mon avis, tu dois faire une boucle:
      cd %sourceFolder%
      for /F "tokens=1-4 delims= " %%a in ('dir *.log') do if exist %%d blat %%d -subject %Subject% -to %Receiver% -cc %Cc% -attach %ContentFolder%\report.txt
      toute la boucle for sur la meme ligne....le souci est que si tu as 100 fichiers log, tu recevras 100 mails....
      Si tu en veux qu'un, je pense qu'en faisant un fichier temporaire, tu devrais pouvoir t'en sortir!!!
      J'espere ca pourra t'aider!!
      @+
      0
      1. Je souhaiterais faire un script d'envoie de notifcation de sauvegarde

        Le pricipe et de copié mon fichier .log de ntbackup vers un fichier txt puis ensuite me l'envoyé par mail via un utilitaire qui s'appel blat
        Neanmoins je ne m'en sors pas dutout

        Voici mon script j'ai un problème avec l'envoie de mail via blat avec mon script

        @echo

        set Sender=backup@mondomaine.fr
        set Receiver=technicien@mondomaine.fr
        set Cc=administrateur@mondomaine.fr
        set Subject="Test Rapport de sauvegarde"
        set Host=mondomaine.fr
        set Sourcefolder="C:\Documents and Settings\technicien.mondomaine\Local Settings\Application Data\Microsoft\Windows NT\NTBackup\data"
        REM Sourcefolder = dossier d'origine du fichier *.log créé par NTBackup. (Backup01, Backup 02, Backup03...)
        set Contentfolder="c:\logntbackup"
        REM Contentfolder dossier ou est copié le fichier avant l'envoi par mail.

        echo F | xcopy /d %Sourcefolder%\*.log %Contentfolder%\report.txt
        REM J'effectue une copie du fichier source (*.log) dans le dossier cible (*.log ou *.txt par exemple)

        blat -install %Host% %Sender%
        REM installation de blat
        blat %sourceFolder%\*.log -subject %Subject% -to %Receiver% -cc %Cc% -attach %ContentFolder%\report.txt
        REM Utilisation de blat pour l'envoi du fichier report.txt par mail.

        Le message d'erreur qui m'affiche est :

        unknown error code 123 when trying to open C:\Documents and Settings\technicien.mondomaine\Local Settings\Application Data\Microsoft\Windows NT\NTBackup\data\*.
        log
        0
        1. ah bah oui, effectivement...

          merci bien une fois de plus. Comme quoi, on fait souvent des erreurs d'inattention en programmation :/

          Merci encore ^^

          Je met en résolu, je n'ai plus de problème pour le moment.
          0
          1. mysqldump -u root -proot macad > backup\%JOUR%
            Tu n'as pas besoin de backup\%jour% juste %jour%
            mysqldump -u root -proot macad >%JOUR%
            tu es deja dans le repertoire backup...
            sinon il faudrait que tu aies:
            d:
            --backup
            ----backup
            0
            1. voici ma nouvelle architecture

              D:\
              ------backup
              ----------sauv_macad.bat
              ----------jour.exe
              ----------<mes_fichiers_de_sauvegarde.sql>

              voici mon fichier "jour.exe"

              #include <stdio.h>
              #include <time.h>
              #include <string.h>

              int main ()
              {
              FILE*pfile;
              char* jour[7]={"dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"};
              pfile=fopen("D:\\backup\\jour.txt","w");
              time_t rawtime;
              struct tm * timeinfo;
              time ( &rawtime );
              timeinfo = localtime ( &rawtime );
              fwrite (jour[timeinfo->tm_wday] , 1 ,strlen(jour[timeinfo->tm_wday])*sizeof(char) , pfile );
              fclose(pfile);
              return 0;
              }


              et voici mon fichier "sauv_macad.bat"

              @ECHO OFF

              @ECHO Vous avez choisis de sauvegarder la base menagerie

              D:
              cd\backup
              SET CHEMIN = D:\backup\
              SET BASE = macad
              SET REUSSI=Sauvegarde de %BASE% reussi
              SET ECHEC=Sauvegarde de %BASE% echouee
              jour.exe
              for /F %%a in (jour.txt) do set jour=sauv_%%a.sql

              mysqldump -u root -proot macad > backup\%JOUR%

              @if %ERRORLEVEL% EQU 0 echo %REUSSI% le %date% >> %CHEMIN%log.txt
              @if %ERRORLEVEL% GEQ 1 echo %ECHEC% le %date% code erreur : %ERRORLEVEL% >> %CHEMIN%log.txt

              del /Q jour.txt

              rem bmail -s <serveur smtp> -t dikmas.che@wanadoo.fr -f sauvegarde@itc-alstom.com -h -a "Sauvegarde de <serveur>" -b "%ECHEC% le %DATE_today% a %TIME_today% code erreur : %ERRORLEVEL%"

              pause


              Avec ceci, j'ai l'erreur que j'ai dis au message précédent.
              0
              1. #include <stdio.h>
                #include <time.h>
                int main ()
                { FILE*pfile;
                char* jour[7]={"dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"};
                pfile=fopen("c:\\TON_CHEMIN\\jour.txt","w");
                time_t rawtime;
                struct tm * timeinfo;
                time ( &rawtime );
                timeinfo = localtime ( &rawtime );
                fwrite (jour[timeinfo->tm_wday] , 1 ,strlen(jour[timeinfo->tm_wday])*sizeof(char) , pfile );
                fclose(pfile);
                return 0;
                }
                change le pfile=fopen("D:\\backupmysql \\jour.txt","w");
                recompile l'exe et ca devrait etre bon...enfin j'espere!!
                0
                1. J'ai un nouveau problème

                  j'ai donc mis mes scripts sur un serveur, pour sauvegarder les vrais bases à sauvegarder et j'ai comme erreur :

                  the system cannot find the path specified
                  0
                  1. Tout marche
                    Merci beaucoup. Sans toi je n'aurais pas beaucoup avancé.
                    0
                    1. Donc, lorsque la sauvegarde reussi j'ai droit à la ligne :

                      auvegarde de menagerie reussi le sauv_mercredi.sql 29/10/2008 10:53:32,95

                      en revanche, j'ai aussi droit à l'erreur :

                      'else' n'est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commandes.

                      par conséquent, lorsqu'il y a une erreur, rien ne s'écrit dans le fichier log.txt.

                      edit :

                      j'ai remplacé la ligne avec "else" par :

                      @if %ERRORLEVEL% GEQ 1 echo %ECHEC% le %JOUR% code erreur : %ERRORLEVEL% >> D:\backupmysql\log.txt

                      et ça fonctionne.
                      0
                      1. d:
                        cd\backupmysql
                        SET REUSSI=Sauvegarde de menagerie reussi
                        SET ECHEC=Sauvegarde de menagerie echouee
                        jour.exe
                        for /F %%a in (jour.txt) do set jour=sauv_%%a.sql
                        mysqldump -u root -proot menagerie > menagerie\%JOUR%
                        @if %ERRORLEVEL% EQU 0 echo %REUSSI% le %JOUR% %date% %time%>>log.txt
                        else echo %ECHEC% le %JOUR% %date% %time%code erreur : %ERRORLEVEL% >>log.txt
                        del /Q jour.txt

                        essaie cela...j'ai rajouter la date et l'heure pour avoir un peu plus d'info...
                        0
                        1. maintenant oui.
                          Comme un idiot j'avais oublié de changer le cd\path

                          j'ai fait quelques tests, notamment pour voir si, lorsqu'il y a une erreur lors de la sauvegarde, celle ci s'inscrit bien dans le fichier "log.txt"
                          J'ai donc lancé la sauvegarde après avoir mis un nom de base qui ne correspond pas à la mienne. Il me met une erreur comme quoi il trouve pas la table.
                          Je vais vérifier le fichier de sauvegarde de la table : l'ancien a bien été écrasé par le nouveau, la sauvegarde n'a pas été faite. jusque là, rien d'anormal.
                          Je vais voir mon fichier de log et la je vois la ligne : Sauvegarde de menagerie reussi le sauv_mercredi.sql
                          C'est un peu embêtant qu'il me dise qu'elle est réussit alors qu'elle a échouée.
                          0
                          1. @ECHO OFF

                            @ECHO Vous avez choisis de sauvegarder la base menagerie

                            d:
                            cd\backupmysql
                            jour.exe
                            for /F %%a in (jour.txt) do set jour=sauv_%%a.sql
                            mysqldump -u root -proot menagerie > menagerie\%JOUR%
                            del /Q jour.txt
                            SET REUSSI=Sauvegarde de menagerie reussi
                            SET ECHEC=Sauvegarde de menagerie echouee
                            @if %ERRORLEVEL% EQU 0 echo %REUSSI% le %JOUR% >>log.txt
                            @if %ERRORLEVEL% GEQ 1 echo %ECHEC% le %JOUR% code erreur : %ERRORLEVEL% >>log.txt

                            Ton batch ressemble bien à cela?
                            0
                            1. ça marche.

                              Mais lors de l'exécution du batch j'ai une erreur :

                              le chemin spécifié est introuvable.

                              la sauvegarde se fait correctement et il ne me retourne pas d'erreur dans mon fichier log.
                              0
                              1. cd\PATH
                                jour.exe
                                for /F %%a in (jour.txt) do set jour=sauv_%%a.sql
                                mysqldump -u root -proot menagerie > menagerie \%JOUR%
                                del /Q jour.txt

                                je pense que cela devrait faire l'affaire!!
                                Dit moi si oui ou non...
                                0
                                1. bon, la sauvegarde se fait. Mais il y a quelques soucis.
                                  Pour que tu comprenne je vais te donner mon architecture

                                  D:\
                                  ------backupmysql
                                  -------------menagerie
                                  -------------<emplacement_où_je_voudrais_mes_fichiers_de_sauvegarde.sql>
                                  ------jour.exe
                                  ------sauv_jours.bat

                                  donc, le fichier "sauv_mercredi" se créé bien, mais directement dans le répertoire "backupmysql". De plus, il lui manque l'extension ".sql". par conséquent, la restauration sera impossible.

                                  J'ai cherché où je pouvais modifier cela dans l'exécutable, mais j'avoue que j'ai un peu du ma
                                  0
                                  1. Le batch semble correct!! Il faudra bien mettre le jour.exe dans le repertoire où tu lance le batch...
                                    DSL c'est string.h...
                                    0
                                    1. J'ai la même erreur.

                                      C'est bien #include <sting.h> ? Après tout je peux mal avoir tapé ^^

                                      edit : je viens de voir cette ligne d'erreur : sting.h: No such file or directory.

                                      Pour le batch, j'aimerais savoir si mon fichier est bon :

                                      @ECHO OFF

                                      @ECHO Vous avez choisis de sauvegarder la base menagerie

                                      cd\PATH
                                      jour.exe
                                      for /F %%a in (jour.txt) do set jour=sauv_%%a
                                      mysqldump -u root -proot menagerie > %JOUR%
                                      del /Q jour.txt

                                      SET REUSSI=Sauvegarde de menagerie reussi
                                      SET ECHEC=Sauvegarde de menagerie echouee

                                      @if %ERRORLEVEL% EQU 0 echo %REUSSI% le %JOUR% >> D:\backupmysql\log.txt
                                      @if %ERRORLEVEL% GEQ 1 echo %ECHEC% le %JOUR% code erreur : %ERRORLEVEL% >> D:\backupmysql\log.txt
                                      0
                                      • 1
                                      • 2