|
|
|
|
Strumenti |
17-10-2006, 12:55 | #1 |
Senior Member
Iscritto dal: May 2001
Città: Roma
Messaggi: 313
|
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 |
17-10-2006, 13:48 | #2 |
Senior Member
Iscritto dal: May 2001
Città: Roma
Messaggi: 313
|
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 |
17-10-2006, 20:53 | #3 | |
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5691
|
Quote:
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". |
|
17-10-2006, 21:19 | #4 |
Senior Member
Iscritto dal: May 2001
Città: Roma
Messaggi: 313
|
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 |
17-10-2006, 21:52 | #5 |
Senior Member
Iscritto dal: May 2001
Città: Roma
Messaggi: 313
|
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 |
18-10-2006, 08:22 | #6 |
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5691
|
mettiamo che crei una struttura di direcftory del tipo:
Codice:
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 |
18-10-2006, 16:00 | #7 |
Senior Member
Iscritto dal: May 2001
Città: Roma
Messaggi: 313
|
grazie ! funziona alla grande
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?? |
18-10-2006, 19:34 | #8 |
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5691
|
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 ) Codice:
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 |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:25.