Estoy tratando de configurar un trabajo cron para tomar una copia de seguridad de mi máquina esclava. Entonces necesito detener al esclavo
Emití un comando
mysqladmin --user=root --password=test_pass stop-slave
Pero es un error de lanzamiento:
mysqladmin: error al conectar al servidor en 'localhost': 'Acceso denegado para el usuario' root '@' localhost '(usando la contraseña: SÍ)'
Ahora lo intenté con el comando
mysqladmin --user=root --password stop-slave
Pide contraseña y di como test_pass
y todo estaba bien.
¿Por qué sucedió eso? Cual es la alternativa?
NB: Por cierto, mi versión mysql es mysql-5.0.95-5
, tiene sentido.
mysql
authentication
mysqladmin
Praveen Prasannan
fuente
fuente
'
comillas simples debería evitar ese problema. gnu.org/software/bash/manual/bashref.html#QuotingRespuestas:
Los argumentos de la línea de comandos están sujetos a interpretación por el shell de comandos del sistema, cambiando el comportamiento del comando o cambiando el valor de los argumentos antes de pasarlos al programa llamado.
Cuando un argumento (como el valor de
--password
) contiene un carácter que el intérprete de comandos puede interpretar, debe citarse (generalmente entre comillas simples'
en unix o comillas dobles"
en Windows) o escapar individualmente (generalmente con una barra diagonal inversa\
antes de cada metacarácter) ) para evitar la interpretación por parte del shell.Si bien los caracteres específicos son específicos del sistema, algunos caracteres a tener en cuenta incluyen:
Si la contraseña, por un mal ejemplo, se estableció en
pa$$word
...Otras lecturas:
Actualización: para escapar de las comillas
'
simples o"
dobles en la contraseña, puede escapar de ellas con una barra diagonal inversa inicial, o encerrar todo el argumento en el estilo opuesto de las comillas si no hay otros caracteres que el estilo de comillas elegido no sea compatible con.Si tiene una comilla simple y otros caracteres especiales también, está atascado con la barra invertida que se escapa porque, en Unix, la comilla doble es "más débil" que una comilla simple y muchos metacaracteres aún se expanden cuando se incluyen entre comillas dobles pero no una sola. citas.
Esto no es específico de MySQL, pero se aplica a cualquier cosa con argumentos de línea de comandos.
Por lo general, puede usar el
echo
comando para ver cómo el shell está interpretando sus argumentos.Seguimiento: el shell bash (y presumiblemente algunos otros) permite escapar de comillas simples dentro de cadenas de comillas simples, aunque la convención es extraña (probablemente basada en una decisión olvidada hace mucho tiempo perdida ahora por las brumas del tiempo):
Reemplace cada uno
'
dentro de la cadena con'\''
antes de envolver la cadena completa entre comillas simples ... para que la cadena literalfoo'bar
se exprese como'foo'\''bar'
.Como dije, extraño. Esto es necesario porque una barra invertida escapa de una comilla simple fuera de una sola cadena entre comillas, una barra invertida no escapa de nada dentro de una cadena entre comillas simples en bash, y las cadenas entre comillas simples se pueden cerrar y volver a abrir mediante comillas simples siempre que no haya escapes personajes intermedios que tienen un significado especial. Entonces
'\''
cierra la cita de la cadena, luego proporciona el literal escapado, luego vuelve a abrir la cita de la cadena.fuente
pa$$word
Adición:
En una máquina con Windows, también tuvimos problemas con una contraseña: contenía la
%
que se debe escapar como%%
(las citas por sí solas no son suficientes aquí)fuente