[Article] [beta]Sauvegarder un dédié part II

WRInaute occasionnel
Bonjour a tous,

Je vous avais déja parlé d'une méthode pour sauvegarder son serveur ici

Je vais vous parler d'une autre méthode, en utilisant le logiciel RSYNC

Attention, si vous êtes débutant attendez que quelqu'un qui maitrise est bien validé cet article ^^

Wikipédia a dit:
rsync (remote synchronization, synchronisation distante) est un logiciel de synchronisation de fichiers, distribué sous licence GPL. La synchronisation est unidirectionnelle, c'est-à-dire qu'elle copie les fichiers de la source en direction de la destination. rsync est donc utilisé pour réaliser des sauvegardes incrémentales ou pour diffuser le contenu d'un répertoire de référence.

rsync fonctionne sur un large spectre de systèmes d'exploitation (Microsoft Windows, Linux, Mac OS X), permettant ainsi de synchroniser des fichiers de différents systèmes d'exploitation.

Je vais prendre ici un exemple d'un serveur linux ou unix vers un autre serveur linux ou unix (GNU linux, freebsd, openbsd..) ...

Personnellement mon pc de bureau tourne sous linux et mon serveur aussi, donc je backup directement sur mon pc de bureau, mais on peut très bien imaginer un deuxième serveur en datacenter ou un serveur a la maison comme kazhar l'as fait.

Personnellement je backup /home, /etc, /root et /var, a vous de choisir ;)

J'ai pris l'habitude de faire un backup des tables mysql avant histoire d'avoir quelque chose de plus simple en cas de crash...

Pour ce script c'est vraiment quelque chose de "basique" mais quand même sécurisé car passant par une connexion SSH ...

Pour la rédaction on dira que le serveur a sauvegarder est le 'serveur client' et le serveur sur lequel seront stockés les backup est le 'serveur de backup'

Le script :
Code:
#!/bin/bash
echo Script de sauvegarde ...
#
# Sauvegarde via rsync

###### Debut Initialisation ######

### DEBUT des Parametres concernant le backup de mysql ###
#user mysql :
strMysqlUser=""
#mot de passe mysql de l'user:
strPassword=""
#dossier sur le serveur client ou l'ont stocke les sauvegarde des bases de donn�es avant de tout transferer sur le serveur de backup
#ex : /home/root/mysql/
#/!\ Penser a mettre un slash de chaque cot
bkpmysql=""
### FIN des Parametres concernant le backup de mysql ###

### DEBUT des Parametres concernant le transfert via rsync ###
# IP ou Domaine du serveur de backup 
# exemple adresse = "****.dyndns.org"
adresse=""
# utilisateur pour la connexion SSH sur le serveur de backup
#ex user="toto"
user=""
#Dossier sur le serveur de backup dans lequel on va copier les sauvegardes
#ex: repbkp="/home/toto/backup-serveur/"
#/!\ Penser a mettre un slash de chaque cot
repbkp=""
### FIN des Parametres concernant le transfert via rsync ###

echo - Backup MYSQL
echo -----------------------------------------------------
listDatabase=$(mysql --user=$strMysqlUser --password=$strPassword --exec="SHOW DATABASES;" |  tail -n +2)
 
#dump de chaque base dans un fichier
for lineDatabase in $listDatabase
do
    echo Debut du dump de la base $lineDatabase vers $bkpmysql
    mysqldump --user="$strMysqlUser" --password="$strPassword" "$lineDatabase" | gzip > "$bkpmysql""$lineDatabase".sql.gz
    echo Dump compressé dans $bkpmysql$lineDatabase.sql.gz
    echo -----------------------------------------------------
done

echo - Transfert via Rsync
rsync -arz --stats --progress --delete --force --ignore-errors  /home $user@$adresse:$repbkp
rsync -arz --stats --progress --delete --force --ignore-errors  /var $user@$adresse:$repbkp
rsync -arz --stats --progress --delete --force --ignore-errors  /etc $user@$adresse:$repbkp
rsync -arz --stats --progress --delete --force --ignore-errors  /root $user@$adresse:$repbkp


