Script sauvegardes mysql amélioré

Bonjour,

Voila aujourd’hui j’ai un script qui me sauvegarde mes bases mysql et va les copier sur un ftp.
Tous les jours, un fichier.sql est généré avec la date.

Mon problème est le suivant : Si de temps à autre je ne supprime pas mes .sql, JE VAIS FAIRE PETER LE DISQUE DUR !!!

Je veux donc mettre en place un système qui supprimerai les sauvegardes plus vieilles que 2 semaines.

2 solutions :

soit je crée automatiquement en début de semaine un dossier qui va recevoir les 7 sauvegardes de la semaine et en plus de cela je programme une suppression de dossier pour ne garder que les 2 derniers dossiers.

soit je garde mon script actuel dans lequel il n’y a aucune notion de semaine et je ne garde que les 14 derniers fichiers générés et je supprime le reste.

  1. qu’en pensez vous ? quel est le meilleur choix ?
  2. avez vous une trame de code à me faire parvenir ?

Voici mon backupbdd.sh :

echo “Creation de l’archive …”

DATE=$(date +%d-%m-%Y-%H-%M) # pour donner une date a chaque sauvegarde

FICHIER=/home/backups/bdd${DATE}.sql

mysqldump -uroot -ptoor --all-databases > $FICHIER

echo “Archive faite …”

echo “Envoi de l’archive sur le serveur FTP …”

HOST='192.168.1.50’
USER='sauvegarde’
PASSWD=‘sauvegarde’

ftp -n $HOST <<TOTO
user $USER $PASSWD
binary
cd bddmysql
put $FICHIER bdd${DATE}.sql
quit
TOTO

echo “Envoi reussi !”

Tous les chemins mènent à Rome :smiley:

Effectivement,

Comme je suis un feignant, voici mon script, il n’est pas terminé mais s’il peut servir à quelqu’un… tant mieux :

Il sauve les bases mysql dans une archive.
Il regarde quel mois nous sommes.
Si on est le 1er du mois, il crée un nouveau dossier avec le mois dans le nom du dossier et y copie le fichier .sql dedans.
Sinon, il copie le fichier dans le répertoire du mois courant.

[code]echo “Creation de l’archive …”
#Récupération de la date
DATE=$(date +%d-%m-%Y-%H-%M)
#Creation du fichier .sql de sauvegarde
FICHIER=/home/guillaume/scripts/bdd${DATE}.sql
#Envoie de l’archive dans le .sql précédemment créé
mysqldump -uroot -ptoor --all-databases > $FICHIER
echo “Archive effectuee …”
#Récupération du mois en cours
mois=$(date +%m)

#Verification de l’existance du dossier pour les sauvegardes du mois actuel
if [ -d backupmysql-${mois} ]
then
echo "Le dossier de sauvegarde pour le mois en cours existe deja"
cp bdd${DATE}.sql /home/guillaume/scripts/backupmysql-${mois}
echo "Copie de l’archive dans le repertoire backupmysql-(mois) effectuee…"
rm bdd${DATE}.sql
else
echo "Le dossier de sauvegarde pour le mois en cours n’existe pas."
echo "Creation en cours…OK"
mkdir backupmysql-${mois}
chmod -R 777 backupmysql-${mois}
echo "Attribution des droits au nouveau dossier…OK"
cp bdd${DATE}.sql /home/guillaume/scripts/backupmysql-${mois}
echo "Copie de l’archive dans le repertoire backupmysql-(mois) effectuee… "
rm bdd${DATE}.sql
fi
echo “Archive effectuee avec succes”[/code]

Il ne reste plus quà modifier ce scripts pour supprimer les dossiers qui ont plus de 2 mois.
Cela permet d’avoir une archive journalière de ses bdd sur le dernier mois au minimum et sur 2 mois au maximum

Hello,
La commande ‘find’ peut t’aider à résoudre ton problème.

Je me suis fait un script qui sauve mes BDD MySQL aussi, et pour supprimer les vieux backups la commande ‘find’ est magique :

Listera les fichiers datant de plus de 14 jours (13 auquel faut rajouter 1, voir le man). Le ‘m’ de ‘mtime’ pour ‘modified’, mais les backups ne sont généralement pas modifiés donc ça équivaut à se baser sur la date de création.
Et pour finir tu les supprimes :