script - crontab mysqldump
mysqldump no funciona en crontab (8)
Estoy tratando de agregar un cronjob en el crontab (servidor ubuntu) que hace copias de seguridad de mysql db.
Ejecutar el script en el terminal como root funciona bien, pero insertado en el crontab no pasa nada. Intenté ejecutarlo cada minuto, pero no aparece ningún archivo en la carpeta / var / db_backups.
(Otros cronjobs funcionan bien)
Aquí está el cronjob:
* * * * * mysqldump -u root -pHERE HAY MI CONTRASEÑA --all-databases | gzip> / var / db_backups / database_`date +% d% m% y`.sql.gz
¿Cual puede ser el problema?
Verifique los registros de cron (debe estar en / var / log / syslog) Puede usar grep para filtrarlos.
grep CRON / var / log / syslog
También puede verificar su correo local para ver si hay algún correo cron
/ var / mail / nombre de usuario
También puede configurar otro correo receptor en su archivo crontab
Alternativamente, puede crear un comando personalizado mycommand . A lo que puedes agregar más opciones. Debes otorgar permisos de ejecución.
Es preferible tener una carpeta donde almacenen todas sus copias de seguridad, en este caso utilizando una carpeta de escritura "copia de seguridad" que primero se crea en "su casa", por ejemplo.
Mi comando en "usr / local / bin / mycommand":
#!/bin/bash
MY_USER="your_user"
MY_PASSWORD="your_pass"
MY_HOME="your_home"
case $1 in
"backupall")
cd $MY_HOME/backup
mysqldump --opt --password=$MY_PASSWORD --user=$MY_USER --all-databases > bckp_all_$(date +%d%m%y).sql
tar -zcvf bckp_all_$(date +%d%m%y).tgz bckp_all_$(date +%d%m%y).sql
rm bckp_all_$(date +%d%m%y).sql;;
*) echo "Others";;
esac
Cron: se ejecuta el primer día de cada mes.
0 0 1 * * /usr/local/bin/mycommand backupall
Espero que ayude un poco.
Cree un nuevo archivo y ejecute allí el código para volcarlo en una ubicación de archivo y comprimirlo. Ejecuta ese script a través de un cron
Necesitas escapar% character con /
mysqldump -u ''username'' -p''password'' DBNAME > /home/eric/db_backup/liveDB_`date +/%Y/%m/%d_/%H/%M`.sql
Es posible que también deba reiniciar el servicio para cargar cualquiera de sus cambios.
service cron restart
o
/etc/init.d/cron restart
Estoy usando Percona Server (una bifurcación de MySQL) en Ubuntu. El paquete (muy probablemente el paquete regular de MySQL también) viene con una cuenta de mantenimiento llamada debian-sys-maint
. Para que se use esta cuenta, las credenciales se crean al instalar el paquete; y se almacenan en /etc/mysql/debian.cnf
.
Y ahora la sorpresa: un symlink /root/.my.cnf
apunta a /etc/mysql/debian.cnf
se instala.
Este archivo es un archivo de opción que se lee automáticamente cuando se usa mysql
o mysqldump
. Así que, básicamente, tenía credenciales de inicio de sesión dadas dos veces: en ese archivo y en la línea de comandos. Este era el problema que tenía.
Entonces, una solución para evitar esta condición es usar la --no-defaults
mysqldump
para mysqldump
. El archivo de opción no será leído. Sin embargo, usted proporciona credenciales a través de la línea de comandos, por lo que cualquier persona que pueda emitir un ps
puede ver la contraseña una vez que se ejecute. Por lo tanto, es mejor si crea un archivo de opción propio con nombre de usuario y contraseña y lo pasa a mysqldump
través de --defaults-file
.
Puede crear el archivo de opción usando mysql_config_editor
o simplemente en cualquier editor.
Ejecutar mysqldump
través de sudo
desde la línea de comandos como root
funciona, simplemente porque sudo
usualmente no cambia $HOME
, entonces .my.cnf
no se encuentra entonces. Cuando se ejecuta como un cronjob, lo es.
Estaba intentando lo mismo pero descubrí que el volcado se creó con 0 KB. Por lo tanto, llegué a conocer la solución que me ahorró tiempo.
Comando:
0 0 * * * mysqldump -u ''USERNAME'' -p''PASSWORD'' DATEBASE > /root/liveDB_`date +/%Y/%m/%d_/%H/%M/%S`.sql
NOTA: 1) Puede cambiar la configuración de tiempo según su requisito. He establecido todos los días en el comando de arriba.
2) Asegúrese de ingresar su NOMBRE DE USUARIO, CONTRASEÑA y BASE DE DATOS dentro de comillas simples ('').
3) Escriba el comando anterior en Crontab.
Espero que esto ayude a alguien.
Ok, tuve un problema similar y pude solucionarlo.
En su caso, podría insertar ese comando mysqldump en una secuencia de comandos y, luego, generar el perfil del usuario que está ejecutando el comando mysqldump, por ejemplo:
. /home/bla/.bash_profile
luego usa la ruta absoluta del comando mysqldump
/usr/local/mysql/bin/mysqldump -u root -pHERE THERE IS MY PASSWORD --all-databases | gzip > /var/db_backups/database_`date +%d%m%y`.sql.gz