OVH Community, votre nouvel espace communautaire.

[HOW-TO] script de sauvegarde ftp OVH


-dj-
09/11/2010, 14h36
Bonjour,

J'aimerais mettre en place mon système de backup.

J'ai entendu parler de backup manager... et là je trouve ce script.

Qu'est ce qui pourrait être mieux selon vous ?

Sachant que j'ai une Debian+ISPConfig3 (ça fonctionnera sans problème ?)
(faudra que je remplace proftp par pureftp aussi...)

Est-ce que je risque quelque chose de mal pour mon serveur si j'utilise ce script "un peu mal" (en admettant que je fasse des modifs et que je fasse des erreurs) :s

Aikadil
15/09/2010, 04h14
Le script fonctionne parfaitement, j'ai juste enlever la partie sur proftpd vu que j'utilise sftp.

et pour un peut de souplesse j'ai rajouter deux cron tab

10 00 * * * sh /home/user/backup.sh >> /dev/null
15 00 * * * cat /home/backup/logsfiles/"$(date +\%y\%m\%d)"-backuplog.txt

La 1er ligne exécute le script chaque jours à minuit 10 pourquoi minuit 10 boaf juste pour changer des 00

et la 2em m'envoi le dernier log en date par mail à minuit 15, 5 minute suffit pour faire un backup dans mon cas, dépend de la taille de votre backup à adapter dont

ElBibich
26/04/2010, 11h17
Merci pour le script,

Bon le post n'est plus trop actif mais je me demande pourquoi on ne sauvegarde pas en ftp les bases mysql et les fichiers de conf /etc ??

julien.

Atomes
10/05/2009, 19h25
Merci pour vos réponses.
Cela fonctionne apparemment de mon côté.
Je cherche mtnt à envoyer les logs par mail pour faciliter l'analyse des sauvegardes.
Si vous avez une piste je suis preneur

tdcmystere
08/05/2009, 17h06
Citation Envoyé par Atomes
/bin/sh: /root/scripts/backup: /bin/bash^M: bad interpreter: No such file or directory
J'ai pourant bien essayé de modifier les variables pour coller à mes paramètres.
Ai-je fais une mauvaise manipulation ?
Merci d'avance pour vos réponses.
probleme de windows il ajoute des fois ^
supprimer ca et ca iras trés bien