echo Fin de la sauvegarde
exit 0

Le script a besoin d'un accès SSH sur le serveur de backup pour pouvoir y copier les fichiers, le script sera executer via "cron" en root pour être sur de tout copier :)

Sur le serveur client

Les commandes doivent être exécutées en root

Sur le serveur client on va générer une paire de clé pour pouvoir avoir un accès SSH sans avoir a taper de mot de passe ...

Code:
ssh-keygen -t dsa -b 1024

Ne rien mettre en passphrase

Puis on copie la clé publique sur le serveur de backup (penser a remplacer "user" et "ip.du.serveur" par les bonnes valeurs :

Code:
ssh-copy-id -i ~/.ssh/id_dsa.pub user@ip.du.serveur

On se place dans le repertoire /home/root

Code:
cd /root/

On va creer le script

Code:
vim backup.sh

Une fois dans vim on copie le texte
On tappe

Code:
:set paste

Puis i pour insertion

Code:
i

En on peut coller le texte (en ayant tout bien rempli ;))

Code:
Ctrl + v

On enregistre et on quitte :

Code:
:wq

On rend éxécutable le script

Code:
chmod +x sauvegarde.sh

Pour plus de sécurité :

Code:
chmod 640 sauvegarde.sh

Vous pouvez exécuter le fichier avec la commande

Code:
./sauvegarde.sh

Ca marche ? bon ben on continue maintenant , on va exécuter le script tout les jours avec cron

Attention, si un fichier a été supprimé du disque dur sur serveur client il sera supprimé du disque du serveur de backup a la prochaine sauvegarde (grâce a l'option --delete)

Code:
vim /etc/crontab

Et ajouter cette ligne

Code:
30 04 * * * root cd /root && ./sauvegarde

Le script s'exécutera tout les matins a 4h30
Pour ceux qui veulent comprendre comment ca marche : http://fr.wikipedia.org/wiki/Crontab

N'hésitez pas a poser des question ou des remarques :)

Ron[/code]
 
WRInaute accro
En quoi le transfert via rsync est-il mieux qu'un transfert par ftp ?

nb : le lien vers mon profil ne fonctionne pas :mrgreen:
 
WRInaute occasionnel
kazhar a dit:
En quoi le transfert via rsync est-il mieux qu'un transfert par ftp ?

nb : le lien vers mon profil ne fonctionne pas :mrgreen:

Corrigé pour les liens

Effectivement je n'ai pas dit pourquoi c'était plus intéressant via rsync

En fait rsync va juste transférer sur le serveur de backup les fichiers/dossiers qui ont été ajoutés/modifiés et il va aussi supprimé du serveur de backup les fichier qui ont été supprimés du serveur client depuis la dernière sauvegarde...

Ensuite c'est quand même bien sécurisé car via ssh ...
 
WRInaute accro
Ok :)
Seconde question. Tu dit ici donc que cela va supprimer les anciens fichiers. Super.

Seulement si je veux faire de l'incrémental un peu poussé :
- Conserver les deux dernières sauvegardes
- Conserver la dernière sauvegarde des dimanches sur les 4 dernières semaines

C'est pas possible ou on peut trifouiller ? :p

P.S. : oui je suis parano et chiant :)
 
WRInaute occasionnel
Conserver les deux dernières sauvegardes

c'est tout a fait fesable en utilisant le même principe que le backup ftp

Par exemple on pourrait remplacer ( a tester :))
Code:
repbkp=""

Par

Code:
#repertoire ou seront stockées les sauvegardes
#ex : $repTravail="/home/ron/home/toto/backup-serveur/"
$repTravail=""
dateActuelle=$(date +%d%m%Y)
datePassee=$(date --date '2 days ago' +%d%m%Y)
repbkp=$repTravail$dateActuelle 

echo - Suppression du repertoire $repTravail$datePassee
rm -rf $repTravail$datePassee

Ainsi dans home/ron/home/toto/backup-serveur/ j'aurai des dossiers avec les dates et dans ces dossiers j'aurai les sauvegardes ...

