2011-01-05 26 views
19

bien por eso es necesario hacer un mysqldump de una base de datos y esto es lo que tengocontraseña de MySQL está arruinando mi volcado

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

pero yo estoy recibiendo este error

-bash: !nT: event not found 

parece haber teniendo dificultades con la contraseña ... cualquier otra forma de MySQL volcado

Respuesta

31

Deja [email protected]$pr!nT entre comillas simples:

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

El problema es que la fiesta está interpretando el !. Las cadenas en comillas simples no se interpretan.

+0

Estoy tratando de acceder a la base de datos y no puedo obtener la contraseña para que funcione. Mi contraseña termina en un signo de admiración, así que he intentado colocar todo el comando -p entre comillas simples, pero sigo recibiendo el "Error 1045 (28000): Acceso denegado para el usuario 'admin' @ 'localhost' (usando la contraseña: SÍ)" – Lopsided

0

Trate

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

Eso no funcionará.los $ se interpretarán dentro de la cadena de comillas dobles y el shell buscará una variable '$ pr', que no existirá y evaluará una cadena nula, cambiando la contraseña a' sdfas @ N! nT'. Sin embargo, usar comillas simples estaría bien. –

+0

tiene sentido. PHP hace el mismo tipo de cosas – pulsedemon

11

Tienes que escapar del '!' la contraseña: -

[email protected]$pr\!nT 
+1

Eso no es suficiente; el bit '$ pr' se interpretará como una sustitución de variable, por lo que también debe escapar el' $ ', o simplemente citar la contraseña completa, o (lo mejor) escribirla en un indicador por separado. –

0

De acuerdo con las destrucciones instrucciones, los argumentos deben tener dobles guiones. (http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html)

Prueba esto:

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

No sé por qué no está documentado allí, pero la página man lista '-pcontraseña', etc. – marcog

+0

Interesante. A juzgar por las otras respuestas, el problema no está en el delimitador del argumento sino en el signo de admiración de la contraseña. – JYelton

0

cuando se utiliza! en una línea de comando, significa, encuentre el último comando de ejecución que comience con las siguientes letras y colóquelo aquí ... vaya a su línea de comando y ejecute "history" y luego ejecute algunos otros comandos, cd, ls, lo que sea. then go! H se ejecutará el último comando ejecutado que comenzó con la letra 'h' (en este caso, "historial").

que necesita para escapar de la explosión que (!)

2

Las respuestas hasta ahora esquiva el punto de que no se debe poner la contraseña en la línea de comandos. Consulte MySQL's End-User Guidelines for Password Security para saber cómo hacerlo sin revelar su contraseña.

+0

Por supuesto, esto no es un problema si se trata de un comando de una sola vez ... pero entonces creo que simplemente p-p y escriba la contraseña en el aviso en ese caso. – mghicks

+0

Los comandos de un solo uso aún se registran en el historial de shell y son visibles para cualquier persona que ejecute 'ps'. Poner una contraseña en una línea de comando es una muy mala idea. –

0

Puede desactivar la expansión de historia:

set +o histexpand 
1

Al igual que otros ya se ha dicho que nunca se debe especificar una contraseña en la línea de comandos, ya que cualquier otro proceso en la máquina es capaz de leerlo. Una solución simple y efectiva para mysql es usar un archivo .my.cnf en el directorio de inicio del usuario que ejecuta mysql o mysqldump.

cree por primera vez de una manera segura:

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

continuación, asegúrese de /root/.my.cnf contiene algo como esto:

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

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

Usted puede y debe hacer esto para su (no root “normal”) cuenta de mysql también. Entonces nunca más tendrá que escribir su contraseña y aún así estar seguro. Simplemente ponga .my.cnf en su propio directorio de inicio con sus credenciales y asegúrese de que solo usted puede leer y escribir en el archivo:

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