• User

    Aiuto per comando mysql da bash

    devo richiamare da bash un file.sql che ha come contenuto i comandi:

    "DROP TABLE IF EXISTS articles;
    CREATE TABLE articles ( ........
    ........ ecc"

    qual'è il modo più corretto per richiamarlo da bash?

    mysql -hlocalhost -unome -ppass my_db -e"????????" :mmm:


    pensavo di usare LOAD DATAIN FILE ma quanto ho capito serve per caricare i dati in una tabella, quindi tutt'altra funzione :mmm:


  • User

    trovato !!

    mysql -hlocalhost -unome -ppass my_db < /path/al/file.sql

    semplice no !!!

    adesso il problema è fare un ciclo all'interno del file.sh
    che mi legga i file in una cartella e per ogni file mi faccia lo stesso comando sql

    bho!!! :mmm: :mmm: :mmm: :mmm:

    se volessi rendere variabili il nome del db e il file.sql così andrebbe bene??

    DB=my_db
    FILE=/path/al/file.sql #lo devo mettere frà virgolette??

    mysql -hlocalhost -unome -ppass $DB < $FILE

    :mmm:


  • User Attivo

    @ramon said:

    adesso il problema è fare un ciclo all'interno del file.sh
    che mi legga i file in una cartella e per ogni file mi faccia lo stesso comando sql

    bho!!! :mmm: :mmm: :mmm: :mmm:

    se volessi rendere variabili il nome del db e il file.sql così andrebbe bene??

    DB=my_db
    FILE=/path/al/file.sql #lo devo mettere frà virgolette??

    mysql -hlocalhost -unome -ppass $DB < $FILE

    :mmm:

    Se devi farlo per ogni file .sql della cartella ed eseguirlo al suo interno

    
    #!/bin/bash
    DB=my_db
    for FILE in *.sql; do
       mysql -hlocalhost -unome -ppass $DB < $FILE
    done
    

  • User

    più o meno avevo risolto così

    DBS=mysql -hlocalhost -unome -ppass -e"show databases"
    for db in $DBS ;
    do
    mysql -hlocalhost -unome -ppass $db < /path/al/$db.sql
    done

    però vogio andare oltre:
    voglio che per ogni db apra una cartella, con lo stesso nome del db, e legga tutti i file.sql che ci trova e che vanno inseriti in quel db

    come lo vedi come metodo ??


  • User Attivo

    @ramon said:

    però vogio andare oltre:
    voglio che per ogni db apra una cartella, con lo stesso nome del db, e legga tutti i file.sql che ci trova e che vanno inseriti in quel db

    come lo vedi come metodo ??

    i nomi dei db dove dovrebbe prenderli? :mmm:


  • User

    @Nicola said:

    i nomi dei db dove dovrebbe prenderli? :mmm:

    DBS=mysql -hlocalhost -unome -ppass -e"show databases"

    comando SHOW DATABASES


  • User Attivo

    @ramon said:

    DBS=mysql -hlocalhost -unome -ppass -e"show databases"

    comando SHOW DATABASES

    Ah, ma così dovresti lavorarti un po' l'output che ricevi, prima di ripassarlo al ciclo, perchè avresti una roba in ascii del genere assegnata a $DBS 😉

    
    +------------+
    | Database   |
    +------------+
    | db1        |
    | db2        |
    | db3        |
    +------------+
    
    

  • User

    @Nicola said:

    Ah, ma così dovresti lavorarti un po' l'output che ricevi, prima di ripassarlo al ciclo, perchè avresti una roba in ascii del genere assegnata a $DBS 😉

    e no allora non và
    😞


  • User

    più o meno qualcosa del genere

    ?cerca le cartelle
    CARTELLE=array ( nomi cartelle )

    for folder = $CARTELLE
    do
    ?leggi i nomi dei file.sql in ogni $folder
    FILEDB=array ( file.sql )
    for filesql = $FILEDB
    do
    mysql -hlocalhost -unome -ppass $folder < $filesql
    done
    done

    exit