Accéder au contenu.
Menu Sympa

fr - Re: [sympa-fr] backup

Objet : Pour les administrateurs de serveurs de listes utilisant le logiciel Sympa

Archives de la liste

Chronologique Discussions  
  • From: Bruno Jolys <adresse@cachée>
  • To: adresse@cachée
  • Subject: Re: [sympa-fr] backup
  • Date: Thu, 21 Sep 2017 08:52:26 +0200

Bonjour,

Je répare un petit oubli : compresser la base après mysqldump évidemment, ça tiendra moins de place !
C'est relativement facile à ajouter, juste à la ligne 106 :

gzip "$REP_DOMAINE/$DUMP_FILE"

Bien coopérativement
Bruno

#!/bin/bash
#######################################################################
## Par Bruno
## Sympa 6.2.16 (à adapter sinon)
## sans aucune garantie
## GNU GPLv3
#######################################################################
## sauvegarde données Sympa (manuelle ou via cron)
## version 2017-09-21

echo "Sauvegarde des listes Sympa sur $(hostname), le $(date +%d-%m-%Y) vers
$(date +%H:%M)"


# ------------ variable à adapter ------------

# utilisateur local (les sauvegardes seront faites dans
/home/$UTILISATEUR/...)
UTILISATEUR="userssh"

# sympa.conf
SYMPA_CONF="/etc/sympa/sympa/sympa.conf"

# répertoire list_data
LIST_DATA="/home/sympa/list_data"

# nom de domaine
DOMAINE="mon-domaine.org"


# ------------ sauvegarde des membres des listes ------------

# répertoire de sauvegarde
REP_BACKUP_MEMBRES="/home/$UTILISATEUR/backup_membres"

# sous-répertoire nom de domaine
REP_DOMAINE="$REP_BACKUP_MEMBRES/$DOMAINE"

# ne garder que les 15 dernières sauvegardes
if [ -d "$REP_DOMAINE" ]
then
for REP in $( find "$REP_DOMAINE" -iname 'membres_*' | sort --reverse |
sed -n '16~1 p' )
do
[ -d "$REP" ] && find "$REP" -delete
done
fi

# répertoire de sauvegarde du jour
REP_SAUVEGARDE="$REP_DOMAINE/membres_$(date +%Y-%m-%d)"
[ -d "$REP_SAUVEGARDE" ] && find "$REP_SAUVEGARDE" -delete
mkdir -p "$REP_SAUVEGARDE"

# lancement préalable du dump par Sympa
echo ""
echo "Dump en cours..."
logger -i "backup: dump all lists /usr/lib/sympa/bin/sympa.pl --dump=ALL"
/usr/lib/sympa/bin/sympa.pl --dump=ALL

# boucle de récupération
echo ""
echo "Récupération des membres pour chaque liste..."
logger -i "backup: copy subscribers to $REP_SAUVEGARDE"
for F in $( find "/home/sympa/list_data/$DOMAINE" -iname
'subscribers.db.dump' | sort )
do
echo "--> $F";
chown sympa:sympa "$F"
LISTE=$( echo "$F" | sed "s/^.*$DOMAINE\///;s/\/subscribers.db.dump//" )
sed '/^[ ]*$/ d;/^date / d;/^update_date / d;/^reception / d;/^visibility
/ d;s/^email //g' "$F" | sed ':debut;N;s/\n/#/;t debut' | sed 's/#gecos
/|/g;s/#/\n/g' | sed 's/^\([^|]*\)$/\1|/g' > "$REP_SAUVEGARDE/$LISTE.txt"
done

# permissions
chown -R ${UTILISATEUR}:${UTILISATEUR} "$REP_SAUVEGARDE"


# ------------ sauvegarde de la base ------------

# répertoire de sauvegarde
REP_BACKUP_DB="/home/$UTILISATEUR/backup_db"

