2008-09-29 21 views
34

estoy tratando de utilizar mysqldump volcar un esquema, y ​​sobre todo funciona, pero me encontré con una curiosidad: la opción -p o --password parece que está haciendo algo más que establecer la contraseña (como el man página y --help salida dicen debería).¿mysqldump --password realmente hace lo que dice?

Específicamente, parece que está haciendo lo que se indica aquí: http://snippets.dzone.com/posts/show/360 - es decir, establecer la base de datos para volcar.

Para respaldar mi reclamo algo extravagante, puedo decirle que si no especifico la opción --password (o -p), el comando imprime la declaración de uso y sale con un error. Si lo especifico, inmediatamente se me solicita ingresar una contraseña (!) Y luego se descarta la base de datos especificada en la opción --password (o se da un error en el caso habitual de que se especifique una contraseña que no coincide con ningún nombre de base de datos) .

He aquí una transcripción:

 
    $ mysqldump -u test -h myhost --no-data --tables --password lose 
    Enter password: 
    -- MySQL dump 10.10 
    mysqldump: Got error: 1044: Access denied for user 'test'@'%' to 
    database 'lose' when selecting the database 

Así que, ¿qué pasa? ¿Es esta la manera en que se supone que funciona? Seguramente no parece tener sentido ni coincide con la documentación oficial. Y, por último, si esto funciona así, ¿cómo debo especificar la contraseña que se utilizará en un trabajo automatizado? ¿Usando expect ???

Estoy usando mysqldump Ver 10.10 Distrib 5.0.22, for pc-linux-gnu (i486).

+0

eliminó las etiquetas genéricas, agregó gotcha – Sklivvz

Respuesta

79

De hombre mysqldump:

--password [= contraseña], -p [contraseña]

La contraseña a usar cuando se conecta al servidor. Si usa el formulario de opción corta (-p), no puede tener espacio entre la opción y la contraseña. Si omite el valor de la contraseña después de la --contraseña o la opción -p en la línea de comando, se le solicitará el .
Especificar una contraseña en la línea de comando debe considerarse inseguro. Consulte la Sección 6.6, "Cómo mantener segura su contraseña".

Sintácticamente, no está utilizando correctamente el modificador --password. Como tal, el analizador de línea de comandos ve su uso de "perder" como un argumento independiente que mysqldump interpreta como el nombre de la base de datos como lo haría si intentara un comando más simple como mysqldump lose

Para corregir esto, intente usando --password=lose o -plose o simplemente use -p o --password y escriba la contraseña cuando se le solicite.

+18

Tiene toda la razón, gracias. Es realmente extraño cómo la opción '-u username' permite un espacio, pero la opción' -ppassword' no. No es un diseño intuitivo. –

+1

¿Alguna idea de cómo obtener 'mysqldump' para darme el" Advertencia: el uso de una contraseña en la interfaz de línea de comando puede ser inseguro "? –

+0

-pwin, @antik;) –

2

¿Has probado --password = whatever-password-is?

Quizás me esté faltando la pregunta, pero eso es lo que hago para ejecutar la herramienta.

3

No estoy seguro de si funciona para la versión --password, pero si se utiliza -p puede especificar la contraseña inmediatamente después (la clave es no incluir un espacio):

mysqldump -pmypassword. ..

0

La opción -p no requiere un argumento. Simplemente pones -p o --contraseña para indicar que vas a usar una contraseña para acceder a la base de datos. La razón por la que está volcando la base de datos con el nombre que puso después de -p es que el último argumento para mysqldump debe ser el nombre de la base de datos que desea volcar (o --all-databases si las quiere todas).

@ La respuesta de Nathan también es cierta. Puede especificar la contraseña inmediatamente siguiendo el modificador -p (útil en scripts y en los que no puede ingresarlo manualmente después de ejecutar el comando).

3

Trate de colocar un '=' en el medio --password perder así:

--password=lose 

Si utiliza -p, entonces no puede haber ningún espacio entre el -p y la contraseña, es decir, '-plose' .

13

Otra opción es crear el archivo ~/.my.cnf (permisos tienen que ser 600).

Esto, unido al archivo .my.cnf

[client] 
password=lose 

Esto le permite conectarse como usuario de MySQL que requiere una contraseña sin tener que introducir la contraseña en realidad. Ni siquiera necesitas la contraseña -p o -.

Muy útil para scripting mysql & comandos mysqldump.

1

Si usa -p o --contraseña sin un argumento, recibirá un mensaje pidiéndole que ingrese una contraseña.

Si desea indicar una contraseña en la línea de comando, debe usar -pYOURPASSWORD o --password = YOURPASSWORD. Observe que no hay espacio después de -p, y hay un signo "=" después de --password.

En su ejemplo, mysqldump solicita una contraseña y luego trata "lose" como el nombre de la base de datos. Si esa fuera su contraseña, debería haber incluido un "="

-2

¿Tal vez su "prueba" de usuario no tiene el permiso para acceder a su base de datos "perder"?

9

Descubrí que esto sucede si su contraseña tiene caracteres especiales. La contraseña de mysql aquí tiene un! en él, así que tengo que hacer == contraseña = 'xxx! xxxx' para que funcione correctamente. Tenga en cuenta las 'marcas.

+0

Gracias! Me ahorró horas – CreativityKills

+0

Me ahorró horas también! – lookdad

Cuestiones relacionadas