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 :

Lancer une requête sous MySQL depuis un script Unix


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 137
    Points : 65
    Points
    65
    Par défaut Lancer une requête sous MySQL depuis un script Unix
    Bonjour à tous,

    Je cherche à lancer ce script dans un cron.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     #/usr/bin/bash
     
        DB_USER='user'
        DB_PASS='test'
        DB='arpwatch'
     
        mysql -u "$DB_USER --enable-local-infile --password="$DB_PASS" --database="$DB"
        LOAD DATA LOCAL INFILE '/var/lib/arpwatch/arp.dat' INTO TABLE fichierdat FIELDS ENCLOSED BY "" LINES TERMINATED BY "\n";
    Quand je l’exécute, j'ai le client mysql qui se lance. Y a-t-il possibilité de faire lancer mon script sans que le client s'affiche justement ?

    Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 595
    Points : 19 477
    Points
    19 477
    Par défaut
    Bonjour,

    il faudrait vérifier dans la page man, il y a une option -e, ou -c.

    il aurait fallu faire un minimum de recherche avant de poster, parce que cette question revient ±régulièrement.

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 137
    Points : 65
    Points
    65
    Par défaut
    Merci pour la réponse !

    Je peux juste te demander une précision , j'ai ajouté le -e mais j'ai des soucis avec l'encapsulation des quotes.

    Si tu peux juste m'expliquer comment faire échappement des caractères, car j'ai du mal avec les doubles quotes de la délimitation de la ligne.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 595
    Points : 19 477
    Points
    19 477
    Par défaut
    je remplacerais les apostrophes par des guillemets, et engloberais la commande entre apostrophes.

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 137
    Points : 65
    Points
    65
    Par défaut
    J'ai essayé comment tu l'as dits voir d'autre variantes mais c'est toujours les doubles guillemets qui posent soucis .....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mysql -u "$DB_USER" --enable-local-infile --password="$DB_PASS" --database="$DB" -e='LOAD DATA LOCAL INFILE  "/var/lib/arpwatch/arp.dat" INTO TABLE fichierdat FIELDS ENCLOSED BY "" LINES TERMINATED BY "\n" ;'

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 595
    Points : 19 477
    Points
    19 477
    Par défaut
    quel est le message d'erreur retourné par mysql ?

    il ne devrait pas y avoir de signe égal après l'option -e, ou alors utiliser l'option longue --execute=,
    et il devrait n'y avoir qu'un guillemet pour ENCLOSED BY.

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 137
    Points : 65
    Points
    65
    Par défaut
    dans l'ordre voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    mysql -u "$DB_USER" --enable-local-infile --password="$DB_PASS" --database="$DB" --execute="LOAD DATA LOCAL INFILE  "/var/lib/arpwatch/arp.dat" INTO TABLE fichierdat FIELDS ENCLOSED BY "" LINES TERMINATED BY "\n" ";
    l'erreur mysql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '/var/lib/arpwatch/arp.dat INTO TABLE fichierdat FIELDS ENCLOSED BY  LINES TERMIN' at line 1
    il devrait n'y avoir qu'un guillemet pour ENCLOSED BY
    En faite mon fichier est représenté sous cette forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    5c:95:ae:2h:d9:fj	192.168.0.3	1404668025         test1        eth0
    Les espaces me servent de délimiteur, du coup sous mysql je dois mettre les doubles guillemets , sous le bash il y a une manip à faire pour l'écrire autrement ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 595
    Points : 19 477
    Points
    19 477
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    mysql -u "$DB_USER" \
          --password="$DB_PASS" \
          --database="$DB" \
          --enable-local-infile \
          --execute='LOAD DATA LOCAL INFILE  "/var/lib/arpwatch/arp.dat"
                     INTO TABLE fichierdat
                     FIELDS ENCLOSED BY "<séparateur>"
                     LINES TERMINATED BY "\n";'
    soit le nombre d'espaces est fixe, soit c'est des tabulations; de toutes façons, il faut les écrire entre les guillemets, et mettre la commande entière entre apostrophes.

    Comment se fait-il que ton bash soit sous /usr/bin/ ?

  9. #9
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 137
    Points : 65
    Points
    65
    Par défaut
    Merci pour l'explication !

    Pour le bash, je t'avoue j'ai toujours fais comme ca, il faut exporter le chemin du bash comme bonne pratique ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 595
    Points : 19 477
    Points
    19 477
    Par défaut
    sur Debian, bash est sous /bin/.
    ça n'a pas d'importance pour ton problème, mais par curiosité, quelle distribution utilises-tu ?

  11. #11
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 137
    Points : 65
    Points
    65
    Par défaut
    J'utilise un ubuntu 12.04.4 TLS

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

Discussions similaires

  1. Lancer une requête depuis un script Unix
    Par schranz dans le forum Débuter
    Réponses: 0
    Dernier message: 13/07/2014, 17h05
  2. [10g] Comment lancer une requête sous forme de " forms"
    Par lionrouge2009 dans le forum Forms
    Réponses: 2
    Dernier message: 06/08/2013, 18h48
  3. Lancer une commande avec pipes depuis un script
    Par theclem35 dans le forum Shell et commandes POSIX
    Réponses: 2
    Dernier message: 08/02/2012, 20h41
  4. Lancer une requête SQL dans un script UNIX
    Par wissem.ba dans le forum Requêtes
    Réponses: 8
    Dernier message: 22/03/2010, 11h56
  5. Lancer une requête sql avec sql plus sous dos
    Par feragne dans le forum Sql*Plus
    Réponses: 12
    Dernier message: 15/10/2008, 14h49

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