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
-
Import et export mysql en ligne et encodage dit :
6 décembre 07 à 23:39
-
Billets Intéressants | Php-Developpeur dit :
27 janvier 08 à 11:21
-
Script de mise à jour automatique de plusieurs installation wordpress avec sauvegarde de bdd dit :
27 novembre 08 à 3:27
-
Script bash pour sauvegarde de base mysql | Fugitif dit :
15 octobre 09 à 15:29
URL de trackback: https://www.billyboylindien.com/linux/script-de-backup-mysql-par-ftp.html/trackback/[…] 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 […]