Voici un petit script pour sauvegarder toutes vos bases de données mysql puis les envoyé sur un ftp.
Le tout en gardant seulement un certains nombre de jours de backup.
J’utilise yafc pour le ftp, si vous ne l’avez pas:
Aptitude install yafc
Ensuite voici le script:
mkdir /cron nano /cron/script_backup_mysql.sh
Le script en lui même !
#!/bin/bash #Backup mysql par ftp Mysql_User="root" Mysql_Paswd="password-sql" Mysql_host="localhost" # Emplacemment des different prog utilisé, laisser tel quel si vous n'avez rien bidouillé MYSQL="$(which mysql)" MYSQLDUMP="$(which mysqldump)" CHOWN="$(which chown)" CHMOD="$(which chmod)" GZIP="$(which gzip)" # Emplacemment du dossier de backup local DEST="/home/archives/backup/" #Rep ou on fou le sql DEST_mysql="$DEST/mysql" #Date du jour NOW="$(date +"%d-%m-%Y")" # Databases a ne pas sauvegarder separer par des espaces IGGY="" # On initialise les variables FILE="" DBS="" #on cree le rep [ ! -d $DEST_mysql ] && mkdir -p $DEST_mysql || : #On limite l'acces au root uniquemment #$CHOWN 0.0 -R $DEST_mysql #$CHMOD 0600 $DEST_mysql # On liste les bases de donnees DBS="$($MYSQL -u $Mysql_User -h $Mysql_host -p$Mysql_Paswd -Bse 'show databases')" for db in $DBS do skipdb=-1 if [ "$IGGY" != "" ]; then for i in $IGGY do [ "$db" == "$i" ] && skipdb=1 || : done fi if [ "$skipdb" == "-1" ] ; then FILE="$DEST_mysql/$db.$NOW.gz" # On boucle, et on dump toutes les bases et on les compresse $MYSQLDUMP -u $Mysql_User -h $Mysql_host -p$Mysql_Paswd $db | $GZIP -9 > $FILE fi done #BACKUP des bases mysql par FTP #nbre de jour de backup a conserver j=7 j_a_delete=$(date +%d-%m-%Y --date "$j days ago") ## Conf des rep de backup pour le ftp DIR_BACKUP_mysql=$DEST_mysql DIR_DIST_BACKUP_mysql='/BACKUP/mysql/' #Configuration de pass ftp loginftp="login" motdepassftp="pass" host_ftp="dedibackup.dedibox.fr" ## Upload sur le ftp yafc $loginftp:$motdepassftp@$host_ftp <<** cd $DIR_DIST_BACKUP_mysql lcd $DIR_BACKUP_mysql mkdir $NOW cd $NOW put -r * cd .. rm -r $j_a_delete bye ** #On delete tout cd $DEST_mysql rm -r *
Enregistrez ensuite le fichier et donnez lui des droits d'execution:
chmod u+x /cron/script_backup_mysql.sh
Et voila, il ne vous reste plus qu'a mettre ceci dans une tache cron
crontab -e
Puis ajoutez ceci
34 06 * * * /cron/backup-mysql-ftp.sh >> /cron/save-mysql.log
Pour que votre script soit executé chaque jour à 6h34, et le log sauvé dans /cron/save-mysql.log ( à créer) 😉
25 Commentaires
Recevoir les commentaires par email
Bonjour,
Je tenais à vous remercie pour le script. C’est exactement ce que je cherchaus et il marche très bien.
Félicitations 😉
Damned, ne faites pas attentions aux fautes 😉
Pareil, impec ce script ! C’est ce qu’il me fallait.
Content que ca serve 😉
++
Merci pour ce script, c’est génial ! 😉
Merci pour ce script, vraiment simpa et simple de compréhension 🙂
Chapeau Admin et grand merçi
[…] autres posts sur ce sujet: Pour faire des sauvegardes massive mysql avec une tache cron et les envoyer sur un ftp Pour régler des problèmes d’encodage suite au passage à mysql5 par exemple et cette fois […]
Propre et rapide :), j’aime beaucoup, juste une petite sur le cron :
Remplacer:
34 06 * * * /cron/backup-mysql-ftp.sh >> /cron/save-mysql.log
Par :
34 06 * * * /cron/script_backup_mysql.sh >> /cron/save-mysql.log
[…] http://www.billyboylindien.com/blog/linux/script-de-backup-mysql-par-ftp/ […]
Bonjour,
Merci pour ce script que je devais installer depuis tres longtemps …
Maintenant, je suis plus tranquille grace a toi !!!
MERCI encore
Eric
Bravo pour ce script.
Simple et efficace.
Nous attendons d’autre chef d’oeuvre de toi.
Merci pour ce magnifique travail
merci, super ton script
[…] Ce script est dans la ligné de celui du backup de base mysql puis envoie par ftp. […]
superbe script merci beaucoup.
Pour ceux qui souhaite utiliser ncftp a la place de yafc remplacez la fin par :
## Upload sur le ftp
ncftp -u USER -p MODEPASSE SERVEUR<<EOF
cd $DIR_DIST_BACKUP_mysql
lcd $DIR_BACKUP_mysql
mkdir $NOW
cd $NOW
put -r *
cd ..
rm -r $j_a_delete
bye
**
#On delete tout
cd $DEST_mysql
rm -r *
Merci beaucoup pour ce script! Je cherchais justement un script de ce type, et avec les précisions d’ivan c’est tout bon! 😀
Fonctionne du premier coup 😉
Thx
Hello!
Est ce qu’il y a une option pour sauver TOUTES les bases de données sans avoir à les préciser à chaque fois… car 100 bases de données à taper … 🙁
Merci!
@Moragn
De base il te les save toutes.
Tu indiques celle que tu veux exclure 😉
Ah… j’avais mal lu ^^ nickel, merci alors, je teste ça dans les 2 jours 🙂
[…] de ne pas utiliser cette possibilité, et d’utiliser un script bash que j’ai trouver ici en le modifiant un peu à mon goût. Il est cependant possible d’utiliser backup-manager pour […]
Super script, il va m’être bien pratique 😉
Billyboylindien pourrait on avoir aussi un modéle de script de sauvegarde des BDs avec Postgresql?
Car nous préférons le SGBD PostGesql.
Merci d’avance
Merci bcp pour ton script
Merci pour les sources,
C’est bien pratique pour se refaire la main.
Trackbacks
[…] autres posts sur ce sujet: Pour faire des sauvegardes massive mysql avec une tache cron et les envoyer sur un ftp Pour régler des problèmes d’encodage suite au passage à mysql5 par exemple et cette fois […]
[…] http://www.billyboylindien.com/blog/linux/script-de-backup-mysql-par-ftp/ […]
[…] Ce script est dans la ligné de celui du backup de base mysql puis envoie par ftp. […]
[…] de ne pas utiliser cette possibilité, et d’utiliser un script bash que j’ai trouver ici en le modifiant un peu à mon goût. Il est cependant possible d’utiliser backup-manager pour […]