Conserver la dernière sauvegarde des dimanches sur les 4 dernières semaines

Deux méthodes possibles :

Première méthode (celle que j'adopterai) :
Dans le script exécuté tout les jours tu détecte si on est dimanche , si oui tu exécute un autre script qui est le même que celui que je présente ici a deux différences près :
-il sauvegardera dans un autre repertoire sur le serveur de backup
-il supprimera le backup vieux de un mois uniquement :)

Seconde méthode :

Un script sur ton serveur de backup exécuté uniquement le dimanche 2h après le backup et qui copie la sauvegarde dans un autre répertoire et supprimera le backup vieux de un mois
A mon avis moins bien car si tu a un problème de synchro entre les deux serveurs :s
 
WRInaute accro
Il est évident que la première méthode est mieux ;)
Je me pencherai là-dessus dimanche. Et je viendrai valider ton article si personne ne l'a encore fait et que ça fonctionne.
 
WRInaute occasionnel
J'ai testé mais comme je l'ai fait au fur et a mesure j'ai peut etre zapper des trucs :)

Si vous avez des améliorations a proposer :)
 
WRInaute discret
Merci pour cet article !

Je vais tester tout ça, mais déjà : +1 reco pour l'initiative !

Bonne fin de journée
 
WRInaute impliqué
On peut faire du rsync entre un serveur linux et un ordinateur sous windows via cwRsync.
 
WRInaute occasionnel
BackupPC

Bonsoir,

dans le même ordre d'idée, vous pouvez aussi utiliser BackupPC (http://backuppc.sourceforge.net/).

Il s'agit d'une collection de script perl qui permet de faire des copies de sauvegarde via tar, rsync et ssh.

Un fichier de configuration permet de personnaliser les copies de sauvegarde, la fréquences, le nombre de copie incrémentielle à conserver, etc.

Ce système possède une interface web pour gérer les sauvegardes. Il s'installe facilement sur un système Debian/Ubuntu.

C'est ce que j'utilise pour backupper mes serveurs dédiés et virtuel dédié.

Bruno
 
WRInaute accro
Euh, hum, vu que c'est le bazar sur mon dédié, vais me contenter des 5€ que sivit me réclame tous les mois pour faire le job de backup :)

Mais merci pour l'article, ça peut toujours servir !
 
WRInaute discret
mahefarivony a dit:
Euh, hum, vu que c'est le bazar sur mon dédié, vais me contenter des 5€ que sivit me réclame tous les mois pour faire le job de backup :)

Mais merci pour l'article, ça peut toujours servir !

C'est du rsync chez Sivit ;)
 
WRInaute accro
et d'ailleurs au passage, pour en revenir à l'article, il y a pas un démon rsyncd à lancer sur le serveur client ? Chez moi le backup sivit gueule quand ce démon n'est pas lancé
 
WRInaute occasionnel
mahefarivony a dit:
et d'ailleurs au passage, pour en revenir à l'article, il y a pas un démon rsyncd à lancer sur le serveur client ? Chez moi le backup sivit gueule quand ce démon n'est pas lancé

On peut ,mais je n'ai pas utiliser cette méthode ici ;)
 
WRInaute occasionnel
Les sauvegardes c'est bien, mais l'incrémental est très important. La sauvegarde à 5€ de Sivit c'est bien... mais si tu tu te fais hacker ton serveur 5 minutes avant le backup t'es mal...
Pour moi le bonheur absolu se trouve avec rsnapshot qui est basé sur rsync. J'utilise cela depuis quelques mois et quelle tranquillité de savoir que j'ai une sauvegarde quotidienne, une hebdomadaire et une mensuelle!

Comme le dit ce tuturiel : "Utilisant les liens durs, rsnapshot créé l'illusion de l'existance de multiples sauvegardes complétes, tout en n'occupant que la place d'une seule plus les différences".

http://www.rsnapshot.org/howto/1.1/rsna ... TO.fr.html
 
