View Full Version : aiuto comandi 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"????????"
----
pensavo di usare LOAD DATAIN FILE ma quanto ho capito serve per caricare i dati in una tabella, quindi tutt'altra funzione :help:
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!!!
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
lo devo mettere frà virgolette??
se contiene degli spazi sì, ma è buona norma metterle sempre.
se devi eseguire più file sql puoi anche mettterli tutti in una variabile e ciclare con un "for".
si effettivamente devo eseguire il comando su più files .sql
e per di più devo fare in modo che più file .sql siano inseriti nello stesso db
db1 = a.sql, b.sql, c.sql
db2 = e.sql, f.sql
db3 = h.sql, n.sql
e così via
ho pensato di mettere i file.sql in cartelle separate che si chiamano con il nome del db far leggere i file e farli inserire nel db che ha il nome della cartella.....
.. ma da quì a realizzarlo e tutta un'altra storia :muro:
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
mettiamo che crei una struttura di direcftory del tipo:
DB1/
file1.sql
file2.sql
DB2/
file3.sql
file4.sql
puoi realizzare quello che vuoi con:
for db in $(ls -d *) ;do for file in $(ls $db) ; do mysql -hlocalhost -unome -ppass $db < $file; done ; done
eseguito nella directory che contiene DB1 e DB2
grazie ! funziona alla grande :D :D :D :D
e se volessi risolvere la cosa con array?
db1= (alfa.sql beta.sql)
db2=(mela.sql pera.sql prugna.sql)
ho letto che bash non supporta array multidimensionali, quindi non posso usare cicli annidati su un unico array
DB= (db1= (alfa.sql beta.sql) db2=(mela.sql pera.sql prugna.sql))
dovrei scrivere i vari arrei in un file;
ma poi come faccio a farlo leggere alla funzione del bash in modo che legga array e non stringhe ??
e che processi riga per riga rispetto alla funzione??
in linea di massima quando posso cerco di evitare gli array con bash, son più una rogna che altro.
io farei così (che non vuol dire che non ci sia una soluzione migliore ;) )
listadb="db1 db2"
db1="alfa.sql beta.sql"
db2="mela.sql pera.sql prugna.sql"
for db in $listadb ;do for file in ${!db} ; do mysql -hlocalhost -unome -ppass $db < $file; done; done
anche se hai il difetto di dover aggiornare due variabili ogni volta.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.