Cómo realizar un mysqldump sin un indicador de solicitud de contraseña?

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

RAZÓN:
Me gustaría ejecutar un cron job, que tiene un mysqldump de la base de datos una vez al día. Por lo tanto, no voy a ser capaz de insertar la contraseña cuando se le solicite.

¿Cómo podría solucionar esto ?

11 Kommentare

  1. 374

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

    Agregar a este .mi.cnf archivo

    [mysqldump]
    user=mysqluser
    password=secret

    Esto le permite conectarse como un usuario de MySQL que requiere una contraseña sin tener que introducir la contraseña. Usted incluso no necesita el-p o –password.

    Muy útil para secuencias de comandos de mysql & mysqldump comandos.

    Los pasos para lograr esto se puede encontrar en en este enlace.

    Alternativamente, puede utilizar el siguiente comando:

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

    pero ser conscientes de que es inherentemente inseguro, como el comando completo (incluyendo contraseñas) puede ser visto por cualquier otro usuario en el sistema, mientras que el vertedero está en ejecución, con un simple ps ax comando.

    • Gracias ! Funcionó Muy Bien !
    • votada abajo las otras respuestas pasar -p en la línea de comandos, ya que cualquier usuario puede ps aux para ver la raíz o la contraseña del usuario. Utilizando el archivo sugerencia de arriba es el más seguro
    • fantástica respuesta! Yo estaba buscando una manera de no tener mi contraseña sentado en mi script, y este es el truco 🙂 +1 para la seguridad!
    • Es completamente seguro para colocar la llanura de la raíz del pcd en mi.cnf archivo? y también… Esto le dará permiso para cada usuario en el servidor para ejecutar un vertedero sin una contraseña… ex. usuario de apache (por ejemplo, www-data) esto significa que si alguien encuentra un exploit para ejecutar comandos a su máquina va a ser gratis para volcar y leer todos los datos, coz de raíz permiso?
    • Si una configuración global no es una opción (en caso de tener no sólo una instancia de mysql para conectarse a), usted puede configurar el archivo de configuración a través de --defaults-file. Como » mysqldump –defaults-file=my_other.cnf –print-defaults`
    • es seguro. Sólo está disponible para los usuarios a quienes los .mi.cnf archivo pertenece.
    • -1 para alentar a -p sin aclaración sobre las implicaciones de seguridad
    • He seguido la opción 1 y no se alimentan en la contraseña para mysqldump, pero dijo que la tarea error porque al no usar contraseña
    • Esto no es una buena solución, porque ~/.my.conf anula todo (te obligan a usar la misma contraseña para TODOS los servidores), y sólo las recientes versiones de MySQL de soporte de --defaults-file.
    • En Windows, el archivo de configuración no es a ~/.my.cnf. Consulte stackoverflow.com/a/14653239/470749. MySql espera que la mía para estar en c:\wamp\bin\mysql\mysql5.5.24\my.cnf. Así que he creado un archivo allí. Reiniciar Mysql no era necesario; se trabajó de inmediato para mi próxima mysqldump.
    • En lugar de --defaults-file uso --defaults-extra-file para agregar configuración. Ambas opciones son compatibles, al menos desde mysql 5.0, que fue lanzado en el 2003. Que fue hace 12 años.
    • ¿qué hacer cuando hay varias bases de datos y múltiples usuarios? Es allí una manera de utilizar la opción-p y la oferta en el símbolo del sistema? es decir. No -pPassword, pero -p de la base de datos. He intentado un heredoc << y no funciona
    • sin [email protected] la respuesta con un local defaults-file funciona muy bien
    • Si la contraseña contiene caracteres extraños (como #) uno debe usar comillas dobles, como este password="weird#@)("
    • Gracias @Ryan para Windows escenario.
    • Por favor, asegúrese de que el .my.cnf se establece en 0400 por razones de seguridad
    • para agregar un nivel de seguridad, usted debe utilizar un dedicado, no específico de base de datos, readonly usuario, y en ningún caso el usuario root. Se puede hacer de la siguiente manera: GRANT LOCK TABLES, SELECT ON *.* TO 'BACKUPUSER'@'%' IDENTIFIED BY 'PASSWORD';
    • Sólo para señalar la contraseña debe estar en » citas, dev.mysql.com/doc/refman/8.0/en/option-files.html
    • Hmm no es exactamente cierto. Depende de los permisos del archivo. Sí se puede, dependiendo de los permisos incluso ver un archivo que se encuentra en un directorio de inicio si usted conoce el camino. Tal vez no en Windows; yo no sé allí, pero de alguna manera yo sospecho que no es un problema allí. O «cuestión» dependiendo de cómo se mire. Sí el usuario es importante pero también lo es que los permisos del archivo/directorio.

  2. 81

    Agregar a @Frankline la respuesta:

    La -p opción debe ser excluido desde el comando con el fin de utilizar la contraseña en el archivo de configuración.

    Correcta:

    mysqldump –u my_username my_db > my_db.sql

    Mal:

    mysqldump –u my_username -p my_db > my_db.sql


    .my.cnf puede omitir el nombre de usuario.

    [mysqldump]
    password=my_password

    Si su .my.cnf archivo no está en un ubicación predeterminada y mysqldump no lo ve, se especifique el uso de --defaults-file.

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

    • Maldita sea, un montón de XAMPP tutoriales incluyen el-p, sin explicarlo. No, NO trabajo para pasar por encima de una contraseña en blanco…
  3. 43

    Un par de respuestas mencionar poner la contraseña en un archivo de configuración.

    Alternativamente, a partir de su secuencia de comandos que puede export MYSQL_PWD=yourverysecretpassword.

    La ventaja de este método sobre el uso de un archivo de configuración es que usted no necesita un archivo de configuración independiente para mantener en sincronización con la secuencia de comandos. Usted sólo tiene el guión de mantener.

    Hay ningún inconveniente a este método.

    La contraseña es no visible para otros usuarios en el sistema (que sería visible si está en la línea de comandos). Las variables de entorno sólo son visibles para el usuario que ejecuta el comando mysql, y la raíz.

    La contraseña también será visible para cualquiera que pueda leer el guión en sí, así que asegúrese de que el guión en sí es protegida. De ninguna manera esto es diferente de la protección de un archivo de configuración. Usted puede todavía origen de la contraseña de un archivo separado si usted quiere tener la secuencia de comandos de leer públicamente (export MYSQL_PWD=$(cat /root/mysql_password) por ejemplo). Todavía es más fácil exportar una variable que construir un archivo de configuración.

    E. g.,

    $ 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 @[email protected]@CHARACTER_SET_CLIENT */;
    /*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;
    /*!40101 SET @[email protected]@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
    $ 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 @[email protected]@CHARACTER_SET_CLIENT */;
    /*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;
    /*!40101 SET @[email protected]@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
    • Aunque esta respuesta no es realmente «incorrecto», todavía no es seguro, las variables de entorno exportados son todavía fácilmente visible cuando se está ejecutando el programa…
    • Las variables de entorno son sólo visibles a la raíz y el propio usuario – los mismos usuarios los que podrían tener acceso a un archivo de configuración de la celebración de la contraseña de todos modos.
    • Upvoted: más Fácil de hacer cuando las secuencias de comandos, y en lugar de tener que tratar adecuadamente la secuencia de comandos de un archivo de opciones de creación, teniendo cuidado de tener permisos de donde nadie más puede leer, una variable tiene el «derecho de hiddeness» de forma predeterminada.
    • Esto es no es seguro por la misma razón que el uso de la contraseña directamente es un problema. El export MYSQL_PWD= se muestra durante una fracción de segundo en la lista de procesos. Cualquier no-privilegiados usuario puede controlar este y ahora tiene la contraseña para su uso posterior.
    • Cómo sobre el oneliner: MYSQL_PWD=xoF3mafn5Batxasdfuo mysqldump -u root mysql No export necesario. Que debe hacer el truco?
    • uno agradable. Upvoted. Me alegra ver que esta variable de entorno tema de las causas como las mucha discusión allí como aquí 🙂
    • Usted está equivocado. El export MYSQL_PWD=... hace no mostrar en la lista de procesos. Ni siquiera por una fracción de segundo. Esto es debido a que el export comando es (y debe ser) un shell builtin. Así, el shell no horquilla/exec un proceso con el comando argumento de si se ejecuta en su caparazón.
    • su razón. En este caso no importa porque poniendo la contraseña en ENV hace que sea visible para otros usuarios de todos modos (como se advirtió en contra en la documentación de mysql)
    • Esto también es incorrecto. La documentación de mysql en este tema es muy deficiente y engañosa. En Linux, el entorno de un proceso de no legible por otros usuarios no root. Lo mismo ocurre para la mayoría de los otros UNIX/UNIX-como sistemas. Un ejemplo de un sistema operativo, donde el medio ambiente es legible por todo el mundo es Solaris (versiones <= 9), mientras que Solaris 9 fue lanzado en 2002 y por lo tanto esto no es muy relevante ya que, por cualquier medida.
    • de MYSQL_PWD para especificar una contraseña para MySQL debe ser considerado muy inseguro y no debe ser utilizado. Algunas versiones de ps incluyen una opción para mostrar el entorno de ejecución de procesos. En algunos sistemas, si se establece MYSQL_PWD, su contraseña es expuesto a cualquier otro usuario que ejecuta ps. Incluso en sistemas que no tienen una versión de ps, es imprudente asumir que no existen otros métodos por los cuales los usuarios pueden examinar los entornos de proceso.» Desde el mysql docs. También: la variable está en desuso.
    • Como he dicho en la documentación de mysql es muy deficiente y engañosa. ‘debe ser considerado como muy inseguro y no debe ser utilizado» es simplemente un error y malos consejos a la hora de usar Linux y otros sistemas. Y esto no apoyo de su demanda, la cual fue: «porque poniendo la contraseña en ENV hace que sea visible para otros usuarios de todas formas». Nota al margen: gracioso, aunque la forma en que Oracle no van a dejar de usar pasando la contraseña en la línea de comandos que, de hecho, la se muy inseguro.

  4. 38

    Utilizar un archivo que está en cualquier lugar dentro del sistema operativo, uso --defaults-extra-file por ejemplo:

    mysqldump --defaults-extra-file=/path/.sqlpwd [database] > [desiredoutput].sql

    Nota: .sqlpwd es sólo un ejemplo de nombre de archivo. Usted puede usar lo que usted desea.

    Nota: MySQL comprueba automáticamente si ~/.my.cnf que puede ser utilizado en lugar de --defaults-extra-file

    Si el uso de CRON como yo, intente esto!

    mysqldump --defaults-extra-file=/path/.sqlpwd [database] > "$(date '+%F').sql"

    Permiso necesario y Recomendado Propiedad

    sudo chmod 600 /path/.sqlpwd && sudo chown $USER:nogroup /path/.sqlpwd

    .sqlpwd contenido:

    [mysqldump]
    user=username
    password=password

    Otros ejemplos a pasar en .cnf o .sqlpwd

    [mysql]
    user=username
    password=password
    
    [mysqldiff]
    user=username
    password=password
    
    [client]
    user=username
    password=password

    Si desea registrar en una base de datos automáticamente, se necesita el [mysql] entrada, por ejemplo.

    Ahora se podría hacer un alias que se auto conecta a DB

    alias whateveryouwant="mysql --defaults-extra-file=/path/.sqlpwd [database]"

    También puede solo poner la contraseña dentro de .sqlpwd y pasar el nombre de usuario a través de la secuencia de comandos de la cli. No estoy seguro de si esto iba a mejorar la seguridad o no, que sería una cuestión diferente a todo.

    La integridad del bien voy estado puede hacer lo siguiente, pero es muy inseguro y nunca debe ser usado en un entorno de producción:

    mysqldump -u [user_name] -p[password] [database] > [desiredoutput].sql

    Nota: no Hay NINGÚN ESPACIO entre -p y la contraseña.

    Por ejemplo -pPassWord es correcto mientras -p Password es incorrecta.

    • Esta es la mejor respuesta, especialmente cuando la consideración de múltiples bases de datos y los usuarios/contraseñas.
    • Por CIERTO, opciones largas (por ejemplo, –defaults-file) debe ser colocado antes de la corta de opciones (como-u). Probado en mysqldump versión 5.7.17.
    • Una opción argumento comienza con una raya o dos guiones, dependiendo de si es una forma corta o larga formulario del nombre de la opción. Muchas de las opciones de corto y largo formas. Por ejemplo, -? y –help se la corto y largo formas de la opción que indica una base de datos MySQL programa para mostrar su mensaje de ayuda. dev.mysql.com/doc/refman/8.0/en/command-line-options.html
  5. 24

    Sí es muy fácil …. sólo en uno mágico de la línea de comandos no más

    mysqldump --user='myusername' --password='mypassword' -h MyUrlOrIPAddress databasename > myfile.sql

    y hecho 🙂

    • Advertencia: el Uso de una contraseña en la interfaz de línea de comandos puede ser inseguro.
    • Puede ser inseguro, sobre todo en el día en el que los antiguos sistemas Unix fácilmente había 10-15 personas se registran en la mayor parte del día y vi que enfadarse. En un moderno VPS, mientras que usted puede tener 10-15 personas sin cáscara y el uso de IRC, es común que sólo el administrador(s) para tener acceso al intérprete de comandos.
    • Gracias por esto, estoy usando en una ventana acoplable devbox. De modo que la seguridad no es un problema.
  6. 6

    Para mí, el uso de MariaDB tenía que hacer esto: Agregar el archivo ~/.my.cnf y cambiar los permisos haciendo chmod 600 ~/.my.cnf. A continuación, añadir sus credenciales para el archivo. La magia de la pieza que me faltaba era que la contraseña debe estar bajo el cliente bloque (ref: docs), así:

    [client]
    password = "my_password"
    
    [mysqldump]
    user = root
    host = localhost

    Si le sucede a venir aquí buscando cómo hacer un mysqldump con MariaDB. Coloque la contraseña en un [cliente] bloque y, a continuación, el usuario en virtud de un [mysqldump] bloque.

  7. 3

    Aquí es una solución para la ventana acoplable en una secuencia de comandos de /bin/sh :

    docker exec [MYSQL_CONTAINER_NAME] sh -c 'exec echo "[client]" > /root/mysql-credentials.cnf'
    
    docker exec [MYSQL_CONTAINER_NAME] sh -c 'exec echo "user=root" >> /root/mysql-credentials.cnf'
    
    docker exec [MYSQL_CONTAINER_NAME] sh -c 'exec echo "password=$MYSQL_ROOT_PASSWORD" >> /root/mysql-credentials.cnf'
    
    docker exec [MYSQL_CONTAINER_NAME] sh -c 'exec mysqldump --defaults-extra-file=/root/mysql-credentials.cnf --all-databases'

    Reemplazar [MYSQL_CONTAINER_NAME] y asegúrese de que la variable de entorno MYSQL_ROOT_PASSWORD se establece en su contenedor.

    La esperanza de que le ayudará a como se me podría ayudar !

  8. 0

    Tengo el siguiente.

    /etc/mysqlpwd

    [mysql]
    user=root
    password=password

    Con el siguiente alias.

    alias 'mysql -p'='mysql --defaults-extra-file=/etc/mysqlpwd'

    Para hacer una restauración simplemente uso:

    mysql -p [database] [file.sql]
  9. 0

    lo que acerca de –password=»»
    trabajó para mí que se ejecutan en 5.1.51

    mysqldump -h localhost -u <user> --password="<password>"
  10. -10

    Definitivamente creo que sería mejor y más seguro para colocar el total de la línea cmd en el crontab de root , con credentails.
    Al menos el crontab de edición es restricred (legible) para alguien que ya sabe la contraseña.. así que no hay preocupaciones para mostrar en formato texto plano…

    Si es necesario más que un simple mysqldump… sólo tiene que colocar un script en bash que acepta credentails como parámetros y realiza todas las comodidades en el interior…

    La bas archivo en simple

    #!/bin/bash
    mysqldump -u$1 -p$2 yourdbname > /your/path/save.sql

    En el Crontab:

    0 0 * * * bash /path/to/above/bash/file.sh root secretpwd 2>&1 /var/log/mycustomMysqlDump.log
    • No, no sería más seguro, al agregar una contraseña para la línea de comandos es visible para cualquier persona con capacidad de leer proc (o hacer ps), el cual es bastante predeterminado. Cuando se agrega .mi.cnf archivo y el conjunto de 600 de los derechos es visible sólo para USTED.
  11. -20

    Puede especificar la contraseña en la línea de comandos de la siguiente manera:

    mysqldump -h <host> -u <user> -p<password> dumpfile

    Las opciones para mysqldump son Sensibles a las mayúsculas!

    • nope no funciona, no creo que se entiende que -p es la contraseña
    • No está seguro de cómo esto tengo 1 voto, estoy downvoting este. Como se ha visto en otras respuestas aquí, no debe haber ningún espacio entre la p y la contraseña indicada. También debe redirigir la salida a dumpfile, no especifica como se está haciendo, o que va a ser asumida como un nombre de tabla. @buzypi lo dijo mejor.
    • se debe trabajar (aunque no es seguro, en el que es bastante fácil para otros usuarios para ver la contraseña) que sólo necesitan para asegurarse de que no hay ningún espacio entre -p y contraseña por ejemplo mysqldump -u root -pmypassword

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea