Logo Khaganat
Traductions de cette page?:

Les informations sur cette page ne sont plus à jour. Cela vous aidera peut-être, mais usez de votre discernement et adaptez.

Ceci est une ancienne révision du document !


Processus de sauvegarde sur un serveur.

Il peut arriver pleins de choses à un ordinateur, d'autant plus s'il est en ligne, donc : sauvegardez, sauvegardez !

Pour que les sauvegardes servent à quelque chose, il faut qu'elles soient fonctionnelles, régulières, et placés en divers lieux physiques. Au minimum, envoyez les sauvegardes de votre serveur sur votre propre ordinateur ; dans l'absolu, c'est plus pratique d'avoir un second serveur en ligne dédié à la sauvegarde+un ordinateur personnel qui duplique les données. Trois endroits où avoir les données, ce n'est pas trop.

Pensez que votre serveur peut être piraté… mais aussi que le disque dur peut lâcher brusquement ou disparaître dans un incendie. Dans ce cas, comment remettrez-vous les données en ligne ?

Nous vous présentons ici une façon de faire : il en existe d'autres.

Complétez cet article avec vos connaissances !

Sauvegarde des bases mysql via un script

Un certain nombre de CMS passent par des bases de données type mysql. Vous pouvez sauvegarder toutes ces bases en un script, lancé à intervalle régulière via cron.

Exemple de cron, le premier script se lançant tous les jours à 00H30, le second à 1H301) :

30 0 * * * /home/user/backup/backup.sh
30 1 * * * /home/user/backup/balai.sh

backup.sh se charge de sauvegarder, de façon séparé, chacune des tables utiles, tout en les incrémentant avec la date du jour. En bonus, la sauvegarde d'un annuaire LDAP à la fin :

#!/bin/bash
 
TODAY=$(date +%Y-%m-%d)
 
/usr/bin/mysqldump -u root -p$(cat /home/user/.password) --opt etherpad > /home/user/backup/$TODAY-etherpad-mysqldump.sql
/usr/bin/mysqldump -u root -p$(cat /home/user/.password) --opt smf > /home/user/backup/$TODAY-smf-mysqldump.sql
/usr/bin/mysqldump -u root -p$(cat /home/user/.password) --opt teampass > /home/user/backup/$TODAY-teampass-mysqldump.sql
/usr/bin/ldapsearch -xLLL -D "cn=admin,dc=monserveur,dc=net" -w $(cat /home/user/.ldapassword) > /home/user/backup/$TODAY-exportKLDAP.ldif

Adaptez ce script à vos propres besoins. S'assurer que les fichiers /home/user/.password et /home/user/.ldapassword contiennent bien le mot de passe de root (mysql et ldap)… et que les droits sont donnés, en lecture, uniquement à l'utilisateur qui va lancer le script.

balai.sh vire les plus anciennes sauvegardes, sinon ça devient le bazar et ça prend de la place :

#!/bin/bash
 
#Nettoie le dossier "Backup" régulièrement, afin qu'il ne prenne pas trop de place.
 
#On se fait une jolie variable qui imite le nom des fichiers de sauvegarde, avec leur chemin complet, pour éviter d'effacer n'importe quoi
mysqldump='/home/user/backup/*mysqldump.sql*'
 
#On efface ceux ayant plus de 15 jours
find $mysqldump -type f -mtime +15 -exec /bin/rm -f {} \;

Rsync sur les données vers un serveur distant

Copie des données distantes

Sur le serveur de sauvegarde, un script (script.sh) se charge de faire un rsync sur les données utiles.

bash
#!/bin/bash
 
for var in $(cat /home/user/sav/backup); do  rsync -av utilisateur@monserveur.net:$var /home/user/sav/vps; done > /home/user/sav/vps$(date +%Y-%m-%d)-svg.log 2> /home/user/sav/vps$(date +%Y-%m-%d)-err.log

Adapter /home/user/sav/ à votre propre chemin sur votre serveur.

Le fichier backup (dans le même dossier que script.sh) liste les dossiers à sauvegarder, par exemple :

/home/user/backup
/home/etherpad
/home/user/supybot
/var/www
  • backup est notre dossier avec les sauvegarde mysql, cité plus haut
  • etherpad et supybot sont des exemples de dossiers situés dans des endroits spécifiques
  • /var/www devrait sauvegarder toutes vos données accessibles via le net.

Deux fichiers de log sont générés, l'un avec les possibles erreurs, l'autre avec ce qui a été synchronisé. Lancez le script une première fois et vérifiez les erreurs : ce serait dommage que vos sauvegardes ne fonctionnent pas, parce que vous avez oubliez de configurer les droits sur vos fichiers !

Faire tourner les sauvegardes

Afin d'avoir des sauvegardes à différents moments, afin de pouvoir remonter dans le temps en cas de souci, un script copie régulièrement les dossiers, puis les effacent après 100 jours :

#!/bin/bash
# Sauvegardes tournantes web : pour garder une version plus ancienne en cas de souci. 
# Chaque version a 5 jours de décalage ; au bout de 3 mois on vire.

# On récupère les variables du jour 
day=$(date +'%d')
year=$(date '+%Y')
m=$(date -d "today" '+%m')
#On se fait une jolie variable avec la date du jour
sav=save_$year-$m-$day
# On copie le dossier actuel du site web dans un autre répertoire
cp -R /home/user/sav/vpsweb/ /home/user/sav/oldsave/$sav
# Dossiers à effacer lorsqu'ils sont trop vieux, avec chemin complet
savdel='/home/user/sav/oldsave/*'
# On supprime celui qui date d'il y a plus de 100 jours. 
find $savdel -type f -mtime +100 -exec /bin/rm -R {} \;
# cron à mettre en place
# 15 3 5,10,15,20,30 *  * user /home/user/sav/sav_tournante.sh

Adapter user et le chemin des dossiers. Dans l'exemple, un dossier “oldsave” a été créé dans /home/user/sav afin de stocker les dossiers sauvegardés.

Cron

Enfin, un cron sur le serveur lance la sauvegarde régulièrement (ici, à 2H00 le 1er, 3e, 5 et 7e jour de la semaine), ainsi que le script pour garder des images plus vieilles (à 3H15 le 5, le 10, le 15, le 20, le 25 et le 30 de chaque mois) :

0 2 * * 1,3,5,7 /home/user/sav/script.sh
15 3 5,10,15,20,30 *  * user /home/user/sav/sav_tournante.sh

Pour que ces scripts fonctionnent, il faut avoir donné le droit à votre serveur de sauvegarde de se connecter au serveur à sauvegarder sans mot de passe ; voir connexion_serveur_admin

À la main de temps en temps ?

Cela change rarement, mais ça peut faire gagner du temps :

Sauver les fichiers dans /etc/apache2/sites-available de temps en temps, après les modifications.

Sauver le contenu de /etc/openvpn en cas de changement, si vous avez mis en place un VPN.

Sauvegarder l'état du pare-feu :

iptables-saves > 2016-02-17-iptables-saves
1)
Il vaut mieux lancer les scripts de sauvegarde au moment où vos utilisateurs ont peu de chance d'être en ligne, car ils peuvent consommer pas mal de ressources.
CC Attribution-Share Alike 4.0 International Driven by DokuWiki
fr/sauver_serveur.1473836647.txt.gz · Dernière modification : 2021/12/03 19:18 (modification externe)

Licences Mentions légales Accueil du site Contact