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.
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.
-
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 -
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!!
@+
-
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 -
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. -
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 -
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. -
#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!! -
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 -
Tout marche
Merci beaucoup. Sans toi je n'aurais pas beaucoup avancé. -
Cool!!
Tout marche alors?? -
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. -
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... -
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. -
@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? -
ç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. -
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... -
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 -
Le batch semble correct!! Il faudra bien mettre le jour.exe dans le repertoire où tu lance le batch...
DSL c'est string.h... -
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 -
rajoute la librairie sting.h
- 1
- 2
Suivant