Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 01/05/2007, à 19:16

specialfox

[Resolu] Pb script Sauvegarde Base MySQL

Bonjour,

Voici un bout de script que j'ai récupéré sur internet et modifié afin que la commande mysqlhotcopy ne copie que les répertoires. En fait je voudrais tester avant de lancer la commande que c'est bien un répertoire et non un fichier afin d'éviter un message d'erreur dans mon script.

Voici mon script

#!/bin/sh

##### Sauvegarde Base MySQL - Modification le 01/04/2007 #####

# chemin complet vers le dossier qui contient les bases mysql à backuper
Bases=/var/lib/mysql
#REMARQUE: parfois /var/lib/mysql

# chemin complet vers mysqlhotcopy
Hotcopy=/usr/bin/mysqlhotcopy
#REMARQUE: parfois /usr/bin/mysqlhotcopy

# mot de passe du root de mysql
Rootpass=vrpbjr
#REMARQUE: si le user root n'a pas de mot de passe, supprimer le paramètre --password ci-dessous

# dossier qui contiendra le backup
Destination="/backup/base"
#REMARQUE: ce dossier doit exister !

# REMARQUE GENERALE:
# si il n'y a pas de message d'erreur, supprimer
# le parametre --dryrun ci-dessous pour
# que le backup se fasse réellement.
#########################################

ladate=$(date)

for i in $(ls ${Bases} | grep -v \\.);
do
if [ -d "$i" ]; then
    echo 'backuping '${i}'...'
    ${Hotcopy} --user=root --password=${Rootpass} --allowold --keepold ${i} ${Destination}
    echo 'done.'
fi
done

echo '*** Fin de la copie ***'
echo 'started at: '${ladate}
echo 'ended at:   '$(date)

Le problème se situe au niveau du test if, j'ai l'impression que cette commande n'arrive pas à déterminer si le fichier est bien un fichier ou un répertoire.

Si quelqu'un peut m'aider. A+

Dernière modification par specialfox (Le 02/05/2007, à 18:02)

Hors ligne

#2 Le 01/05/2007, à 23:08

stopher

Re : [Resolu] Pb script Sauvegarde Base MySQL

Pourquoi si compliqué ...

voici un script que j'utilise dans un cron :

#!/bin/sh

#sauvegarde de la base de donnée

echo "Sauvegarde de la base de données"
/usr/bin/mysqldump -u root -pXXXXX --all-databases > /home/cdsl/sauvegardes/backup_sql.sql

echo "Fin du backup"

Hors ligne

#3 Le 02/05/2007, à 18:02

specialfox

Re : [Resolu] Pb script Sauvegarde Base MySQL

Bonjour,

J'ai résolu mon problème, je mets le script entier, qui permet de ne sauvegarder que les répertoires des bases MySQL.
De plus je créé un fichier sauv_base.log formaté pour voir si la sauvegarde s'est bien passée la nuit.

A+

#!/bin/sh
##### Sauvegarde Base MySQL - Modification le 03/04/2007 #####

# Définitions de couleurs pour rendre plus lisible le script à l'ecran
NORMAL="\\033[0;39m"
ROUGE="\\033[1;31m"

# Nettoie l'écran avant de lancer le script
clear

# chemin complet vers le dossier qui contient les bases mysql à backuper
Bases=/var/lib/mysql
#REMARQUE: parfois /var/lib/mysql

# chemin complet vers mysqlhotcopy
Hotcopy=/usr/bin/mysqlhotcopy
#REMARQUE: parfois /usr/bin/mysqlhotcopy

# mot de passe du root de mysql
Rootpass=vrpbjr
#REMARQUE: si le user root n'a pas de mot de passe, supprimer le paramètre --password ci-dessous

# dossier qui contiendra le backup
Destination="/backup/base"
#REMARQUE: ce dossier doit exister !

# REMARQUE GENERALE:
# si il n'y a pas de message d'erreur, supprimer
# le parametre --dryrun ci-dessous pour
# que le backup se fasse réellement.
#########################################

ladate=$(date)

#Afin de rendre plus lisible le fichier de log, j'indique la date et l'heure de début de la sauvegarde
echo ${ladate} >>sauv_base.log

# Parcourt le répertoire et extrait juste les répertoires qui normalement correspondent aux bases MySQL
for i in $(ls -l ${Bases} | grep "^d" | awk '{print $8}');
do
if [ ! -d ${i} ]; then
    echo -e "$ROUGE" 'backuping '${i}'...'"$NORMAL"
    echo >>sauv_base.log
    ${Hotcopy} --user=root --password=${Rootpass} --allowold --keepold ${i} ${Destination} >>sauv_base.log
    echo 'done.'
fi 
done

#Afin de rendre plus lisible le fichier de log, j'indique la date et l'heure de fin de la sauvegarde
echo >>sauv_base.log
echo 'ended at:   '$(date) >>sauv_base.log
echo ------------------------------------------------------------------ >>sauv_base.log
echo >>sauv_base.log

echo '*** Fin de la copie ***'
echo 'started at: '${ladate}
echo 'ended at:   '$(date)

Hors ligne