# sous-répertoire nom de domaine
REP_DOMAINE="$REP_BACKUP_DB/$DOMAINE"
mkdir -p "$REP_BACKUP_DB/$DOMAINE"

# ne garder que les 15 dernières sauvegardes
if [ -d "$REP_DOMAINE" ]
then
for F in $( find "$REP_DOMAINE" -iname 'sympa_*' | sort --reverse | sed
-n '16~1 p' )
do
[ -f "$F" ] && rm "$F"
done
fi

# fichier de sauvegarde
DUMP_FILE="sympa_$(date +%Y-%m-%d).sql"

# base de données Sympa
DBNAME=$( sed '/^db_name/ ! d;s/db_name[ \t]*//' ${SYMPA_CONF} )
DBHOST=$( sed '/^db_host/ ! d;s/db_host[ \t]*//' ${SYMPA_CONF} )
DBUSER=$( sed '/^db_user/ ! d;s/db_user[ \t]*//' ${SYMPA_CONF} )
DBPORT=$( sed '/^db_port/ ! d;s/db_port[ \t]*//' ${SYMPA_CONF} )
DBPASS=$( sed '/^db_passwd/ ! d;s/db_passwd[ \t]*//' ${SYMPA_CONF} )

# sauvegarde
echo ""
echo "Dump de la base de données Sympa..."
logger -i "backup: copy database to $REP_DOMAINE/$DUMP_FILE"
mysqldump --host=$DBHOST --port=$DBPORT --user=$DBUSER --password=$DBPASS
$DBNAME > "$REP_DOMAINE/$DUMP_FILE"
gzip "$REP_DOMAINE/$DUMP_FILE"

# permissions
chown -R ${UTILISATEUR}:${UTILISATEUR} "$REP_DOMAINE"


# ------------ sauvegarde config listes ------------

# répertoire de sauvegarde
REP_BACKUP_LIST_DATA="/home/$UTILISATEUR/backup_list_data"

# sous-répertoire nom de domaine
REP_DOMAINE="$REP_BACKUP_LIST_DATA/$DOMAINE"

# ne garder que les 15 dernières sauvegardes
if [ -d "$REP_DOMAINE" ]
then
for REP in $( find "$REP_DOMAINE" -iname 'list_data_*' | sort --reverse |
sed -n '16~1 p' )
do
[ -d "$REP" ] && find "$REP" -delete
done
fi

# répertoire de sauvegarde du jour
REP_SAUVEGARDE="$REP_DOMAINE/list_data_$(date +%Y-%m-%d)"
[ -d "$REP_SAUVEGARDE" ] && find "$REP_SAUVEGARDE" -delete
mkdir -p "$REP_SAUVEGARDE"

# boucle de récupération
echo ""
echo "Récupération de la config des listes..."
logger -i "backup: copy list_data to $REP_SAUVEGARDE"
for REP in $( find "$LIST_DATA/$DOMAINE" -regextype sed -regex
"$LIST_DATA/$DOMAINE/[^/]*" | sort )
do
LISTE=$( echo $REP | sed 's/^.*\///g' )
echo "--> $LISTE";

mkdir "$REP_SAUVEGARDE/$LISTE"

# boucle sur les fichiers de config (sauf *.dump *.old *.orig *.[0-9]
stats )
for F in $( find "$REP" -type f -regextype sed -regex "$REP/[^/]*" | sed
'/\.dump$/ d;/\.old$/ d;/\.orig$/ d;/\.[0-9]*$/ d;/stats$/ d' )
do
cp "$F" "$REP_SAUVEGARDE/$LISTE/"
done
done

# permissions
chown -R ${UTILISATEUR}:${UTILISATEUR} "$REP_SAUVEGARDE"


# ------------ fin de sauvegarde ------------

echo ""
echo "Sauvegarde terminée vers $(date +%H:%M)"
null



Archives gérées par MHonArc 2.6.19+.

Haut de le page