cronjob para el archivo prefijado de copia de seguridad automática hasta la fecha

12

Estoy usando la última Linux Mint. Me preguntaba si es posible crear un cronjob especial para una copia de seguridad de la base de datos.

En mi /etc/cronjobarchivo tengo el siguiente código:

# Minute   Hour   Day of Month       Month          Day of Week        Command    
# (0-59)  (0-23)     (1-31)    (1-12 or Jan-Dec)  (0-6 or Sun-Sat)                
30        4          *            *                1-6            /home/users/backup.sh

En mi /home/users/backup.shtengo:

mysqldump -uroot -p MyDatabase > /home/users/backup_MyDB/full_myDB.sql

En lugar de, full_myDB.sqlme gustaría tener algo así como 2014-04-04_full_myDB.sqldonde la fecha se agrega dinámicamente dependiendo de la fecha que tengamos.

Si el archivo de copia de seguridad SQL es anterior a una semana, me gustaría que el cronjob lo elimine automáticamente.

pbaldauf
fuente

Respuestas:

15

Con GNU date(predeterminado en Linux Mint) puede hacer:

mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +%F)_full_myDB.sql

Para eliminar archivos de más de 1 semana:

find /home/users/backup_MyDB -type f -mtime +7 -exec rm {} +

Aunque en general es aconsejable ver lo que está eliminando antes de eliminar (al menos al probar su secuencia de comandos) para esto simplemente haga lo siguiente:

find /home/users/backup_MyDB -type f -mtime +7
Graeme
fuente
Estaba preparando la respuesta pero me ganaste: P
Ramesh
2
@Ramesh, me alegro de haberle superado a alguien por un cambio, generalmente publico y alguien ya tiene una respuesta similar.
Graeme
Muy agradable. Lo único que estoy cambiando para mi uso es poner los detalles de acceso a db en un archivo .my.cnf.
Johann Dyck
4

Utilicé la información anterior y quería proporcionar una actualización menor más que realmente trunca una de las tablas realmente grandes que ralentizaba nuestras copias de seguridad.

Esperemos que esto ayude a alguien más.

Usando la información anterior, creé un script de shell básico llamado mysqlbackup.sh con el siguiente contenido:

#!/bin/sh
find /data/var/backups/mysql/dumps -type f -mtime +3 -exec rm {} +
mysql -e "truncate table sitename_prod.cache_table"
mysqldump sitename_prod > /data/var/backups/mysql/dumps/$(date +%F)_full_sitename_prod.sql

Asegúrese de ejecutar: chmod + x mysqlbackup.sh

También puse esto en mi crontab -e:

# MYSQL Dump and retention for 3 days
30 22 * * * bash /root/bin/mysqldump.sh > /dev/null 2>&1
Jason Ruyle
fuente
3

Sé que es muy antiguo, pero he usado las respuestas anteriores y he agregado una instrucción de compresión de archivos. Esperemos que alguien más encuentre esto útil.

1) Investigando un poco, 7-zip parece el mejor compresor que existe. Si su distribución de Linux lo admite, puede usar el instalador apt:

sudo apt-get install p7zip-full

Alternativamente, puede usar tar.gz si se siente más cómodo con él.

2) Luego, crea un script, por ejemplo, /home/users/backup.sh con los contenidos:

#!/bin/sh
find /home/users/backup_MyDB -type f -mtime +7 -exec rm {} +
mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +%F)_full_myDB.sql
7z a /home/users/backup_MyDB/$(date +%F)_full_myDB.7z /home/users/backup_MyDB/*.sql
rm -f /home/users/backup_MyDB/*.sql

Este script encontrará los archivos con más de 7 días y los eliminará, luego hará el volcado de sql, luego comprimirá 7 todos los archivos .sql en el directorio, luego eliminará todos los archivos .sql en el directorio ( Por cierto, opcionalmente puede agregar un comando mysql antes del volcado, como se señaló en la respuesta anterior si lo necesita)

3) Hacemos un chmod +x /home/users/backup.shpara que pueda ser ejecutable.

3.1) Debe probar su secuencia de comandos si funciona según lo previsto

4) Programamos la tarea con crontab -e

# Minute   Hour   Day of Month       Month          Day of Week        Command    
# (0-59)  (0-23)     (1-31)    (1-12 or Jan-Dec)  (0-6 or Sun-Sat)                
30        4          *            *                1-6            /home/users/backup.sh >> /dev/null 2>&1

Y eso es. Realizará una copia de seguridad de su base de datos MySQL todos los días de la semana a las 4:30 a.m. (excepto los domingos), y comprimirá la copia de seguridad

Gusstavv Gil
fuente
1

Para agregar a la respuesta de @ Graeme, vale la pena señalar que a veces es posible que deba escapar del carácter '%' en un trabajo cron para que se vea así:

 mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +\%F)_full_myDB.sql
frezq
fuente