Backup chiffre de MySQL avec GnuPG
De OpenWikiBSD.
Objectif : Faire une sauvegarde de vos bases MySQL en chiffrant le tout de manière asymétrique. Ainsi même si votre sauvegarde faite chez un prestataire externe passe par un lien xDSL pas sécurisé, seuls les destinataires prévus pourront déchiffrer....Toute ressemblance avec une situation existante serait purement fortuite ;-)
Pour vos courses, un coup de gnupg, un coup de mysql-client avec votre ami pkg_add
- Export de votre clé :
gpg --armor --export phil > phil.asc
pkg_add mysql-client-VERSION pkg_add gnupg-VERSION gpg --import pubring.gpg # Permet de récupérer les clés publiques de vos zamis gpg: ./trustdb.gpg: base de confiance créée . . gpg: clé 46EA1D16: clé publique « Philippe Schwarz <MAIL> » importée gpg: Quantité totale traitée: X gpg: importée: X (RSA: 2) gpg: aucune clé de confiance ultime n'a été trouvée
#!/usr/local/bin/bash
# Gnu GPL v2
# Philippe Schwarz
# Fevrier 2008
# Déclaration des variables
USERBDD=toto
HOST=MonSRVBDD
PASSWORD=toto;-)
PGPID=0x46EA1D16 # C'est ma clé GnuPG à moi
REPBACK=/sauve
SOUCI=/tmp/soucibackupMYSQL.txt
VERT="\\033[1;32m"
NORMAL="\\033[0;39m"
ROUGE="\\033[1;31m"
USERMAIL=phil@monSite.ici
MACHINE=`uname -n`
if [ -e $SOUCI ]
then
rm $SOUCI
fi
for BDD in BDD1 BDD2 BDD3
do
echo "Backup chiffre de $BDD"
logger -t SQLdump_GnuPG "Backup chiffre de $BDD"
/usr/local/bin/mysqldump --user=$USERBDD --host=$HOST --password=$PASSWORD $BDD | /usr/bin/gzip | /usr/local/bin/gpg --batch --quiet --no-verbose --ou
tput - --encrypt --armor --always-trust --encrypt-to $PGPID -r $PGPID > $REPBACK/$BDD.gz.gpg
TAILL=`du -hs $REPBACK/$BDD.gz.gpg |cut -b1-2`
STRING="Backup chiffre de $BDD "
if [ "$TAILL" == "0B" ]
then
STRINGAFF="$STRING $ROUGE PROBLEME $NORMAL"
STRINGLOG="$STRING PROBLEME "
echo "La sauvegarde de la base $BDD n'a pas été éffectuée correctement .\n">> $SOUCI
echo $STRINGAFF
else
STRINGAFF="$STRING $VERT OK $NORMAL"
STRINGLOG="$STRING OK "
echo -e $STRINGAFF
fi
logger -t SQLdump_GnuPG $STRINGLOG
done
if [ -e $SOUCI ]
then
cat $SOUCI |mail -s "Problème de sauvegarde de base de données sur $MACHINE " $USER
fi
Un petit coup d'entrée dans la crontab et c'est bon.
30 05 * * * /usr/local/script/backupMySQL.sh
- Vous pouvez aussi remplacer les deux pipes par des indirections vers des fichiers, avec l'énorme inconvénient d'avoir des traces locales sur le système de fichier. Vous devrez ajouter à chaque fois un coup de wipe.
- Lors du déchiffrement, il faut redonner l'extension .gz au biniou pour pouvoir le gunziper avant de le le lire

