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: 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 :

---> /home/userssh/backup_membres      (pour chaque liste, les abonnés au format .txt)

---> /home/userssh/backup_db           (copie de la db Sympa)

---> /home/userssh/backup_list_data    (copie des fichiers de config

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
#!/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-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)"



Archives gérées par MHonArc 2.6.19+.

Haut de le page