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

MySQL Discussion :

[BATCH Windows] Commande MySQL et gestion des erreurs


Sujet :

MySQL

  1. #1
    Membre à l'essai

    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Points : 24
    Points
    24
    Par défaut [BATCH Windows] Commande MySQL et gestion des erreurs
    Bonjour,
    Je n'arrive pas dans un script en bach a rediriger les erreurs d'une commande MySQL vers un fichier de log.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SET user=USER
    SET mdp=MOTDEPASSE
    SET base=TEST
    SET host=LOCALHOST
     
    MYSQL -h%host% -u%user% -p%mdp% %base% --execute="MA COMMANDE SQL QUI FAIT UNE ERREUR OU UN WARNING" > monlog.log
    Lorsque je fais cela le fichier monlog.log reste désespérement vide.
    J'ai essayé la commande SHOW WARNINGS mais les résultats sont vraiement aléatoires suivant s'il y a des erreurs des warnings etc.

    Ya t'il une syntaxe particulière à connaitre ?

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    en alternative, tu peux utiliser la commande tee du client mysql. Elle doit également être accessible dans les paramètres (un truc du genre --tee=...).
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  3. #3
    Membre à l'essai

    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Points : 24
    Points
    24
    Par défaut
    Effectivement j'ai parcouru 10 fois la doc sans la voir celle la...
    Bref j'ai essayé et c'est pas mieux

    Ma commande:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MYSQL -h%host% -u%user% -p%mdp% %base% --tee="monlog.log" --execute="ALTER TABLE Rep_Int ENGINE=MyISAM;"
    Lors de l'execution j'ai cette manifique erreur:
    ERROR 1217 (23000) at line 1: Cannot delete or update a parent row: a foreign key constraint fails
    Qui est normale par ailleurs, je sais comment y remédier mais je veux pouvoir en avoir une trace dans un log.
    Et donc dans mon fichier log.. bah toujours rien. Il est bien créé mais vide.

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Il y a un buffer d'écriture. Ton fichier ne sera donc rempli que lorsque tu quitteras le client mysql.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  5. #5
    Membre à l'essai

    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Points : 24
    Points
    24
    Par défaut
    Alors le buffer se vide bien dans le fichier au moment de la fermeture du client.
    Cela marche parfaitement si on lance le client, puis qu'on execute des requetes a la mano avant de quitter. Par contre si l'on veut l'executer en batch et passer les requettes par redirection (<) ou par l'option --execute bah ca ne marche plus.
    J'ai essayé de rajouter la commande exit à la fin de ma requette mais ca ne change rien.

    Une idée ?

  6. #6
    Membre à l'essai

    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Points : 24
    Points
    24
    Par défaut
    J'ai continué à chercher de mon côté mais rien à faire.

    Mon dernier test de batch:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ECHO tee monlog.log; > temp.sql
    ECHO ALTER TABLE Rep_Int ENGINE=MyISAM; >> temp.sql
    ECHO exit >> temp.sql
     
    MYSQL -hLOCALHOST -uUSER -pPASSWORD TEST --execute="source temp.sql";
    quand j'execute le script depuis la commande mysql en faisant un "source temp.sql" j'ai bien mes résultats dans le log mais pas quand j'execute le batch

  7. #7
    Membre à l'essai

    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Points : 24
    Points
    24
    Par défaut
    Après moult tests j'en arrive a penser que la commande "tee" ne marche pas du tout lorsque l'on souhaite executer le contenu d'un script en 1 seule ligne de batch.

    Reste la redirection (>) vers un fichier qui avec la commande mysql se comporte de façon étrange:

    Cela fonctionne lorsque la requette sql retourne un résultat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MYSQL -hLOCALHOST -uUSER -pMDP TEST --execute="select count(*) from dual" > monlog.log
    Cela ne marche pas en revanche lorsque la requette provoque une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MYSQL -hLOCALHOST -uUSER -pMDP TEST --execute="select blabla from dual" > monlog.log
    J'en viens donc à me demander si ce n'est pas la commande mysql elle même qui pose problème.

  8. #8
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Je viens de faire quelques tests.

    Pour le tee, il est bien précisé "Does not work in batch mode". Désolé pour la fausse piste !

    Tu peux utiliser --force pour que le script continue même après une erreur, et -vvv pour avoir les messages de bonne exécution. Néanmoins, il ne semble pas y avoir de moyen pour mettre les messages d'erreur dans le fichier de résultat. Le mieux que tu puisses faire serait de dire que si une requête n'est pas suivie d'un résultat ni d'un message de bon fonctionnement, c'est qu'il y a eu une erreur...

    Apparemment, mysql.exe fonctionne sur le principe des trois flux : un flux d'entrée (<), un flux de sortie standard (>) et un flux de sortie en erreur. Il semblerait qu'il n'y ait rien de prévu pour rediriger ce flux vers un fichier. J'imagine que tu pourrais le faire en encapsulant mysql.exe dans un script externe capable de rediriger ce flux, Perl par exemple. Eventuellement, tu peux aussi aller faire un tour sur le forum Batch Windows pour voir s'il y a un truc pour capturer un flux d'erreur.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  9. #9
    Membre à l'essai

    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Points : 24
    Points
    24
    Par défaut
    Merci pour ta réponse, ca m'a rappelé l'existance du -- force et m'a donné une idée:

    Si la commande avec l'erreur ne provoque pas l'arret du script on peut lancer ensuite une commande pour afficher les erreurs. SHOW WARNINGS; affichant a la fois les warnings ET les erreurs ca donne ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MYSQL -hLOCALHOST -uUSER-pPWD TEST --execute="ALTER TABLE Rep_Int ENGINE=MyISAM;SHOW WARNINGS;" --force >> monlog.log
    Une ligne de code et ca fonctionne. Alléluia !!!

    EDIT: J'ajoute une précision. L'ordre des options de la commande mysql semble avoir une importance car si l'on place le --force avant le --execute à ce moment là ça ne marche plus.

  10. #10
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Joli contournement, bravo !
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

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

Discussions similaires

  1. commande shell avec gestion des erreurs
    Par nymus7 dans le forum Programmation et administration système
    Réponses: 0
    Dernier message: 06/08/2008, 13h59
  2. gestion des erreurs mysql
    Par PAYASS59 dans le forum Administration
    Réponses: 1
    Dernier message: 04/07/2008, 08h54
  3. gestion des erreurs mysql
    Par sefir dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 12/12/2007, 13h23
  4. Gestion des erreurs sur une commande multiple
    Par domiq44 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 05/10/2006, 15h03
  5. [VB6 + Mysql]Gestion des erreurs de connexion
    Par Deejoh dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 25/01/2006, 20h01

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