2009-12-11 6 views
8

E 'possibile creare database mysql da fabric in modo dinamico.howto per creare dinamicamente il database mysql dal fabric

Questo sembra che si blocca alla richiesta di password

run('mysql -u %s -p %s -h %s ' % (env.mysqluser, env.mysqlpassword, env.mysqlhost), pty=True) 
run('CREATE DATABASE %s; ' % (dataname), pty=True) 
run('exit', pty=True) 

risposta

4

Prova invece

run('echo "CREATE DATABASE %s;"|mysql --batch --user=%s --password=%s --host=%s' % (dataname, env.mysqluser, env.mysqlpassword, env.mysqlhost), pty=True) 
+5

Non che salvare la password nel registro della cronologia della shell ? –

+0

@Stavros Considerando che questi sono strumenti aperti che sono liberamente disponibili, dovresti probabilmente cercare di controllarti piuttosto che chiedermelo. –

+14

Considerando che il mio controllo e non vederlo non ci dimostrerà che non viene memorizzato da nessuna parte, la soluzione migliore è di chiederti (come potresti sapere di più su questo) piuttosto che assumere che ho controllato in ogni posto un buco così critico di sicurezza potrebbe manifestarsi, per non parlare del fatto che non tutti quelli che lo vedono potrebbero essere inclini ad affrontare il problema di controllare da soli. Grazie per la risposta, però (e, per la cronaca, non ho visto la password o il comando nel registro della shell). –

21

C'è un modo migliore di fare questo usando mysqladmin:

run('mysqladmin -u %s -p%s create %s' % (user, password, dbname)) 
+0

Grazie Jeffrey, questo ha funzionato e consumato meno larghezza del carattere :) –

+0

Non salverà la password nel registro cronologia shell? – ioanb7

0

Io uso il seguito da un solo rivestimento tramite linea di comando

mysql -uroot -prootpassword -e "CREATE DATABASE dbname"; 

chiave è l'opzione -e.
se ti piace avere script bash con variabili in dB/user/pass ed eseguirlo come ./myscript poi

#!/bin/bash 
DB="mydb" 
USER="user1" 
PASS="pass_bla" 

mysql -uroot -prootpassword -e "CREATE DATABASE $DB CHARACTER SET utf8 COLLATE utf8_general_ci"; 
mysql -uroot -prootpassword -e "CREATE USER [email protected]'127.0.0.1' IDENTIFIED BY '$PASS'"; 
mysql -uroot -prootpassword -e "GRANT SELECT, INSERT, UPDATE ON $DB.* TO '$USER'@'127.0.0.1'";