usr script mysql cron mysqldump crontab

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

[email protected]


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