System-Linux

Aller au contenu | Aller au menu | Aller à la recherche

Script de backup par ftp pour mysql

backup mysql jpeg

Voici un script qui peut vous faciliter la vie.

Ce script sert à sauvegarder toutes vos bases de données mysql et les envoi sur un ftp. Il gère aussi un petit historique au cas ou :)

Si vous n'avez pas encore de serveur ftp : voici comment installer proftpd

Voici ce script :

vi /data/sauvegarde/backup_mysql.sh

Copier coller ceci :

#!/bin/sh
#Backup mysql par ftp
Mysql_User="root"
Mysql_Paswd="votre password"
Mysql_host="localhost"
# Emplacemment des different prog utilisé, laissez tel quel si vous n'avez rien bidouillé (sinon updatedb & locate)
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
CHOWN="$(which chown)"
CHMOD="$(which chmod)"
GZIP="$(which gzip)"

# Emplacemment du dossier de backup local
DEST="/data/sauvegarde/backup/"

#Repertoire ou on met le .sql
DEST_mysql="$DEST/mysql"

#Date du jour
NOW="$(date +"%d-%m-%Y")"

# Databases a ne pas sauvegarder séparer par des espaces
IGGY=""

# On initialise les variables
FILE=""
DBS=""

#on crée le repertoire
[ ! -d $DEST_mysql ] && mkdir -p $DEST_mysql || :

#On limite l'accès 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
#nombre de jour de backup à conserver
j=15
j_a_delete=$(date +%d-%m-%Y --date "$j days ago")

## Config des repertoires 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="srvbackup.pouette.org"

## 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 *

Droits d’éxecution :

chmod 700 /data/sauvegarde/backup_mysql.sh

Il ne vous reste plus qu’a automatiser tout ça avec crontab :

crontab -e

Puis ajoutez ceci

00 03 * * * /data/sauvegarde/backup_mysql.sh >> /var/log/backup-mysql.log

Le mot de passe est en clair ! pas cool pour certain, voici un solution : ici

On dit merci qui ? et non merci à :

http://www.billyboylindien.com
Par GanGan | le mercredi, mars 25 2009 08:00

Commentaires

1. Kévin Hinault

mercredi, mars 25 2009 | 12:26

Pas mal du tout quoique que je préférerais pour ma part un script de backup via ssh. Je n'aime pas trop voir des bases de données se balader en clair sur internet. Surtout qu'elles peuvent contenir beaucoup de mot de passes ...

Y a aussi les techniques de réplications incluses dans MySQL qui permettent ce comportement de manière plus propre. Un prochain article ? ;)

2. GanGan

mercredi, mars 25 2009 | 16:50

Tu as bien raison pour le ftp mais la modif est vite faite pour le remplacer par un scp

Chui sur que tu peux trouver 5 minutes pour le faire l'article :p

3. Fred

mercredi, mars 25 2009 | 23:25

Plutot que de masquer le mot de passe avec shc qui n'est pas un compilateur de shell mais un brouilleur de shell embarqué dans un bout de C qui extrait et exécute ce shell (protection faible) je suis partisant de l'utilisation de scp avec des clés et de ssh-agent (voir mon lien).
En effet, une fois ssh-agent lancé (au boot par exemple), le sysadmin saisi le mot de passe et ensuite les scp passent tout seul ;)

4. Ham's

jeudi, décembre 2 2010 | 10:16

Ah, jsavais pas que c'étais toi qui avais proposé ce script... Je l'utilise depuis 1 ans, et il est très efficace :)

Merci Billyboy !