2011-07-28 18 views
42

me escribió un script de copia de seguridad de mis bases de datos MySQL usando:Mysqldump lanzada por cron y contraseña de seguridad

mysqldump --opt --all-databases -u user -pmypassword > myDump.sql 

Un cron lanza todas las noches y SCP el resultado a otro servidor. mypassword aparece en claro en mi script, todos pueden verlo con los derechos apropiados. También me han informado sobre problemas de/proc (donde se puede ver la ejecución de cmd).

documentación de MySQL dice:

Especificación de una contraseña en la línea de comandos deben ser considerados inseguros. Consulte la Sección 7.6, "Cómo mantener segura su contraseña".

No he encontrado esta magia 7.6 secciones en cualquier lugar.

¿Cuál es la buena práctica para hacer frente a la seguridad automática de mysqldump y contraseña?

+1

http://bugs.mysql.com/bug.php?id=13058 Leer la respuesta publicada en el informe de error. Lleva a agregar contraseña como un archivo de opciones: http://dev.mysql.com/doc/refman/5.5/en/option-files.html. No sé si esto ayudará. –

+1

Un poco más de información: http://www.webhostingtalk.com/showpost.php?s=044cd482ca45a726660c48eff2dfb704&p=5066589&postcount=10 –

Respuesta

48

Citando la documentación de MySQL (http://dev.mysql.com/doc/refman/5.1/en/password-security-user.html):

Almacene su contraseña en un archivo de opciones. Por ejemplo, en Unix puede introducir su contraseña en la sección [cliente] del archivo .my.cnf en su directorio personal:

[client] 
password=your_pass 

conservar la contraseña de seguridad, el archivo no debe ser accesible a cualquier persona, pero tú mismo. Para asegurar esto, establecer el modo de acceso a archivos a 400 o 600. Por ejemplo:

shell> chmod 600 .my.cnf 

a nombre de la línea de comandos de un archivo de opción específica que contiene la contraseña, utilice la opción --defaults-file=file_name, donde file_name es el nombre de ruta completo al archivo.

+0

¡Muchas gracias por esta respuesta! Exactamente lo que necesitaba. – localshred

+0

Probando esto. Lo sabré en unos días si hace lo que necesito, una vez que logrotate se ejecute nuevamente. –

+0

Lo malo es que MySQL no pedirá ninguna contraseña después de eso. Lo que se quería es que esa contraseña no quede expuesta cuando se ejecuta _mysqldump_. – ajaaskel

2

Echa un vistazo Keeping Passwords Secure para una buena respuesta. Puede almacenar su contraseña en el archivo my.cnf cambiando los permisos en ese archivo para mantener la contraseña segura.

También puede comprobar el último comentario en esta página también:

MYSQL_PWD = "tinkerbell" mysqldump --all--ubackup bases de datos> dump.sql

22

añadir a la respuesta de Sahil anteriormente, el uso --defaults-extra-file

--defaults-extra-file se utiliza contar a un programa para leer un archivo único opción específica, además de la archivos de opciones estándar.

mientras --defaults-file se lee en lugar del archivo predeterminado my.cnf.

+0

Genial, útil! – iwalktheline

+5

Debe ser el * primer * argumento de mysqldump, con el formato '--defaults-extra-file = my-file'. Me tomó algunas iteraciones para finalmente leer la documentación ... – semperos

+0

Esto hará el trabajo como se esperaba. – ajaaskel

1

El siguiente método que funciona para mí en una máquina Windows, si tiene 2 versiones de MySQL instalado, y no está seguro de qué my.ini se utiliza cuando se ejecuta mysqldump, esto también ayudará a:

1 , C: \ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini, bien [cliente], cámbielo a:

[client] 
user=my_user 
password=my_password 

2, utilice este comando:

C: \ Archivos de programa \ MySQL Server 5.6 \ bin> mysqldump --default-extra-file =" C: \ Datos de programa \ MySQL \ MySQL Server 5.6 \ my.ini" -u my_user db_to_export> db_to_export.sql

2

Todas las respuestas aquí son en piezas de manera que comparten un completo comando, que va a hacer el necesario y debe ser utilizado si la base de datos son pesadas, --single-transaction y --lock-tables son muy importantes aquí

mysqldump --defaults-extra-file=/home/dangi/.my.cnf -u root --single-transaction --quick --lock-tables=false --all-databases (or) DATABASE | gzip > OUTPUT.gz; 

Nota: La respuesta es, además de Avibodha y la respuesta sahil, ya han explicado el punto. Solo estoy poniendo su respuesta en una sola pieza de código con important measure should be taken at time of backing up live database

1

La respuesta aceptada almacena la contraseña en un archivo de texto sin formato, que podría leer cualquier persona con acceso administrativo (raíz). Si su base de datos está en un entorno de alojamiento compartido, esto no es deseable.

Una mejor opción sería usar mysql_config_editor para crear una ruta de inicio de sesión cifrada llamada mysqldump. De acuerdo con la MySQL documentation:

mysql_config_editor cifra el archivo .mylogin.cnf por lo que no se puede leer como texto plano, y su contenido cuando descifrado por los programas cliente sólo se utilizan en la memoria. De esta forma, las contraseñas pueden almacenarse en un archivo en formato no claro y utilizarse más tarde sin necesidad de estar expuestas en la línea de comandos o en una variable de entorno.

El siguiente comando creará la ruta de mysqldump entrada:

mysql_config_editor --login-path=mysqldump --host=your_hostname --user=your_username --password 

Se le pedirá que introduzca su contraseña, y la ruta de acceso que ha creado se almacena en formato cifrado. mysqldump utilizará automáticamente esta ruta de inicio de sesión cada vez que la llame en el futuro, a menos que especifique una ruta de inicio de sesión diferente con la opción de línea de comando --login-path.

Aquí es cómo debe invocar mysqldump después de crear una ruta de acceso encriptado:

mysqldump database_name > output_file 
Cuestiones relacionadas