2011-01-05 5 views

risposta

31

Mettere [email protected]$pr!nT tra apici:

mysqldump -uroot '[email protected]$pr!nT' --databases app_pro > /srv/DUMPFILE.SQL 

Il problema è che bash interpreta il !. Le stringhe tra virgolette singole non vengono interpretate.

+0

Sto provando solo ad accedere al database e non riesco a far funzionare la password. La mia password termina con un punto esclamativo quindi ho provato a inserire l'intero comando -p tra virgolette singole ma ottengo ancora "Errore 1045 (28000): Accesso negato per l'utente 'admin' @ 'localhost' (usando la password: YES)" – Lopsided

0

Prova

mysqldump -u root --password='[email protected]$pr!nT' app_pro > /srv/DUMPFILE.SQL 
+0

Che non funziona.il $ sarà interepreted all'interno della stringa a virgolette doppie e la shell cercherà una variabile '$ pr', che non esisterà e valuterà una stringa nulla, cambiando la password in' sdfas @ N! nT'. Usare le virgolette singole andrebbe bene, comunque. –

+0

Ha senso. PHP fa lo stesso genere di cose – pulsedemon

11

È necessario uscire dal '!' la password: -

[email protected]$pr\!nT 
+1

Non è abbastanza; il bit '$ pr' verrà interpretato come una sostituzione di variabile, quindi è necessario anche sfuggire il' $ ', o quotare una sola volta l'intera password, o (meglio) inserirla in un prompt separato. –

0

Secondo i distruzioni istruzioni, gli argomenti devono avere doppi trattini. (http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html)

Prova questo:

mysqldump --user=root [email protected]$pr!nT --databases app_pro > /srv/DUMPFILE.SQL 
+0

Non so perché non è documentato lì, ma la pagina man elenca '-ppassword', ecc. – marcog

+0

Interessante. A giudicare dalle altre risposte, il problema non è nel delimitatore dell'argomento, ma piuttosto nel punto esclamativo della password. – JYelton

0

quando si utilizza! in una riga di comando, significa trovare l'ultimo comando di esecuzione che inizia con le lettere seguenti e posizionarlo qui .. vai alla tua riga di comando ed esegui "history" e poi esegui altri comandi, cd, ls, qualunque sia. poi vai! H l'ultimo comando che hai avviato che inizia con la lettera 'h' (in questo caso "cronologia") verrà eseguito.

avrete bisogno di fuggire che botto (!)

2

Le risposte finora schivare il punto che non si dovrebbe mettere la password nella riga di comando. Vedi MySQL's End-User Guidelines for Password Security per come farlo senza rivelare la tua password.

+0

Ovviamente questo non è un problema se si tratta di un comando di una volta ... ma poi penso che avresti solo -p e digiti la password al prompt in quel caso. – mghicks

+0

I comandi di una volta vengono ancora registrati nella cronologia della shell e sono visibili a chiunque abbia l'impressione di eseguire 'ps'. Mettere una password su una riga di comando è una pessima idea. –

0

È possibile disattivare l'espansione della cronologia:

set +o histexpand 
1

Come altri già detto non si dovrebbe mai specificare una password sulla riga di comando in quanto qualsiasi altro processo sulla macchina è in grado di leggerlo. Una soluzione semplice ed efficace per mysql consiste nell'utilizzare un file .my.cnf nella directory home dell'utente che esegue mysql o mysqldump.

Innanzitutto creare in modo sicuro:

sudo touch /root/.my.cnf 
sudo chown 0:0 /root/.my.cnf 
sudo chmod 600 /root/.my.cnf 

quindi assicurarsi /root/.my.cnf contiene qualcosa di simile:

[mysql] 
user=root 
[email protected]$pr!nT 

[mysqldump] 
user=root 
[email protected]$pr!nT 

Si può e deve fare questo per il tuo “normale” (non-root) anche l'account mysql. Quindi non dovrai mai digitare nuovamente la password e rimanere al sicuro. Inserisci un file .my.cnf nella tua home directory con le tue credenziali e assicurati che solo tu possa leggere e scrivere sul file:

touch ~/.my.cnf 
chmod 600 /root/.my.cnf