¿Cómo realizar un mysqldump sin solicitar contraseña?

Resuelto Prakash Raman asked hace 12 años • 17 respuestas

Me gustaría saber el comando para realizar un mysqldump de una base de datos sin que me solicite la contraseña.

MOTIVO: Me gustaría ejecutar un trabajo cron, que realiza un volcado mysql de la base de datos una vez al día. Por lo tanto, no podré insertar la contraseña cuando se me solicite.

¿Cómo podría solucionar esto?

Prakash Raman avatar Feb 15 '12 19:02 Prakash Raman
Aceptado

Como está utilizando Ubuntu, todo lo que necesita hacer es simplemente agregar un archivo en su directorio de inicio y deshabilitará la solicitud de contraseña de mysqldump. Esto se hace creando el archivo ~/.my.cnf(los permisos deben ser 600).

Añade esto al .my.cnfarchivo .

[mysqldump]
user=mysqluser
password=secret

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

Muy útil para crear scripts de comandos mysql y mysqldump.

Los pasos para lograrlo los puedes encontrar en este enlace .

Alternativamente, puede utilizar el siguiente comando:

mysqldump -u [user name] -p[password] [database name] > [dump file]

pero tenga en cuenta que es inherentemente inseguro, ya que cualquier otro usuario del sistema puede ver el comando completo (incluida la contraseña) mientras se ejecuta el volcado, con un simple ps axcomando.

Frankline avatar Feb 15 '2012 12:02 Frankline

Agregando a la respuesta de @Frankline:

La -popción debe excluirse del comando para poder utilizar la contraseña en el archivo de configuración.

Correcto:
mysqldump –u my_username my_db > my_db.sql

Equivocado:
mysqldump –u my_username -p my_db > my_db.sql



.my.cnfPuede omitir el nombre de usuario.

[mysqldump]
password=my_password

Si su .my.cnfarchivo no está en una ubicación predeterminada y mysqldumpno lo ve, especifíquelo usando --defaults-file.

mysqldump --defaults-file=/path-to-file/.my.cnf –u my_username my_db > my_db.sql

Nelu avatar Jun 23 '2014 15:06 Nelu

Algunas respuestas mencionan poner la contraseña en un archivo de configuración.

Alternativamente, desde su script puede hacerlo export MYSQL_PWD=yourverysecretpassword.

La ventaja de este método sobre el uso de un archivo de configuración es que no necesita un archivo de configuración separado para mantenerse sincronizado con su script. Sólo tienes que mantener el script.

Este método no tiene ningún inconveniente .

La contraseña no es visible para otros usuarios del sistema (sería visible si estuviera en la línea de comando). Las variables de entorno solo son visibles para el usuario que ejecuta el comando mysql y para el root.

La contraseña también será visible para cualquiera que pueda leer el script, así que asegúrese de que el script esté protegido. Esto no es en absoluto diferente a proteger un archivo de configuración. Aún puede obtener la contraseña de un archivo separado si desea que el script sea legible públicamente ( export MYSQL_PWD=$(cat /root/mysql_password)por ejemplo). Aún es más fácil exportar una variable que crear un archivo de configuración.

P.ej,

$ export MYSQL_PWD=$(>&2 read -s -p "Input password (will not echo): "; echo "$REPLY")
$ mysqldump -u root mysql | head
-- MySQL dump 10.13  Distrib 5.6.23, for Linux (x86_64)
--
-- Host: localhost    Database: mysql
-- ------------------------------------------------------
-- Server version   5.6.23
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

mariadb

MariaDB documenta el uso de MYSQL_PWDcomo :

Contraseña predeterminada al conectarse a mysqld. Se recomienda encarecidamente utilizar un método más seguro para enviar la contraseña al servidor.

La página no menciona cuál podría ser un método "más seguro", aunque he puesto mi interpretación en los "Pensamientos finales" al final.

mysql

Este método todavía es compatible con la última versión documentada de MySQL: https://dev.mysql.com/doc/refman/8.0/en/environment-variables.html aunque viene con la siguiente advertencia:

El uso de MYSQL_PWDpara especificar una contraseña MySQL debe considerarse extremadamente inseguro y no debe utilizarse. Algunas versiones de ps incluyen una opción para mostrar el entorno de los procesos en ejecución. En algunos sistemas, si configura MYSQL_PWD, su contraseña queda expuesta a cualquier otro usuario que ejecute ps . Incluso en sistemas sin dicha versión de ps , no es prudente suponer que no existen otros métodos mediante los cuales los usuarios puedan examinar los entornos de proceso.

La seguridad de las variables de entorno se trata con muchos detalles en https://security.stackexchange.com/a/14009/10002 y esta respuesta también aborda las preocupaciones mencionadas en los comentarios. TL;DR Irrelevante durante más de una década.

Dicho esto, la documentación de MySQL también advierte:

MYSQL_PWDestá en desuso a partir de MySQL 8.0; Espere que se elimine en una versión futura de MySQL.

A lo cual los dejo con el comentario de maxschlepzig a continuación:

Es curioso cómo Oracle no desaprueba pasar la contraseña en la línea de comando, lo cual de hecho es extremadamente inseguro.

Pensamientos finales

Conectarse a un sistema utilizando un único factor de autenticación (contraseña) es realmente inseguro. Si le preocupa la seguridad, puede considerar agregar TLS mutuo además de la conexión normal para que tanto el servidor como el cliente estén correctamente identificados como autorizados.

chutz avatar Jan 08 '2016 06:01 chutz