¿Mysqldump --password realmente hace lo que dice?
-
02-07-2019 - |
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)
.
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?