Pregunta

Estoy tratando de usar mysqldump para volcar un esquema, y ??funciona principalmente, pero me topé con una curiosidad: el -p o --password La opción parece que está haciendo otra cosa que no sea la configuración de la contraseña (como la página man y la salida de --help dicen).

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

Para respaldar mi afirmación un tanto extravagante, puedo decirle que si no especifico la opción --password (o -p ), el comando imprime el uso Declaración y sale con un error. Si lo especifico, inmediatamente se me solicita que ingrese una contraseña (!), Y luego la base de datos especificada en la opción --password se descarga (o se da un error en el caso habitual de que la contraseña que no coincide con el nombre de la base de datos fue especificada).

Aquí hay 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

Entonces, ¿qué da? ¿Es así como se supone que funciona? Seguramente no parece tener sentido ni coincide con la documentación oficial. Y, por último, si es así como funciona, ¿cómo debo especificar la contraseña que se usará en un trabajo automatizado? Utilizando expect ???

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

¿Fue útil?

Solución

De man mysqldump:

  

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

     

La contraseña a usar cuando se conecta al servidor. Si utiliza   la forma de la opción corta (-p), no puede haber un espacio entre la opción             y la contraseña. Si omite el valor de la contraseña después de             --password o opción -p en la línea de comando, se le solicitará             uno.
            Se debe considerar especificar una contraseña en la línea de comando             inseguro. Consulte la Sección 6.6, " Mantener su contraseña segura " ;.

Sintácticamente, no estás usando el interruptor --password correctamente. Como tal, el analizador de línea de comandos está viendo el uso de " perder " como un argumento independiente que mysqldump interpreta como el nombre de la base de datos como lo haría si tuviera que intentar un comando más simple como mysqldump lost

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

Otros consejos

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

Agregue esto al archivo .my.cnf

[client]
password=lose

Esto le permite conectarse como usuario de MySQL que requiere una contraseña sin tener que ingresar la contraseña. Ni siquiera necesita el -p o --password.

Muy útil para scripts mysql & amp; Comandos mysqldump.

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

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

mysqldump -pmypassword ...

Intente colocar un '=' entre --password perder como:

--password=lose

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

¿Intentaste --password = cualquier-contraseña-es?

Tal vez me esté perdiendo la pregunta, pero eso es lo que hago para ejecutar la herramienta.

Si usa la opción -p o --password sin un argumento, recibirá un mensaje solicitando que ingrese una contraseña.

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

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

La opción -p no requiere un argumento. Simplemente coloque -p o --password para indicar que va a utilizar 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 de lo que pones después de -p es que el último argumento para mysqldump debe ser el nombre de la base de datos que quieres volcar (o - todas las bases de datos si las quieres todas).

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

--password [= contraseña]

Aquí está la documentación

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top