cronjob pour la sauvegarde automatique de la base de données à ce jour un fichier préfixé

12

J'utilise la dernière Linux Mint. Je me demandais s'il était possible de créer un cronjob spécial pour une sauvegarde de base de données.

Dans mon /etc/cronjobfichier, j'ai le code suivant:

# 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

Dans mon /home/users/backup.shj'ai:

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

Au lieu de, full_myDB.sqlje voudrais avoir quelque chose comme 2014-04-04_full_myDB.sqloù la date est ajoutée dynamiquement en fonction de la date que nous avons.

Si le fichier de sauvegarde SQL a plus d'une semaine, j'aimerais que le cronjob le supprime automatiquement.

pbaldauf
la source

Réponses:

15

Avec GNU date(par défaut sur Linux Mint), vous pouvez faire:

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

Pour supprimer des fichiers de plus d'une semaine:

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

Bien qu'en général, il est sage de voir ce que vous supprimez avant de le supprimer (au moins lors du test de votre script) pour cela:

find /home/users/backup_MyDB -type f -mtime +7
Graeme
la source
Je préparais la réponse mais tu m'as battu: P
Ramesh
2
@Ramesh, content d'avoir battu quelqu'un d'autre pour un changement - généralement je poste et quelqu'un a déjà une réponse similaire.
Graeme
Très agréable. La seule chose que je change pour mon utilisation est de mettre les détails d'accès à la base de données dans un fichier .my.cnf.
Johann Dyck
4

J'ai utilisé les informations ci-dessus et je voulais fournir une autre mise à jour mineure qui tronque en fait l'une des très grandes tables qui ralentissait nos sauvegardes.

J'espère que cela aide quelqu'un d'autre.

En utilisant les informations ci-dessus, j'ai créé un script shell de base nommé mysqlbackup.sh avec le contenu suivant:

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

Assurez-vous d'exécuter: chmod + x mysqlbackup.sh

J'ai également mis cela dans mon crontab -e:

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

Je sais que c'est un grand vieux, mais j'ai utilisé les réponses ci-dessus et ajouté une instruction de compression de fichiers. J'espère que quelqu'un d'autre trouvera cela utile.

1) En recherchant un peu, le 7-zip semble le meilleur compresseur du marché. Si votre distribution Linux le prend en charge, vous pouvez utiliser le programme d'installation apt:

sudo apt-get install p7zip-full

Alternativement, vous pouvez utiliser tar.gz si vous vous sentez plus à l'aise avec.

2) Ensuite, vous créez un script, par exemple /home/users/backup.sh Avec le contenu:

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

Ce script trouvera les fichiers avec plus de 7 jours et les supprimera, puis il fera le vidage sql, puis il compressera 7-zip tous les fichiers .sql dans le répertoire, puis il supprimera tous les .sql dans le répertoire ( BTW, vous pouvez éventuellement ajouter une commande mysql avant le vidage, comme indiqué dans la réponse précédente si vous en avez besoin)

3) Nous faisons un chmod +x /home/users/backup.shpour qu'il soit exécutable.

3.1) Vous devriez tester votre script s'il fonctionne comme prévu

4) Nous programmons la tâche avec 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

Et c'est tout. Il sauvegardera votre base de données MySQL chaque jour de la semaine à 4h30 (sauf le dimanche) et compressera la sauvegarde

Gusstavv Gil
la source
1

Pour ajouter à la réponse de @ Graeme, il convient de noter que vous devrez parfois échapper le caractère '%' dans un travail cron afin qu'il ressemble à ceci:

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