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 GNU Discussion :

Renvoi d'erreur commande mysql


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 4
    Par défaut Renvoi d'erreur commande mysql
    Bonjour,

    voila pour faire simple j'ai besoin de renvoyer la sortie d'erreur dans un fichier texte de ma commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DATABASES="$( mysql -u $USER -p$DBPASS -Bse 'show databases;')"
    j'ai testé quelques commandes dont le "2>>$TMP_ERROR (fichier log d'erreur)" à la fin mais sans succès
    Sur mon fichier log figurant mes tables aussi

    Etant nouveau sur linux et donc shell je suis un peu perdu ...

    je vous remercie d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Hello,

    Tout ceci est un petit peu flou.

    A quoi sert ta variable DATABASES?
    Peux-tu nous montrer l’entièreté de ton script?
    Où as-tu placé ce fameux "2>>$TMP_ERROR"? En executant ton script? Dans ton script?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 4
    Par défaut
    bon comme quoi on peut y arriver, en essayant des solutions au hasard ....

    je donne la solution que j'ai trouvée au cas où

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DATABASES="$(`mysql -u $USER -p$DBPASS -Bse 'show databases;' 2>>$TMP_ERROR` )"

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 4
    Par défaut
    bon alors maintenant ça marche plus , je vais devenir fou

    il s'agit d'un script de backup d'une base de données
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     TMP_ERROR="tmp_error.log"
    TMP_LOG="tmp_backup.log"
    >$TMP_LOG
    >$TMP_ERROR
    echo "-- Rapport généré automatiquement " >> $TMP_LOG
    echo "" >> $TMP_LOG
     
    # edebut de la procedure de sauvegarde
    echo "["$DATE_PRECISE"] - MySQL : DEBUT sauvegarde de la base $NOM_BASE" >> $TMP_LOG
     
    #USER="test" 
     
    # On liste toutes les bases de données auquel l'utilisateur a access
     
    DATABASES="$( `mysql -u $USER -p$DBPASS -Bse 'show databases;' 2>>$TMP_ERROR` )"
     
     
     
     
     
    # Si une erreure survient pendant la liste des bases
    if [ ! $? -eq 0 ];
    then
              echo "["$DATE_PRECISE"] - Une erreure s'est produite pendant le listage des bases de données" >> $TMP_LOG
            cat $TMP_LOG >> $LOG
        cat $TMP_ERROR >> $LOG
        #rm $TMP_ERROR
        #rm $TMP_LOG
            $DIALOG --title "erreur" --msgbox 'Une erreure est survenue pendant le listage des bases de donnees' 0 0
            exit 1
    fi
     
     
    # Boucle : pour chaque base , afin de trouver la bonne
    for BASE in $DATABASES
    do
     
        # test de la base en cour pour savoir si elle correspond à celle que l'on veut
        if [ "$BASE" = "$NOM_BASE" ];
        then
     
     
        # Analyse de la base
        mysqlcheck -u $USER -p$DBPASS -c -a $BASE 2>>$TMP_ERROR
     
        echo "["$DATE_PRECISE"] - Sauvegarde de la base '"$BASE"'" >> $TMP_LOG
     
        # Sauvegarde de la baseBACKUP
     
        NOMFICHIER=$BASE"_"$DATE_PRECISE".sql"
     
        (mysqldump -h $HOST -u $USER -p$DBPASS --force $BASE > "$NOMFICHIER") 2>>$TMP_ERROR 
     
        # --force = Continue même si une erreur SQL survient durant l'export.
     
            # Une erreure pendant la sauvegarde de la base
            if [ ! $? -eq 0 ];
            then
                    rm -rf $DATE
                    echo "["$DATE_PRECISE"] - Une erreure est survenue pendant la sauvegarde de la base '"$BASE"'" >> $TMP_LOG
                       cat $TMP_LOG >> $LOG
                       rm $TMP_LOG
            cat $TMP_ERROR >> $LOG
            rm $TMP_ERROR    
                   $DIALOG --title "erreur" --msgbox "Une erreure est survenue pendant la sauvegarde de la base $TEST" 0 0
                       exit 1       
        fi
     
         fi
    done
    la variable DATABASES contient la liste des bases de données présente dans mon serveur, il s'agit en faite d'en sélectionner une seule ($NOM_BASE).

    Mais il m'a été demandé qu'en cas d'erreur, le retour d'erreur soit écrit sur mon fichier log

  5. #5
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    operateur@undertaker:~$ mysql -u root -p -Bse 'show databases' 2> err 1> liste
    Enter password: 
    operateur@undertaker:~$ cat 1
    cat: 1: Aucun fichier ou répertoire de ce type
    operateur@undertaker:~$ cat liste
    information_schema
    cacti
    centreon
    centstatus
    centstorage
    compendium
    savoirs
    eco
    fengoffice
    documents
    mails
    spams
    mysql
    ndo
    ndoutils
    perso
    plan_migration2_1270549207283
    postfix
    test
    test_2
    chronologie
    grants
    mindmaps
    velo
    operateur@undertaker:~$ cat err
    operateur@undertaker:~$
    bref la solution à ton problème est bien de délimiter les messages avec 2> fichier comme tu l'a fait mais de générer la liste des bases avec 1> liste

    puis de réaliser le traitement par exemple avec une boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while read ligne
    do
    mysqldump ....TESOPTIONS....... --database $ligne | gzip > $ligne.$(date +%Y%m%d).gz 1> /tmp/$file.log 2> /logs/err/$file.err
    done < liste

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut

    si je ne met pas les backticks (`), pour moi ça fonctionne : j'ai bien le nom des bases de données dans la variable, et les messages d'erreurs dans le fichier_log
    ...
    ?
    si je laisse les backticks, le shell tente d'exécuter le nom de la première base de données => erreur !!!
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 4
    Par défaut
    Honte à moi, je me suis perdu avec les ` (que j'ai pas encore assimilé) mais bon oui la solution marche N Bah.

    Je crois que je me suis embrouillé avec les >&1, 2>, ....


    Enfin merci quand de m'avoir répondu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Erreur commande "INSERT INTO"
    Par dieu08 dans le forum JDBC
    Réponses: 3
    Dernier message: 22/10/2012, 16h15
  2. Réponses: 9
    Dernier message: 24/11/2008, 13h11
  3. erreur access denied pour commande mysql : DEBUTANT
    Par flamant dans le forum Administration
    Réponses: 1
    Dernier message: 19/07/2008, 01h29
  4. correspondances commandes mysql et postgre
    Par jame_s dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 03/01/2005, 20h41
  5. Erreur connexion mysql
    Par bodbod dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/07/2004, 09h28

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