Objet : Pour les administrateurs de serveurs de listes utilisant le logiciel Sympa
Archives de la liste
- From: Bruno Jolys <adresse@cachée>
- To: adresse@cachée
- Subject: Re: [sympa-fr] backup
- Date: Fri, 15 Sep 2017 12:04:59 +0200
Bonjour, J'ai un peu amélioré mon backup "maison" à faire tourner à la main ou, mieux, une fois par jour via le cron. Rien d'extraordinaire, mais il met tout ce qu'il faut dans le
répertoire utilisateur souhaité (par exemple l'utilisateur
userssh) et garde sur 15 jours : Si jamais ça peut servir à d'autres... Je n'ai pas jugé utile (pour moi) de sauvegarder les documents partagés, mais ça peut se faire moyennant une petite modif. Ce script ne sauvegarde pas les archives. Je ne suis pas allé plus loin non plus dans l'exportation vers un autre serveur, ni dans une conservation genre toutes les sauvegardes sur 15 jours, puis tous les 5 jours sur 6 mois, puis tous les mois sur 3 ans... C'est le genre de chose que je fais ailleurs, dans un script séparé. Bien coopérativement Bruno |
#######################################################################
## Par Bruno
## Sympa 6.2.16 (à adapter sinon)
## sans aucune garantie
## GNU GPLv3
#######################################################################
## sauvegarde données Sympa (manuelle ou via cron)
## version 2017-09-15
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"
# 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)"
-
Re: [sympa-fr] backup,
Bruno Jolys, 15/09/2017
- Re: [sympa-fr] backup, Bruno Jolys, 21/09/2017
Archives gérées par MHonArc 2.6.19+.