kxraw
08/05/2009, 15h45
Une petite erreur peu survenir sur certains système (le mien en l'occurence Gentoo 64 OVH Rel.2)
les lignes de test :
if [ "$RESULT" != "0" ]; then
peuvent ne pas renvoyer les bonne valeur et faire échouer certaines commandes.

On peut les remplacer là ou ça bloque par :
if [ -e "$RESULT" ]; then

en espérant que ça puisse aider...

Atomes
06/05/2009, 18h59
Bonjour à tous,
tout d'abord merci pour ce script qui me parait bien intéressant, ovh ne mettant pas d'outils dans le webmin pour réaliser cela.
Par contre étant novice sous linux je rencontre un soucis et une erreur lorsque je lance le script à partir de la tache cron :
/bin/sh: /root/scripts/backup: /bin/bash^M: bad interpreter: No such file or directory
J'ai pourant bien essayé de modifier les variables pour coller à mes paramètres.
Ai-je fais une mauvaise manipulation ?
Merci d'avance pour vos réponses.

yatoula
06/05/2009, 11h25
Est il possible de faire envoyer le résultat a 2 adresses email différentes, si oui comment ?

Hammerhead
30/04/2009, 18h16
J'ai modifié légèrement le script pour l'adapter aux RPS et compresser les backup avec bzip2 au lieu de gz.

Code:
#!/bin/bash

#############################################
# Script de sauvegarde pour FTP             #
# SwissDadou, Fev. 2009                     #
# ------------------------------------------#
# Ce script sauvegadre tout les fichiers    #
# qui sont dans le répertoire $PATH_SAVE à  #
# l'exeption du répertoire $PATH_BACK_FILES.#
# Ce script sauvegarde aussi les bases de   #
# données MYSQL.                            #
#############################################

#############################################
# Definition des variables                  #
#############################################

# Nom du fichier de backup
NAME_FILES="nom-du-fichier-du-backup"

# Paramètres MYSQL
MYSQL_USER="user mysql"
MYSQL_PASS="pass mysql"
MYSQL_NAME="nom-du-fichier-du-backup-mysql"

# Dates
DATE_JOUR=`date +%y%m%d` # Date du jour
DATE_MOINS3=`date --date '7 days ago' +%y%m%d` # Date 7 jours avant, pour effacer les vieux backups

# Chemin des répertoires
PATH_SAVE="/home" # Répertoire qui sera sauvegardé
PATH_BACK="/home/backup" # Répertoire de base des sauvegardes
PATH_BACK_FILES=${PATH_BACK}"/backupfiles" # Répertoire du backup des fichiers
PATH_BACK_LOGS=${PATH_BACK}"/logsfiles" # Répertoire pour les logs des backups
PATH_BACK_CONF=${PATH_BACK}"/configfiles" # Répertoire de sauvegarde des configurations
PATH_BACK_MYSQL=${PATH_BACK}"/mysqlfiles" # Répertoire de sauvegarde des configurations

PATH_APACHE="/usr/local/apache/conf" # Répertoire de configuration d'apache
PATH_MYSQL="/etc/mysql" # Répertoire de configuration de MYSQL
#PATH_PHP="/etc/php5" # Répertoire de configuration de PHP
PATH_PROFTPD="/etc/proftpd" # Répertoire de configuration de proftpd
#PATH_PHPMY="/etc/phpmyadmin" # Répertoire de configuration de phpmyadmin

# Paramètre FTP
FTP_HOST="adresse ftp"
FTP_USER="user ftp"
FTP_PASS="pass ftp"

#############################################
# Configuration des répertoires             #
#############################################

# Préparation du répertoire racine pour les backups
if [ -d ${PATH_BACK} ]; then 
	echo "`date +%X` répertoire [${PATH_BACK}] existe"
else 
	mkdir $PATH_BACK
	echo "`date +%X` répertoire [${PATH_BACK}] créé"
fi

# Préparation du répertoire pour les logs
LOGNAME=${DATE_JOUR}"-backuplog.txt"
LOGFILE=${PATH_BACK_LOGS}"/"${LOGNAME}

if [ -d ${PATH_BACK_LOGS} ]; then 
	echo "`date +%X` répertoire [${PATH_BACK_LOGS}] existe" >> $LOGFILE
else 
	mkdir $PATH_BACK_LOGS
	echo "`date +%X` répertoire [${PATH_BACK_LOGS}] créé" >> $LOGFILE
fi

# Préparation du répertoire pour les backups des fichiers
if [ -d ${PATH_BACK_FILES} ]; then 
	echo "`date +%X` répertoire [${PATH_BACK_FILES}] existe" >> $LOGFILE
else 
	mkdir $PATH_BACK_FILES
	echo "`date +%X` répertoire [${PATH_BACK_FILES}] créé" >> $LOGFILE
fi

# Préparation du répertoire pour les backups de mysql
if [ -d ${PATH_BACK_MYSQL} ]; then 
	echo "`date +%X` répertoire [${PATH_BACK_MYSQL}] existe" >> $LOGFILE
else 
	mkdir $PATH_BACK_MYSQL
	echo "`date +%X` répertoire [${PATH_BACK_MYSQL}] créé" >> $LOGFILE
fi

#############################################
# Sauvegarde de diverses configurations     #
#############################################

# Suppression et création du répertoire pour la sauvegarde des configuration
rm -rf $PATH_BACK_CONF
mkdir $PATH_BACK_CONF
echo "`date +%X` répertoire [${PATH_BACK_CONF}] vidé" >> $LOGFILE

# Copie des configurations
cp -fR $PATH_APACHE		$PATH_BACK_CONF
cp -fR $PATH_MYSQL		$PATH_BACK_CONF
#cp -fR $PATH_PHP		$PATH_BACK_CONF
cp -fR $PATH_PROFTPD	$PATH_BACK_CONF
#cp -fR $PATH_PHPMY		$PATH_BACK_CONF

echo "`date +%X` les répertoires suivants ont été sauvegardés dans [${PATH_BACK_CONF}]: `ls -C ${PATH_BACK_CONF}`" >> $LOGFILE

#############################################
# Sauvegarde BD mysql                       #
#############################################

# Préparation des paramètres
FILEMYSQL=${DATE_JOUR}"-"${MYSQL_NAME}".sql"

# Dump mysql
echo "`date +%X` Début de la sauvegarde 1 --> [mysqldump --opt -u $MYSQL_USER -p####### -A > $PATH_BACK_MYSQL"/"$FILEMYSQL]" >> $LOGFILE
mysqldump --opt -u $MYSQL_USER -p$MYSQL_PASS -A > $PATH_BACK_MYSQL"/"$FILEMYSQL
RESULT=$?
if [ "$RESULT" != "0" ]; then
	echo "`date +%X` $MYSQL_NAME -->ERREUR Nr. $RESULT MYSQLDUMP, Dump NON effectué." >> $LOGFILE
	echo "************************************************************" >> $LOGFILE
	echo "`date +%X` Fin du script de sauvegarde après erreur         " >> $LOGFILE
	echo "************************************************************" >> $LOGFILE
	exit $RESULT
else
	echo "`date +%X` Dump MYSQL effectuée avec succès" >> $LOGFILE
	FILESIZE=`ls -l ${PATH_BACK_MYSQL}"/"${FILEMYSQL} | awk '{print $5}'`
	FILESIZE=$(($FILESIZE/1048576))
	echo "`date +%X` Taille du fichier [${FILEMYSQL}] est de $FILESIZE Mo" >> $LOGFILE
fi

#############################################
# Compression des fichiers avec TAR         #
#############################################

# Création du fichier d'exlusion
echo "${PATH_BACK_FILES}" > "${PATH_BACK_LOGS}/exclude.txt"
echo "`date +%X` Le fichier [exclude.txt] a été créé" >> $LOGFILE

# Préparation des paramètres de compression
FILENAME=${DATE_JOUR}"-"${NAME_FILES}".tar.bz2"
EXCLUDEFILE=${PATH_BACK_LOGS}"/exclude.txt"

# Compression
echo "`date +%X` Debut de la compression --> [tar cvfjX $PATH_BACK_FILES"/"$FILENAME $EXCLUDEFILE $PATH_SAVE]" >> $LOGFILE
tar cvfjX $PATH_BACK_FILES"/"$FILENAME $EXCLUDEFILE $PATH_SAVE
RESULT=$?

if [ "$RESULT" != "0" ]; then
	echo "`date +%X` [$0] -->ERREUR TAR, Backup NON effectué." >> $LOGFILE
	echo "************************************************************" >> $LOGFILE
	echo "`date +%X` Fin du script de sauvegarde après erreur         " >> $LOGFILE
	echo "************************************************************" >> $LOGFILE
	exit $RESULT
else
	echo "`date +%X` Compression TAR effectuée avec succès" >> $LOGFILE
	FILESIZE=`ls -l ${PATH_BACK_FILES}"/"${FILENAME} | awk '{print $5}'`
	FILESIZE=$(($FILESIZE/1048576))
	echo "`date +%X` Taille du fichier [${FILENAME}] est de $FILESIZE Mo" >> $LOGFILE
fi

#############################################
# Sauvegarde sur le FTP                     #
#############################################

echo "`date +%X` Debut du transfert FTP" >> $LOGFILE

DELETENAME=${DATE_MOINS3}"-"${NAME_FILES}".tar.bz2"

ftp -in <ERREUR FTP, Backup NON effectué." >> $LOGFILE
	echo "************************************************************" >> $LOGFILE
	echo "`date +%X` Fin du script de sauvegarde après erreur         " >> $LOGFILE
	echo "************************************************************" >> $LOGFILE
	exit $RESULT
else
	echo "`date +%X` Transfert FTP effectuée avec succès" >> $LOGFILE
fi

#############################################
# Bloquage des droits et purge              #
#############################################

echo "`date +%X` rm -f $PATH_BACK_FILES/$DELETENAME" >> $LOGFILE
rm -f $PATH_BACK_FILES/$DELETENAME

echo "`date +%X` chmod 750 $PATH_BACK" $LOGFILE
chmod 750 $PATH_BACK

echo "************************************************************" >> $LOGFILE
echo "`date +%X` Fin du script de sauvegarde                      " >> $LOGFILE
echo "************************************************************" >> $LOGFILE
echo "" >> $LOGFILE
echo "" >> $LOGFILE

exit 0
Un erreur s'était glissé dans la version précédente du script. Il ne supprimait pas les anciennes sauvegardes, avec cette version, ça fonctionne

Hammerhead
19/04/2009, 14h19
J'ai modifié légèrement le script pour l'adapter aux RPS et compresser les backup avec bzip2 au lieu de gz.

Code:
#!/bin/bash

#############################################
# Script de sauvegarde pour FTP             #
# SwissDadou, Fev. 2009                     #
# ------------------------------------------#
# Ce script sauvegadre tout les fichiers    #
# qui sont dans le répertoire $PATH_SAVE à  #
# l'exeption du répertoire $PATH_BACK_FILES.#
# Ce script sauvegarde aussi les bases de   #
# données MYSQL.                            #
#############################################

#############################################
# Definition des variables                  #
#############################################

# Nom du fichier de backup
NAME_FILES="nom-du-fichier-du-backup"

# Paramètres MYSQL
MYSQL_USER="user mysql"
MYSQL_PASS="pass mysql"
MYSQL_NAME="nom-du-fichier-du-backup-mysql"

# Dates
DATE_JOUR=`date +%y%m%d` # Date du jour
DATE_MOINS3=`date --date '7 days ago' +%y%m%d` # Date 7 jours avant, pour effacer les vieux backups

# Chemin des répertoires
PATH_SAVE="/home" # Répertoire qui sera sauvegardé
PATH_BACK="/home/backup" # Répertoire de base des sauvegardes
PATH_BACK_FILES=${PATH_BACK}"/backupfiles" # Répertoire du backup des fichiers
PATH_BACK_LOGS=${PATH_BACK}"/logsfiles" # Répertoire pour les logs des backups
PATH_BACK_CONF=${PATH_BACK}"/configfiles" # Répertoire de sauvegarde des configurations
PATH_BACK_MYSQL=${PATH_BACK}"/mysqlfiles" # Répertoire de sauvegarde des configurations

PATH_APACHE="/usr/local/apache/conf" # Répertoire de configuration d'apache
PATH_MYSQL="/etc/mysql" # Répertoire de configuration de MYSQL
#PATH_PHP="/etc/php5" # Répertoire de configuration de PHP
PATH_PROFTPD="/etc/proftpd" # Répertoire de configuration de proftpd
#PATH_PHPMY="/etc/phpmyadmin" # Répertoire de configuration de phpmyadmin

# Paramètre FTP
FTP_HOST="adresse ftp"
FTP_USER="user ftp"
FTP_PASS="pass ftp"

#############################################
# Configuration des répertoires             #
#############################################

# Préparation du répertoire racine pour les backups
if [ -d ${PATH_BACK} ]; then 
	echo "`date +%X` répertoire [${PATH_BACK}] existe"
else 
	mkdir $PATH_BACK
	echo "`date +%X` répertoire [${PATH_BACK}] créé"
fi

# Préparation du répertoire pour les logs
LOGNAME=${DATE_JOUR}"-backuplog.txt"
LOGFILE=${PATH_BACK_LOGS}"/"${LOGNAME}

if [ -d ${PATH_BACK_LOGS} ]; then 
	echo "`date +%X` répertoire [${PATH_BACK_LOGS}] existe" >> $LOGFILE
else 
	mkdir $PATH_BACK_LOGS
	echo "`date +%X` répertoire [${PATH_BACK_LOGS}] créé" >> $LOGFILE
fi

# Préparation du répertoire pour les backups des fichiers
if [ -d ${PATH_BACK_FILES} ]; then 
	echo "`date +%X` répertoire [${PATH_BACK_FILES}] existe" >> $LOGFILE
else 
	mkdir $PATH_BACK_FILES
	echo "`date +%X` répertoire [${PATH_BACK_FILES}] créé" >> $LOGFILE
fi

# Préparation du répertoire pour les backups de mysql
if [ -d ${PATH_BACK_MYSQL} ]; then 
	echo "`date +%X` répertoire [${PATH_BACK_MYSQL}] existe" >> $LOGFILE
else 
	mkdir $PATH_BACK_MYSQL
	echo "`date +%X` répertoire [${PATH_BACK_MYSQL}] créé" >> $LOGFILE
fi

#############################################
# Sauvegarde de diverses configurations     #
#############################################

# Suppression et création du répertoire pour la sauvegarde des configuration
rm -rf $PATH_BACK_CONF
mkdir $PATH_BACK_CONF
echo "`date +%X` répertoire [${PATH_BACK_CONF}] vidé" >> $LOGFILE

# Copie des configurations
cp -fR $PATH_APACHE		$PATH_BACK_CONF
cp -fR $PATH_MYSQL		$PATH_BACK_CONF
#cp -fR $PATH_PHP		$PATH_BACK_CONF
cp -fR $PATH_PROFTPD	$PATH_BACK_CONF
#cp -fR $PATH_PHPMY		$PATH_BACK_CONF

echo "`date +%X` les répertoires suivants ont été sauvegardés dans [${PATH_BACK_CONF}]: `ls -C ${PATH_BACK_CONF}`" >> $LOGFILE

#############################################
# Sauvegarde BD mysql                       #
#############################################

# Préparation des paramètres
FILEMYSQL=${DATE_JOUR}"-"${MYSQL_NAME}".sql"

# Dump mysql
echo "`date +%X` Début de la sauvegarde 1 --> [mysqldump --opt -u $MYSQL_USER -p####### -A > $PATH_BACK_MYSQL"/"$FILEMYSQL]" >> $LOGFILE
mysqldump --opt -u $MYSQL_USER -p$MYSQL_PASS -A > $PATH_BACK_MYSQL"/"$FILEMYSQL
RESULT=$?
if [ "$RESULT" != "0" ]; then
	echo "`date +%X` $MYSQL_NAME -->ERREUR Nr. $RESULT MYSQLDUMP, Dump NON effectué." >> $LOGFILE
	echo "************************************************************" >> $LOGFILE
	echo "`date +%X` Fin du script de sauvegarde après erreur         " >> $LOGFILE
	echo "************************************************************" >> $LOGFILE
	exit $RESULT
else
	echo "`date +%X` Dump MYSQL effectuée avec succès" >> $LOGFILE
	FILESIZE=`ls -l ${PATH_BACK_MYSQL}"/"${FILEMYSQL} | awk '{print $5}'`
	FILESIZE=$(($FILESIZE/1048576))
	echo "`date +%X` Taille du fichier [${FILEMYSQL}] est de $FILESIZE Mo" >> $LOGFILE
fi

#############################################
# Compression des fichiers avec TAR         #
#############################################

# Création du fichier d'exlusion
echo "${PATH_BACK_FILES}" > "${PATH_BACK_LOGS}/exclude.txt"
echo "`date +%X` Le fichier [exclude.txt] a été créé" >> $LOGFILE

# Préparation des paramètres de compression
FILENAME=${DATE_JOUR}"-"${NAME_FILES}".tar.bz2"
EXCLUDEFILE=${PATH_BACK_LOGS}"/exclude.txt"

# Compression
echo "`date +%X` Debut de la compression --> [tar cvfjX $PATH_BACK_FILES"/"$FILENAME $EXCLUDEFILE $PATH_SAVE]" >> $LOGFILE
tar cvfjX $PATH_BACK_FILES"/"$FILENAME $EXCLUDEFILE $PATH_SAVE
RESULT=$?

if [ "$RESULT" != "0" ]; then
	echo "`date +%X` [$0] -->ERREUR TAR, Backup NON effectué." >> $LOGFILE
	echo "************************************************************" >> $LOGFILE
	echo "`date +%X` Fin du script de sauvegarde après erreur         " >> $LOGFILE
	echo "************************************************************" >> $LOGFILE
	exit $RESULT
else
	echo "`date +%X` Compression TAR effectuée avec succès" >> $LOGFILE
	FILESIZE=`ls -l ${PATH_BACK_FILES}"/"${FILENAME} | awk '{print $5}'`
	FILESIZE=$(($FILESIZE/1048576))
	echo "`date +%X` Taille du fichier [${FILENAME}] est de $FILESIZE Mo" >> $LOGFILE
fi

#############################################
# Sauvegarde sur le FTP                     #
#############################################

echo "`date +%X` Debut du transfert FTP" >> $LOGFILE

DELETENAME=${DATE_MOINS3}"-"${NAME_FILES}".tar.gz"

ftp -in <ERREUR FTP, Backup NON effectué." >> $LOGFILE
	echo "************************************************************" >> $LOGFILE
	echo "`date +%X` Fin du script de sauvegarde après erreur         " >> $LOGFILE
	echo "************************************************************" >> $LOGFILE
	exit $RESULT
else
	echo "`date +%X` Transfert FTP effectuée avec succès" >> $LOGFILE
fi

#############################################
# Bloquage des droits et purge              #
#############################################

echo "`date +%X` rm -f $PATH_BACK_FILES/$DELETENAME" >> $LOGFILE
rm -f $PATH_BACK_FILES/$DELETENAME

echo "`date +%X` chmod 750 $PATH_BACK" $LOGFILE
chmod 750 $PATH_BACK

echo "************************************************************" >> $LOGFILE
echo "`date +%X` Fin du script de sauvegarde                      " >> $LOGFILE
echo "************************************************************" >> $LOGFILE
echo "" >> $LOGFILE
echo "" >> $LOGFILE

exit 0

cashoclic
18/04/2009, 00h34
J'ai testé ce script et çà ne marche pas
J'ai çà quand je lance le script :
01:32:37 répertoire [/home/backup] existe
tar: Removing leading `/' from member names
Et dans les logs j'ai çà :
01:32:37 répertoire [/home/backup/logsfiles] créé
01:32:37 répertoire [/home/backup/backupfiles] créé
01:32:37 répertoire [/home/backup/mysqlfiles] créé
01:32:37 répertoire [/home/backup/configfiles] vidé
01:32:37 les répertoires suivants ont été sauvegardés dans [/home/backup/configfiles]: conf mysql php5 phpMyAdmin proftpd
01:32:37 Début de la sauvegarde 1 --> [mysqldump --opt -u root -p####### -A > /home/backup/mysqlfiles/090418-backupmysql.sql]
01:32:40 Dump MYSQL effectuée avec succès
01:32:40 Taille du fichier [090418-backupmysql.sql] est de 50 Mo
01:32:40 Le fichier [exclude.txt] a été créé
01:32:40 Debut de la compression --> [tar cvfzX /home/backup/backupfiles/090418-sauvegardeserveur.tar.gz /home/backup/logsfiles/exclude.txt /home]
01:34:08 [backupftpovh.sh] -->ERREUR TAR, Backup NON effectué.
************************************************** **********
01:34:08 Fin du script de sauvegarde après erreur
************************************************** **********

yatoula
11/04/2009, 20h06
ok pour l'archive, mais je parle cote serveur et pas ftpbackup

Pour la base de donnée idm.. Je contrôle et op

Hammerhead
11/04/2009, 19h55
Pour le fichier compressé qui reste sur le serveur, c'est normal. Regarde bien le nom du fichier. Le fichier que le script veut supprimer date du 4 avril 2009. Or, on est le 11 avril. Quand tu auras plus de 7 jours de backup, il le supprimera.

Je te rassure, au départ, j'ai eu la même réaction jusqu'à ce que je compare les dates.

Pour les bases de données, elles sont présentes dans l'archive. Regarde du coté du répertoire /home/backup, tu devrais trouver ton bonheur .

yatoula
11/04/2009, 15h44
Je viens de mettre en place le script, tout est ok

Par contre dans le fichier log , il me dit ca :
17:09:32 répertoire [/backup/logsfiles] créé
17:09:32 répertoire [/backup/backupfiles] créé
17:09:32 répertoire [/backup/mysqlfiles] créé
17:09:32 répertoire [/backup/configfiles] vidé
17:09:32 les répertoires suivants ont été sauvegardés dans [/backup/configfiles]: conf mysql php5 phpMyAdmin proftpd
17:09:32 Début de la sauvegarde 1 --> [mysqldump --opt -u root -p####### -A > /backup/mysqlfiles/090411-backup-mysql.sql]
17:09:33 Dump MYSQL effectuée avec succès
17:09:33 Taille du fichier [090411-backup-mysql.sql] est de 2 Mo
17:09:33 Le fichier [exclude.txt] a été créé
17:09:33 Debut de la compression --> [tar cvfzX /backup/backupfiles/090411-backup-fichiers.tar.gz /backup/logsfiles/exclude.txt /home]
17:10:03 Compression TAR effectuée avec succès
17:10:03 Taille du fichier [090411-backup-fichiers.tar.gz] est de 286 Mo
17:10:03 Debut du transfert FTP
17:10:29 Transfert FTP effectuée avec succès
17:10:29 rm -f /backup/backupfiles/090404-backup-fichiers.tar.gz
************************************************** **********
17:10:29 Fin du script de sauvegarde
************************************************** **********
Avec
17:10:29 rm -f /backup/backupfiles/090404-backup-fichiers.tar.gz
Le fichiers est toujours présent sur le serveur dans le dossier ? Il devrait etre effacé avec rm ?

Autre chose aussi, en décompressant l'archive, ben il n'y pas la base sauvegardé et cote backupftp, j'ai bien cette archive mais pas une pour les abses. Je ne la retrouve que sans le dossier backup/mysqlfiles et au format non zippé..

yatoula
11/04/2009, 15h40
ok merci je vais regarder ca car j'ai deja un scrip plus simple de backup, qui fonctionne a merveille.
Seul béol, il ne vire pas les
sauvegardes trop vielles...

EDIT= PATH_PHPMY="/home/ovh/www/phpMyAdmin"

Hammerhead
11/04/2009, 15h12
Merci pour les infos, ça va m'aider pour le script.

Bon, pour commencer, le programme ftp n'est pas installé par défaut sur la R2. Pour l'installer, il faut que tu tapes la commande emerge ftp. Ca va compiler le programme, et sur un RPS1, c'est assez rapide (le programme est assez petit).

Concernant les variables MySQL, ce sont bien ceux que tu as reçus de la part d'OVH, et ce sont les même codes pour se connecter en root avec phpMyAdmin. Après, libre à toi de créer un utilisateur spécial pour backuper les tables dans MySQL. Par contre, faut que je regarde comment on fait.

Bon, maintenant, il va falloir faire une petite modification du script.

Repère la ligne commençant par PATH_PHPMY="/etc/phpmyadmin" et met la en commentaire en la faisant commencer par #. Ne t'inquiète pas, ça va pas faire planter le script, et ça va aussi sauvegarder la configuration de phpmyadmin, étant donné qu'il est dans le répertoire /home.

Ensuite, remplace les répertoires de configuration par ceux correspondant à la Gentoo OVH R2.
Une fois les modifications effectuées, le script devrait fonctionner sans problèmes. Sur mon RPS1, ça fonctionne et ça envoie bien sur un FTP.

D'ailleurs, tu peux commenter toute la partie FTP du script si tu ne veux pas (ou peux pas) envoyer les backup sur un FTP, mais sache que ça va provoquer une erreur à la fin sans gravité. Par contre, il va continuer à accumuler les backups au dela de 7 jours. Ceci dit, y'a moyen d'utiliser le FTP de ton serveur pour éviter ce désagrément. Bon, niveau efficacité, y'a surement mieux, mais c'est la seule que je vois comme ça à vue de nez.

yatoula
11/04/2009, 13h57
Rhha au debut, j'ai ce message avan le liste des dossier quand je lance le script a la main
14:58:51 répertoire [/home/backup] existe
cp: cannot stat `/home/ovh/www/phpmyadmin': No such file or directory
tar: Removing leading `/' from member names
et tout a la fin :
/usr/mes_scripts/backup.sh: line 168: ftp: command not found
14:59:53 chmod 750 /home/backup /home/backup/logsfiles/090411-backuplog.txt

yatoula
11/04/2009, 13h50
Viens d'avoir la réponse :

/usr/local/apache/conf
/usr/local/lib/php5
/home/ovh/www/phpmyadmin

Si ca peut t'aider

yatoula
11/04/2009, 13h30
De plus pour la configuration :
PATH_APACHE="/etc/apache2" # Répertoire de configuration d'apache
PATH_PHP="/etc/php5" # Répertoire de configuration de PHP
PATH_PHPMY="/etc/phpmyadmin" # Répertoire de configuration de phpmyadmin

Ne sont pas aux endroit décrit , erfff. faut que je regarde

yatoula
11/04/2009, 13h15
Merci pour tes explications ...
Je vais de ce pas tenter de la faire fonctionner...

Heu pour ce qui est des paramètres mysql
# Paramètres MYSQL
MYSQL_USER="user mysql" en general root ?
MYSQL_PASS="pass mysql" le pass Mysql transmis par OVH
MYSQL_NAME="nom-du-fichier-du-backup-mysql" nom de ma sauvegarde mysql par exemple backupmysql
Ce sont bien les accès en root ? ceux transmis pour acceder a phpmyadmin ?

Hammerhead
11/04/2009, 13h04
Merci SwissDadou pour ce script, il est excellent pour backuper son serveur.

Sinon, j'ai juste une petite question le concernant. Est-il prévu pour une Gentoo OVH R2 ? Je parle de celle utilisée pour les RPS. Parce que le problème, c'est que je n'arrive pas à trouver les répertoires de configuration de php et de phpmyconfig. J'ai beau chercher sur le serveur avec locate, j'ai pas trouvé ces 2 répertoires. A moins que sur la R2, la configuration soit dans /home/ovh/phpmyadmin, car le fichier config.inc.php est dans ce répertoire.

Yatoula, pour installer le script, c'est tout bête si tu connais linux.

Connecte toi en root sur ton serveur via un client ssh (Sous Windows, il faut installer PuTTy).

Une fois connecté, va dans ton répertoire /root (par défaut, tu devrais y être).

Créé un répertoire scripts avec mkdir (mkdir scripts)

Copie le script dans le presse papier

Ouvre un éditeur de texte pour créer un fichier backup (par exemple, nano backup). Perso, j'utilise nano, il est très léger, et plus simple à utiliser que vi.
Recopie le script dans le fichier (avec PuTTy, fais un clic droit, ça va coller)
Modifie les variables pour les adapter à ton système (fais attention, pour les fichiers de configuration, ça peut varier d'une distrib à l'autre, d'où ma question un peu plus haut).

Sauvegarde le script (Control-O avec nano)

Et c'est tout, ton script est installé. Pour le lancer, saisi sh backup depuis ton répertoire script, et le tour est joué.

Après, si tu veux automatiser la tâche (ce que je te conseille), il va falloir l'inclure dans cron. Si j'ai bonne mémoire, il y a un module cron dans Webmin. Sinon, il va falloir modifier le fichier /etc/crontab à la main et relancer le démon cron (ce qui risque d'amener la fin du monde par la même occasion ).
Par contre, pour la syntaxe du fichier crontab, je l'ai plus en tête. Il va falloir que tu jette un coup d'oeil dans les pages de man (un petit man crontab devrait t'aider).

PS: Je vais aussi voir pour adapter le script pour les RPS, en remplacant tar par bzip2 (pour compresser un peu plus), et voir si il y a moyen de rajouter l'heure dans le nom du fichier. J'ai l'intention de faire des backup toutes les 12 heures (voire 6, je me tate).
PS2: Ah, j'oubliais, faudrait aussi adapter le script pour ceux qui ne peuvent pas avoir un autre serveur FTP. J'ai pas vu d'option pour avoir un compte FTP de sauvegarde chez OVH pour les RPS.
PS3: En tout, encore un grand merci pour ton superbe script SwissDadou. Simple, très bien doccumenté et efficace.

yatoula
08/04/2009, 21h21
Je supporse qu'il faut modifier :
# Nom du fichier de backup
NAME_FILES="nom-du-fichier-du-backup" c'est le nom que je donne a ma sauvegarde

# Paramètres MYSQL
MYSQL_USER="user mysql" en general root ?
MYSQL_PASS="pass mysql" le pass Mysql transmis par OVH
MYSQL_NAME="nom-du-fichier-du-backup-mysql" nom de ma sauvegarde mysql
et aussi
# Paramètre FTP
FTP_HOST="adresse ftp"
FTP_USER="user ftp"
FTP_PASS="pass ftp" ce sont les données du serveur backup je suppose

Je pense que c'est tout maintenant il faut uploader le fichier dans CGI-BIN ?
Il y a un emode de transfert en particulier ou pas et aussi un CHMOD ?

Enfin pour lancer la commande en tache cron comment fait on ?
Je suis sous Gentoo Webmin

Merci beaucoup a qui prendra le temps de m'aider...

yatoula
08/04/2009, 21h12
Bonjour, merci pour votre script, mais comment on installe et quels sont le paramètres à modifier ?
Merci

SwissDadou
18/02/2009, 16h42
Bonjour,

Je me suis amusé à faire un script bash pour sauvegarder mon serveur Linux. Pour réalisé ce script, je me basé sur des scripts déjà existant sur ce forum.
Mais je tenais à le partager.

Fonctionnement

Il créé les répertoires suivant:
/home/backup
/home/backup/backupfiles
/home/backup/logsfiles
/home/backup/configfiles
/home/backup/mysqlfiles

Il copie les paramètres suivants (à éditer à vonlonté) depuis le répertoire /etc:
/apache2
/mysql
/php5
/proftpd
/phpmyadmin
dans le répertoire /home/backup/configfiles

Il sauvegarde toute la base de donnée mysql avec la commande
Code:
mysqldump --opt -u USER -pPASS -A > /home/backup/mysqlfiles/date-nom.sql
Il compresse tout le répertoire /home à l'exeption du répertoire /home/backup/backupfiles (eviter double-sauvegarde) avec la commande suivante:
Code:
tar cvfzX /home/backup/backupfile/date-nom.tar.gz exclude.txt /home
Il sauvegarde le dernier fichier sur le ftp backup d'OVH. Il recherche le fichier plus vieux que 7 jours et l'efface sur le ftp . (donc toujours 7 jours de sauvegarde)

Il met des droits et purge
Les droit: chmod 750 /home/backup
Efface les fichiers plus vieux que 7 jours sur le répertoire /home/backup/backupfiles

Divers
A chaques étapes, il écrit un fichier log de la forme [date-backuplogs.txt] dans le répertoire /home/backup/logsfiles.
A chaque étape il contrôle si la commande c'est bien passée et l'écrit dans le log. Sinon il stope le script (avec inscription)
Si les répertoire cités en point 1 existe, il ne les recréé pas. A l'exeption du répertoire /home/backup/configfiles qui est vidé à chaque execution du script.

Code:
#!/bin/bash

#############################################
# Script de sauvegarde pour FTP             #
# SwissDadou, Fev. 2009                     #
# ------------------------------------------#
# Ce script sauvegadre tout les fichiers    #
# qui sont dans le répertoire $PATH_SAVE à  #
# l'exeption du répertoire $PATH_BACK_FILES.#
# Ce script sauvegarde aussi les bases de   #
# données MYSQL.                            #
#############################################

#############################################
# Definition des variables                  #
#############################################

# Nom du fichier de backup
NAME_FILES="nom-du-fichier-du-backup"

# Paramètres MYSQL
MYSQL_USER="user mysql"
MYSQL_PASS="pass mysql"
MYSQL_NAME="nom-du-fichier-du-backup-mysql"

# Dates
DATE_JOUR=`date +%y%m%d` # Date du jour
DATE_MOINS3=`date --date '7 days ago' +%y%m%d` # Date 7 jours avant, pour effacer les vieux backups

# Chemin des répertoires
PATH_SAVE="/home" # Répertoire qui sera sauvegardé
PATH_BACK="/home/backup" # Répertoire de base des sauvegardes
PATH_BACK_FILES=${PATH_BACK}"/backupfiles" # Répertoire du backup des fichiers
PATH_BACK_LOGS=${PATH_BACK}"/logsfiles" # Répertoire pour les logs des backups
PATH_BACK_CONF=${PATH_BACK}"/configfiles" # Répertoire de sauvegarde des configurations
PATH_BACK_MYSQL=${PATH_BACK}"/mysqlfiles" # Répertoire de sauvegarde des configurations

PATH_APACHE="/etc/apache2" # Répertoire de configuration d'apache
PATH_MYSQL="/etc/mysql" # Répertoire de configuration de MYSQL
PATH_PHP="/etc/php5" # Répertoire de configuration de PHP
PATH_PROFTPD="/etc/proftpd" # Répertoire de configuration de proftpd
PATH_PHPMY="/etc/phpmyadmin" # Répertoire de configuration de phpmyadmin

# Paramètre FTP
FTP_HOST="adresse ftp"
FTP_USER="user ftp"
FTP_PASS="pass ftp"

#############################################
# Configuration des répertoires             #
#############################################

# Préparation du répertoire racine pour les backups
if [ -d ${PATH_BACK} ]; then 
	echo "`date +%X` répertoire [${PATH_BACK}] existe"
else 
	mkdir $PATH_BACK
	echo "`date +%X` répertoire [${PATH_BACK}] créé"
fi

# Préparation du répertoire pour les logs
LOGNAME=${DATE_JOUR}"-backuplog.txt"
LOGFILE=${PATH_BACK_LOGS}"/"${LOGNAME}

if [ -d ${PATH_BACK_LOGS} ]; then 
	echo "`date +%X` répertoire [${PATH_BACK_LOGS}] existe" >> $LOGFILE
else 
	mkdir $PATH_BACK_LOGS
	echo "`date +%X` répertoire [${PATH_BACK_LOGS}] créé" >> $LOGFILE
fi

# Préparation du répertoire pour les backups des fichiers
if [ -d ${PATH_BACK_FILES} ]; then 
	echo "`date +%X` répertoire [${PATH_BACK_FILES}] existe" >> $LOGFILE
else 
	mkdir $PATH_BACK_FILES
	echo "`date +%X` répertoire [${PATH_BACK_FILES}] créé" >> $LOGFILE
fi

# Préparation du répertoire pour les backups de mysql
if [ -d ${PATH_BACK_MYSQL} ]; then 
	echo "`date +%X` répertoire [${PATH_BACK_MYSQL}] existe" >> $LOGFILE
else 
	mkdir $PATH_BACK_MYSQL
	echo "`date +%X` répertoire [${PATH_BACK_MYSQL}] créé" >> $LOGFILE
fi

#############################################
# Sauvegarde de diverses configurations     #
#############################################

# Suppression et création du répertoire pour la sauvegarde des configuration
rm -rf $PATH_BACK_CONF
mkdir $PATH_BACK_CONF
echo "`date +%X` répertoire [${PATH_BACK_CONF}] vidé" >> $LOGFILE

# Copie des configurations
cp -fR $PATH_APACHE		$PATH_BACK_CONF
cp -fR $PATH_MYSQL		$PATH_BACK_CONF
cp -fR $PATH_PHP		$PATH_BACK_CONF
cp -fR $PATH_PROFTPD	$PATH_BACK_CONF
cp -fR $PATH_PHPMY		$PATH_BACK_CONF

echo "`date +%X` les répertoires suivants ont été sauvegardés dans [${PATH_BACK_CONF}]: `ls -C ${PATH_BACK_CONF}`" >> $LOGFILE

#############################################
# Sauvegarde BD mysql                       #
#############################################

# Préparation des paramètres
FILEMYSQL=${DATE_JOUR}"-"${MYSQL_NAME}".sql"

# Dump mysql
echo "`date +%X` Début de la sauvegarde 1 --> [mysqldump --opt -u $MYSQL_USER -p####### -A > $PATH_BACK_MYSQL"/"$FILEMYSQL]" >> $LOGFILE
mysqldump --opt -u $MYSQL_USER -p$MYSQL_PASS -A > $PATH_BACK_MYSQL"/"$FILEMYSQL
RESULT=$?
if [ "$RESULT" != "0" ]; then
	echo "`date +%X` $MYSQL_NAME -->ERREUR Nr. $RESULT MYSQLDUMP, Dump NON effectué." >> $LOGFILE
	echo "************************************************************" >> $LOGFILE
	echo "`date +%X` Fin du script de sauvegarde après erreur         " >> $LOGFILE
	echo "************************************************************" >> $LOGFILE
	exit $RESULT
else
	echo "`date +%X` Dump MYSQL effectuée avec succès" >> $LOGFILE
	FILESIZE=`ls -l ${PATH_BACK_MYSQL}"/"${FILEMYSQL} | awk '{print $5}'`
	FILESIZE=$(($FILESIZE/1048576))
	echo "`date +%X` Taille du fichier [${FILEMYSQL}] est de $FILESIZE Mo" >> $LOGFILE
fi

#############################################
# Compression des fichiers avec TAR         #
#############################################

# Création du fichier d'exlusion
echo "${PATH_BACK_FILES}" > "${PATH_BACK_LOGS}/exclude.txt"
echo "`date +%X` Le fichier [exclude.txt] a été créé" >> $LOGFILE

# Préparation des paramètres de compression
FILENAME=${DATE_JOUR}"-"${NAME_FILES}".tar.gz"
EXCLUDEFILE=${PATH_BACK_LOGS}"/exclude.txt"

# Compression
echo "`date +%X` Debut de la compression --> [tar cvfzX $PATH_BACK_FILES"/"$FILENAME $EXCLUDEFILE $PATH_SAVE]" >> $LOGFILE
tar cvfzX $PATH_BACK_FILES"/"$FILENAME $EXCLUDEFILE $PATH_SAVE
RESULT=$?

if [ "$RESULT" != "0" ]; then
	echo "`date +%X` [$0] -->ERREUR TAR, Backup NON effectué." >> $LOGFILE
	echo "************************************************************" >> $LOGFILE
	echo "`date +%X` Fin du script de sauvegarde après erreur         " >> $LOGFILE
	echo "************************************************************" >> $LOGFILE
	exit $RESULT
else
	echo "`date +%X` Compression TAR effectuée avec succès" >> $LOGFILE
	FILESIZE=`ls -l ${PATH_BACK_FILES}"/"${FILENAME} | awk '{print $5}'`
	FILESIZE=$(($FILESIZE/1048576))
	echo "`date +%X` Taille du fichier [${FILENAME}] est de $FILESIZE Mo" >> $LOGFILE
fi

#############################################
# Sauvegarde sur le FTP                     #
#############################################

echo "`date +%X` Debut du transfert FTP" >> $LOGFILE

DELETENAME=${DATE_MOINS3}"-"${NAME_FILES}".tar.gz"

ftp -in <ERREUR FTP, Backup NON effectué." >> $LOGFILE
	echo "************************************************************" >> $LOGFILE
	echo "`date +%X` Fin du script de sauvegarde après erreur         " >> $LOGFILE
	echo "************************************************************" >> $LOGFILE
	exit $RESULT
else
	echo "`date +%X` Transfert FTP effectuée avec succès" >> $LOGFILE
fi

#############################################
# Bloquage des droits et purge              #
#############################################

echo "`date +%X` rm -f $PATH_BACK_FILES/$DELETENAME" >> $LOGFILE
rm -f $PATH_BACK_FILES/$DELETENAME

echo "`date +%X` chmod 750 $PATH_BACK" $LOGFILE
chmod 750 $PATH_BACK

echo "************************************************************" >> $LOGFILE
echo "`date +%X` Fin du script de sauvegarde                      " >> $LOGFILE
echo "************************************************************" >> $LOGFILE
echo "" >> $LOGFILE
echo "" >> $LOGFILE

exit 0