mediante cron, mando ejecutar cada semana unas líneas de código PHP que se ocupan de realizar una copia de seguridad de cierta base de datos (bbdd en el ejemplo):
exec("mysqldump --host=dominio --user=usuario --password=clave bbdd | sed -e \"s/DEFINER[ ]=[ ][^]*/*/\" | gzip > bbdd.sql");
dado que se pasa una clave por línea de comandos (--password
), esta ejecución provoca un aviso:
mysqldump: [Warning] Using a password on the command line interface can be insecure.
desde la versión 5.6, mysql cuenta con la aplicación mysql_config_editor
:
mysql_config_editor set --login-path=local --host=mysql.bbdd.com --user=ernesto --password
este comando genera el archivo ~/.mylogin.cnf donde se guardan debidamente encriptados el servidor (host), el usuario (ernesto, en este caso) y la contraseña indicada. todo ello bajo el login-path
local. es decir, para volver a acceder a estos parámetros posteriormente, debe indicarse que el login-path
de mysql es local:
mysql --login-path=local
lo que equivale a decir:
mysql --host=mysql.bbdd.com --user=ernesto --password
hecho esto, puede ejecutarse mysqldump sin volver a pasar la contraseña por línea de comandos:
exec("mysqldump --login-path=local bbdd | sed -e \"s/DEFINER[ ]=[ ][^]*/*/\" | gzip > bbdd.sql");