Script de backup sauvegarde mysql par ftp

Posté le 4 Sep, 2006 dans debian, dedibox, linux | 25 Commentaires

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

  1. Fumble dit :

    Bonjour,

    Je tenais à vous remercie pour le script. C’est exactement ce que je cherchaus et il marche très bien.

    Félicitations 😉

  2. Fumble dit :

    Damned, ne faites pas attentions aux fautes 😉

  3. sidhannowe dit :

    Pareil, impec ce script ! C’est ce qu’il me fallait.

  4. admin dit :

    Content que ca serve 😉
    ++

  5. SnorkY dit :

    Merci pour ce script, c’est génial ! 😉

  6. Merci pour ce script, vraiment simpa et simple de compréhension 🙂

  7. Alpha dit :

    Chapeau Admin et grand merçi

  8. […] 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 […]

  9. pablo dit :

    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

  10. Eric dit :

    Bonjour,

    Merci pour ce script que je devais installer depuis tres longtemps …
    Maintenant, je suis plus tranquille grace a toi !!!

    MERCI encore
    Eric

  11. fdez dit :

    Bravo pour ce script.
    Simple et efficace.
    Nous attendons d’autre chef d’oeuvre de toi.
    Merci pour ce magnifique travail

  12. guy dit :

    merci, super ton script

  13. […] Ce script est dans la ligné de celui du backup de base mysql puis envoie par ftp. […]

  14. ivan dit :

    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 *

  15. Morgan dit :

    Merci beaucoup pour ce script! Je cherchais justement un script de ce type, et avec les précisions d’ivan c’est tout bon! 😀

  16. levdamien dit :

    Fonctionne du premier coup 😉

    Thx

  17. Morgan dit :

    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!

  18. @Moragn
    De base il te les save toutes.
    Tu indiques celle que tu veux exclure 😉

  19. Morgan dit :

    Ah… j’avais mal lu ^^ nickel, merci alors, je teste ça dans les 2 jours 🙂

  20. […] 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 […]

  21. ebouilleur dit :

    Super script, il va m’être bien pratique 😉

  22. fdez dit :

    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

  23. muby dit :

    Merci bcp pour ton script

  24. Fred dit :

    Merci pour les sources,
    C’est bien pratique pour se refaire la main.

Trackbacks

  1. […] 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 […]

  2. […] Ce script est dans la ligné de celui du backup de base mysql puis envoie par ftp. […]

  3. […] 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 […]

URL de trackback: https://www.billyboylindien.com/linux/script-de-backup-mysql-par-ftp.html/trackback/