WRInaute accro
La sauvegarde à 5€ de Sivit c'est bien... mais si tu tu te fais hacker ton serveur 5 minutes avant le backup t'es mal...
Euh de toute façon si tu te fait hacker ton serveur 5 minutes avant ton backup, tu ne récupère que la précédente sauvegarde. L'incrémental n'apporte rien pour ce genre de problèmes.

L'utilité de l'incrémental peut être double :
- Cas de problème lors de la sauvegarde. On ne s'en rends pas forcément compte tout de suite.
En conservant des sauvegardes sur plusieurs jours/semaines, on peut faire une récupération sur des données un peu plus anciennes

- Cas de bug avec une nouvelle version d'une application
 
WRInaute occasionnel
kazhar a dit:
La sauvegarde à 5€ de Sivit c'est bien... mais si tu tu te fais hacker ton serveur 5 minutes avant le backup t'es mal...
Euh de toute façon si tu te fait hacker ton serveur 5 minutes avant ton backup, tu ne récupère que la précédente sauvegarde. L'incrémental n'apporte rien pour ce genre de problèmes.

Je me suis peut-être mal exprimé... Rsync va faire un backup de ton serveur "hacké" et tu n'auras que cela comme sauvegarde avec le système de Sivit. Donc rsync c'est puissant mais il faut être prudent et toujours avoir plusieurs sauvegardes. Ce n'est pas le cas avec le système Sivit.
 
WRInaute accro
bah si, ils proposent différents niveaux de backup. le machin à 5€ c'est le level 0... Ca peut aller jusqu'au level 7 (journalier+histo) je crois.
 
WRInaute occasionnel
mahefarivony a dit:
bah si, ils proposent différents niveaux de backup. le machin à 5€ c'est le level 0... Ca peut aller jusqu'au level 7 (journalier+histo) je crois.

Les level "machin" c'est pour l'infogérence, pas de rapport avec la sauvegarde. Et il me semble que je parlais du "machin à 5€" comme tu dis et c'est uniquement contre ce système que je faisais une mise en garde.
 
WRInaute accro
[--Eric--] a dit:
Les level "machin" c'est pour l'infogérence, pas de rapport avec la sauvegarde.
L'infogérance chez sivit a ses propres levels.

La sauvegarde aussi :)

Le père Thierry a dit:
Très Cher Client,

Dans le cadre de l'amélioration de nos services, nous venons d'ajouter une nouvelle fonctionnalité optionnelle à notre système de sauvegarde.

Cela consiste en l'ajout d'une capacité d'historisation de vos backups, permettant de remonter plus loin que le dernier backup effectué.

Par exemple, si vous avez un backup chaque semaine, avec une historisation N+3, vous pourrez remonter jusqu'à 4 backups, soit donc jusqu'à 4 semaines.

Autre exemple, un backup quotidien avec historisation N+6 vous permet de conserver un historique de votre serveur sur toute une semaine.

Combien cela coûte ? Chaque degré d'historisation vous est facturé sur la base de 20% seulement du budget nominal de votre option, soit donc, par exemple pour une option de sauvegarde à 5 Euros HT/mois, un budget mensuel supplémentaire de 1 Euro HT/mois par degré d'historique !

Si vous souhaitez ajouter cette fonctionnalité d'historisation à votre backup, répondez simplement à ce mail en indiquant la profondeur d'historique que vous aimeriez obtenir, et nous ferons le nécessaire.

Note: Chaque degré d'historisation est généré sur le même serveur que votre backup 'maitre'. Pour ceux qui souhaitent réaliser des sauvegardes vers des serveurs de backup distincts, afin d'en sécuriser le stockage, la prise de plusieurs options de backup 'maitre' reste nécessaire.

Nous nous tenons à votre entière disposition pour vous apporter tout complément d'information qui vous serait utile.

Bien cordialement,
 
