IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes POSIX Discussion :

Script de sauvegarde


Sujet :

Shell et commandes POSIX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 228
    Par défaut Script de sauvegarde
    Bonjour,
    je suis entrain de réaliser un script sh qui sauvegarde ma base de donné mysql toute les 15 minute automatiquement via crontab


    mes copie de ma base de donnée sont stocké dans /auto/sql

    voila mon script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/bin/sh
    cd /auto/sql
    rm *
    sleep 5
    mysqldump -u root account > account.sql
    mysqldump -u root parma > parma.sql
    mysqldump -u root controle > controle.sql
    sleep 5
    cd /auto/
    tar cvjf savemysql.tar.bz sql/ 
    sleep 5
    cd /auto/sql
    rm *.sql
    mon script dans un premier temps sauvegarde au format sql mes trois bases de donné
    ensuite , il fais une archive nommé savemysql.tar.bz et qui contient les trois base de donné sql
    ensuite il supprime tout les fichier avec extension .sql

    seul probleme c'est que l'ancienne sauvegarde est supprimé

    j'aimerai donc pouvoir cree une archive avec un numero
    exemple:
    savemysql1.tar.bz
    savemysql2.tar.bz
    savemysql3.tar.bz
    et toute les conserver

    comment je peux faire ?

  2. #2
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonjour.

    Tu peux t'inspirer de ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ nb="$(find . -name "savemysql*.tar.bz" -type f|grep -o "[0-9]"|sort -ru|head -1)"
    $ [[ $nb ]] && echo $(( nb+1 )) || echo "1"
    Avec ceci, tu obtiendra toujours le max+1 du nombre {x} de savemysql{x}.tar.bz...
    Il existe toutefois des solutions plus élégantes et poussées comme logrotate par exemple.

    Cordialement,
    Idriss

  3. #3
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 350
    Par défaut
    Bonjour,
    Si tu veux vraiment nommer tes fichiers avec un incrément, dans ce cas, je te conseille de faire comme les rotate logs (exemple):
    savemysql4.tar.bz devient savemysql5.tar.bz
    savemysql3.tar.bz devient savemysql4.tar.bz
    savemysql2.tar.bz devient savemysql3.tar.bz
    etc...
    Puis tu crées directement ton archive sous le nom savemysql1.tar.bz
    L'avantage de faire comme ceci, est que par la suite si on ne veut conserver qu'un nombres précis de fichiers, c'est assez facile à implémenter, puisque l'on sait que la plus vieille archive sera celle avec le plus grand incrément.

    Le bout de code qui fait ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    find . -type f -name 'savemysql*.tar.bz' -printf "%f\n" | sed -e 's/[^0-9]//g' | sort -rn | while read A
    do
    	mv savemysql${A}.tar.bz savemysql$((A+1)).tar.bz
    done
    A rajouter juste avant ta commande tar (il faut être dans le même répertoire que les archives pour que cela fonctionne).
    Puis rajouter le 1 dans le nom de l'archive a ta commande tar.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 228
    Par défaut
    j'ai un petit probleme
    c'est une bonne idée mais j'ai une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #!/bin/sh
    cd /auto/sql
    rm *
    sleep 5
    mysqldump -u root account > account.sql
    mysqldump -u root parma > parma.sql
    mysqldump -u root controle > controle.sql
    cd /auto/
    find . -type f -name 'savemysql*.tar.bz' -printf "%f\n" | sed -e 's/[^0-9]//g' | sort -rn | while read A
    do
    	mv savemysql${A}.tar.bz savemysql$((A+1)).tar.bz
    done
    tar cvjf savemysql.tar.bz sql/ 
    sleep 5
    cd /auto/sql
    rm *.sql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UserAdminOp@ServBSD:/auto # ./copibdd
    find: -printf: unknown primary or operator

  5. #5
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 350
    Par défaut
    Ok, ton OS est un BSD d'après ton prompt, et comme le find est pratiquement différent sur chaque système, on va faire du standard (on pourrait juste retirer le '-print' mais autant être propre):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    find . -type f -name 'savemysql*.tar.bz' | sed -e 's/^.*[^0-9]\([0-9]\+\).tar.bz/\1/g'| sort -rn | while read A
    do
     mv savemysql${A}.tar.bz savemysql$((A+1)).tar.bz
    done
    Et n'oublie pas de modifier ta commande tar en rajoutant le '1' dans le nom du fichier.

    Une petite explication sur la regex du sed:
    Celle-ci est faite pour ne récupérer vraiment que les chiffres dans le nom du fichier juste avant ".tar.bz", pour ton cas, ce n'est pas utile d'être aussi restrictif, mais c'est plus propre.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 228
    Par défaut
    je commence a comprendre , merci de tes explication , par contre j'ai encore une erreur
    oui mon systeme est Freebsd 10

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #!/bin/sh
    cd /auto/sql
    rm *
    sleep 5
    mysqldump -u root account > account.sql
    mysqldump -u root parma > parma.sql
    mysqldump -u root controle > controle.sql
    cd /auto/
    find . -type f -name 'savemysql*.tar.bz' | sed -e 's/^.*[^0-9]\([0-9]\+\).tar.bz/\1/g'| sort -rn | while read A
    do
     mv savemysql${A}.tar.bz savemysql$((A+1)).tar.bz
    done
    tar cvjf savemysql1.tar.bz sql/ 
    sleep 5
    cd /auto/sql
    rm *.sql

  7. #7
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 350
    Par défaut
    Faudrait donner l'erreur car j'ai pas de BSD sous la main et ma boule de cristal est cassée

    Une question bête: est-ce que ton /bin/sh est un vrai sh ou c'est un lien (hard ou symbolique) sur un autre shell compliant sh ?

Discussions similaires

  1. Script pour sauvegarde OVH
    Par d10g3n dans le forum Linux
    Réponses: 6
    Dernier message: 18/12/2006, 16h09
  2. Shell script de sauvegarde
    Par marza dans le forum Shell et commandes GNU
    Réponses: 15
    Dernier message: 22/11/2006, 22h32
  3. Script de sauvegarde FTP
    Par goldorax113 dans le forum Développement
    Réponses: 5
    Dernier message: 09/11/2006, 11h08
  4. Script de sauvegarde sous REDHAT 7.3
    Par florfilla18 dans le forum Linux
    Réponses: 12
    Dernier message: 22/08/2006, 17h03
  5. erreur sur script de sauvegarde
    Par zouetchou dans le forum Langage
    Réponses: 5
    Dernier message: 08/12/2005, 08h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo