cronjob per il backup automatico del DB fino al file prefissato


12

Sto usando l'ultima versione di Linux Mint. Mi chiedevo se fosse possibile creare un cronjob speciale per un backup del database.

Nel mio /etc/cronjobfile ho il seguente codice:

# 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

Nel mio /home/users/backup.shho:

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

Invece di full_myDB.sqlvorrei avere qualcosa di simile a 2014-04-04_full_myDB.sqldove la data viene aggiunta in modo dinamico a seconda della data che abbiamo.

Se il file di backup SQL è più vecchio di una settimana mi piacerebbe il cronjob per eliminare automaticamente.

Risposte:


15

Con GNU date(predefinito su Linux Mint) puoi fare:

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

Per eliminare i file più vecchi di 1 settimana:

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

Anche se in genere è saggio vedere cosa stai eliminando prima di eliminare (almeno durante il test dello script) per questo basta fare:

find /home/users/backup_MyDB -type f -mtime +7

Stavo preparando la risposta ma mi hai battuto: P
Ramesh

2
@Ramesh, felice di aver battuto qualcun altro per un cambiamento - di solito pubblico e qualcuno ha già una risposta simile.
Graeme,

Molto bella. L'unica cosa che sto cambiando per il mio utilizzo è mettere i dettagli di accesso al db in un file .my.cnf.
Johann Dyck,

4

Ho usato le informazioni di cui sopra e volevo fornire un altro aggiornamento minore che effettivamente tronca una delle tabelle molto grandi che rallentava i nostri backup.

Spero che questo aiuti qualcun altro.

Usando le informazioni sopra ho creato uno script di shell di base chiamato mysqlbackup.sh con il seguente contenuto:

#!/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

Assicurati di eseguire: chmod + x mysqlbackup.sh

Ho anche inserito questo nel mio crontab -e:

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

3

So che è un grande vecchio, ma ho usato le risposte sopra e ho aggiunto un'istruzione di compressione dei file. Spero che qualcun altro lo trovi utile.

1) La ricerca un po ', 7-zip sembra il miglior compressore là fuori. Se la tua distribuzione Linux lo supporta, puoi usare il programma di installazione apt:

sudo apt-get install p7zip-full

In alternativa, puoi usare tar.gz se ti senti più a tuo agio con esso.

2) Quindi, si crea uno script, ad esempio /home/users/backup.sh Con i contenuti:

#!/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

Questo script troverà i file con più di 7 giorni e li eliminerà, quindi eseguirà il dump sql, quindi comprimerà 7 tutti i file .sql nella directory, quindi eliminerà tutti i .sql nella directory ( A proposito, puoi eventualmente aggiungere un comando mysql prima del dump, come indicato nella risposta precedente se ne hai bisogno)

3) Facciamo un chmod +x /home/users/backup.shmodo che possa essere eseguibile.

3.1) Dovresti testare il tuo script se funziona come previsto

4) Programmiamo l'attività 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

E questo è tutto. Eseguirà il backup del database MySQL ogni giorno della settimana alle 4:30 (tranne la domenica) e comprimerà il backup


1

Per aggiungere alla risposta di @ Graeme, potrebbe valere la pena notare che a volte potrebbe essere necessario sfuggire al carattere '%' in un processo cron in modo che assomigli a questo:

 mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +\%F)_full_myDB.sql
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.