WRInaute occasionnel
Et bien je ne devais pas être un "Très cher client"... c'est sûr que s'ils cachent leurs offres.... :roll: (Ou alors c'est tout nouveau, vu que je suis parti il y a peu).Pour la petite histoire, ils me demandaient 20€ HT pour du non incrémental pour ma sauvegarde (HD de 250 Go)...

Mais bon le "machin à 5€" n'est pas incrémental, on est bien d'accord? C'etait là uniquement le sens de ma remarque. Ce n'est pas parce qu'on a une sauvegarde qu'on est à l'abri, il faut bien penser à tout. Maintenant dommage que cette offre chez Sivit arrive un peu tard (ou soit si bien cachée).
 
WRInaute occasionnel
C'est pas un débat sur sivit merci :)

Sinon en scriptant un peu c'est carément adaptable pour faire de l'incrémental ...
 
WRInaute accro
Vous en avez de la chance... moi avec ma connexion a 256 kbps, je me demande il me faudrait combien d'heures pour transférer mes 36 Go de données ? :)
 
WRInaute occasionnel
mahefarivony a dit:
Vous en avez de la chance... moi avec ma connexion a 256 kbps, je me demande il me faudrait combien d'heures pour transférer mes 36 Go de données ? :)

C'est justement l'avantage de rsync qui ne télécharge que la différence avec la précédente sauvegarde... mais bon c'est vrai qu'avec 256 kbs :-(
Après moi en changeant d'hébergeur à cout quasi fixe je suis passé d'un serveur "bas de gamme" à deux "moyen de gamme" et là non seulement je réparti la charge mais l'un et l'autre se sauvegardent mutuellement, c'est top !
 
WRInaute occasionnel
[--Eric--] a dit:
mahefarivony a dit:
Vous en avez de la chance... moi avec ma connexion a 256 kbps, je me demande il me faudrait combien d'heures pour transférer mes 36 Go de données ? :)

C'est justement l'avantage de rsync qui ne télécharge que la différence avec la précédente sauvegarde... mais bon c'est vrai qu'avec 256 kbs :-(
Après moi en changeant d'hébergeur à cout quasi fixe je suis passé d'un serveur "bas de gamme" à deux "moyen de gamme" et là non seulement je réparti la charge mais l'un et l'autre se sauvegardent mutuellement, c'est top !

Euh tu backup comment ? via des clés ssh ? parce que si ton serveur est hacké il rentre sur le deuxième aussi :s

Problème auquel je n'est pas pensé pour ce tuto
 
WRInaute occasionnel
Sur le serveur A j'ai Mysql
Sur le serveur B Apache/Php

Le serveur B fait des sauvegardes via des dumps des bases de A.
Le serveur A fait une sauvegarde de B avec rsnapshot de B (y compris donc les dumps mysql), la connexion se fait en effet par clés ssh.
A cote de cela je fais aussi une sauvegarde de chaque serveur sur des espaces FTP offerts par l'hébergeur.

Après c'est clair, si quelqu'un prend le contrôle de ta machine il fou tout en l'air facilement, à partir du moment où tu autorises une machine à se connecter à l'autre le risque est là, quelque soit la méthode non?
 
WRInaute occasionnel
[--Eric--] a dit:
Sur le serveur A j'ai Mysql
Sur le serveur B Apache/Php

Le serveur B fait des sauvegardes via des dumps des bases de A.
Le serveur A fait une sauvegarde de B avec rsnapshot de B (y compris donc les dumps mysql), la connexion se fait en effet par clés ssh.
A cote de cela je fais aussi une sauvegarde de chaque serveur sur des espaces FTP offerts par l'hébergeur.

Après c'est clair, si quelqu'un prend le contrôle de ta machine il fou tout en l'air facilement, à partir du moment où tu autorises une machine à se connecter à l'autre le risque est là, quelque soit la méthode non?

Ou tu fait en sorte que après avoir récup le backup de l'autre machine tu bouge ca dans un autre dossier en ayant pris soin de chrooté le bash de l'autre machine ..
 
WRInaute discret
Bonsoir à tous,

Je ne voudrais pas paraitre désagréable mais pourquoi vouloir réinventer la
roue alors qu'il existe un bon logiciel libre de droits qui fait très bien le travail
de sauvegarde (système et bases MySQL par FTP, SFTP ou RSYNC) sous
Linux :

backup-manager

Cordialement,
Manu
 
Discussions similaires
Haut