Jump to content
Invision Board France
Sign in to follow this  
ALL

Automatiser la sauvegarde de la base de données

Recommended Posts

ALL

Bonjour,

 

j'héberge mon forum en local sous Debian et je cherche désepérément un script permettant d'automatiser la sauvegarde de ma base de données (par exemple tous les jours à 00h00 et envoi de la BDD vers un espace distant par ftp).

 

Donc une chose que j'aimerais savoir : pour sauvegarder ma BDD et l'envoyer sur un espace distant par FTP puis-je faire une simple copie du contenu du dossier /var/lib/mysql (chaque dossier contenant les tables) ou dois-je obligatoirement créer un script qui va se connecter au serveur et envoyer des requêtes d'exportation?

 

Evidemment je préfèrerais obtenir des fichiers tarball plutôt que toute une arborescence de fichiers.

 

Je précise que dans un cas comme dans l'autre je n'ai aucune idée de la syntaxe à adopter. La seule chose dont je suis sûr est que je commanderai son éxécution via la crontab :'(

 

(désolé si la réponse existe déjà, je n'ai rien trouvé à ce propos)

 

Merci d'avance :)

Share this post


Link to post
Share on other sites
ALL

Bonjour,

 

après avoir galéré un bon moment à trouver la solution et à faire en sorte que tout le fourbi fonctionne, je vais expliquer comment automatiser la procédure de sauvegarde de vos bases de données avec envoi par ftp.

 

 

Avant-propos :

 

1- J'ai tout fais sous Debian mais je suppose que si vous installez Perl ça fonctionnera aussi sous Windows.

 

2- XtDump ne permettant pas l'exportation et n'ayant pas de compétences suffisantes en PHP, j'utilise le script Active SQL Backup, gratuit depuis peu.

Cependant, la license spécifiant que les modifications autres que personnelles ne sont pas autorisées (donc pas de modif du code en public, c'est du moins ce que j'ai compris) , nous allons être obligés d'utiliser plusieurs occurences du script (une par base).

 

3- Par défaut, je vais tout placer dans /var. C'est simple, ça fonctionne et ça évite de tout éparpiller. Mais vous pouvez tout mettre où vous voulez, il suffira d'adapter vos chemins.

 

4- Je vais partir du principe que nous avons trois bases à sauvegarder : un blog, un forum et un wiki.

 

5- Nous allons automatiser le système de manière à backuper tous les jours aux environs de 2h30 du matin et à envoyer le tout sur trois espaces ftp distincts (un par base)

 

Procédure :

 

1- L'installation :

 

1a - télécharger Active SQL Backup

 

1b - créer le dossier /var/backups_sql

 

1c - décompresser le fichier zmdb.tgz puis placer le dossier zmdb/ dans /var/backups_sql

 

1d - renommer le dossier zmdb avec le nom de la base à sauvegarder (pour plus de clarté) et créer autant de dossiers avec autant d'occurences du script que de bases.

Nous obtenons donc ceci :

/var/backups_sql/blog

/var/backups_sql/forums

/var/backups_sql/wiki

Pour le moment leurs contenus sont absolument identiques.

 

1e- chmoder le fichier zmdb.pl en 755.

 

2- La configuration :

 

2a - ouvrir le fichier user_settings.txt et remplir les champs suivants :

$database_name = "nom_de_la_base";
$database_login = "identifiant";
$database_password = "mot_de_passe";
[...]
# FTP settings.

#$send_data_by_ftp = 0; # disable FTP
$send_data_by_ftp = 1; # enable FTP

$remote_host = 'adresse_ftp_distante';
$remote_port = '21';
$remote_login = 'identifiant_ftp';
$remote_password = 'mot_de_passe_ftp';

Note :

-je pense qu'il vaut mieux créer un utilisateur sans privilège par base de données (et même dans le fichier config.php du blog/forums/wiki) car, en cas de problème ou de piratage, utiliser un compte root ou utilisateur administrant plusieurs bases peut conduire à une véritable catastrophe.

- j'utilise un espace ftp par base. De cette façon les backups renommés par la date de sauvegarde sont plus faciles à trier et, en cas de soucis sur un espace ftp on ne perd pas l'ensemble de ses bases.

 

3- L'automatisation :

 

3a - Créer un fichier appelé script_auto.sh puis le copier dans chacun des trois dossiers et le chmoder à 755.

 

3b - Le remplir comme suit en adaptant les chemins selon le dossier dans lequel se trouve le script à éditer (l'exemple donné est celui du script "forums") :

#!/bin/sh

PATH=/var/backups_sql
HOME=/var/backups_sql/forums
DAEMON=/var/backups_sql/forums/zmdb.pl

/var/backups_sql/forums/zmdb.pl -b

Lancer le script à partir d'un shell va permettre de faciliter la prise en charge d'arguments (le fameux "-b") par Cron avec qui je me suis battu longtemps.

 

3c - Ouvrir un terminal et lancer la commande # crontab -e

Appuyer sur i pour entrer en mode insertion et entrer les lignes suivantes :

# Backups SQL
25 2 * * * /var/backups_sql/blog/script_auto.sh
30 2 * * * /var/backups_sql/forums/script_auto.sh
35 2 * * * /var/backups_sql/wiki/ideosphere/script_auto.sh

Vous pouvez remplacer les données par * * * * * /var/backups_sql/.... pour effectuer un backup toutes les minutes afin de tester le bon déroulement des opérations. Attention toutefois, certains serveur publics risquent ne pas apprécier la hammering.

Appuyer sur echap pour sortir du mode d'insertion puis taper :x pour enregistrer et fermer.

Ne pas éditer le fichier /var/spool/cron/crontabs/root (si votre crontab est root par exemple) directement via WinSCP car la nouvelle crontab risque de ne pas être prise en compte (la nouvelle crontab n'est pas "réinstallée").

Je laisse 5 minutes entre chaque exécution mais ce n'est pas obligé.

 

3d - Magiiiie.

 

 

Note : par défaut un backup supplémentaire sera toujours effectué dans un dossier backup créé dans le même dossier que celui du script zmdb.pl

 

Je viens juste de finir l'opération, je n'ai pas encore de recule mais je sais que ce système peut être grandement amélioré. Tout avis est le bienvenu ;)

Share this post


Link to post
Share on other sites
theflagadacrew

Bonjour,

 

J'ai suivis pas à pas vos instructions mais là où je sèche c'est lorsque vous dites de lancer le script créé script_auto.sh à partir du Shell.

Je ne sais pas ce qu'est un "shell" mais après quelques recherches, j'ai cru comprendre qu'il fallait, pour exécuter ce script avoir un acces complet à la machne qui héberge le forum, or je suis chez un hébergeur qui ne me le permet pas. Est-ce un problème ? Si non, comment procéder?

 

Merci et chapeau pour le boulot réalisé.

Share this post


Link to post
Share on other sites
ALL

Bonjour,

 

désolé pour le retard, je ne suis pas venu depuis un moment :)

 

un shell est juste un script écrit en... shell, d'où l'extension *.sh et la ligne #!/bin/sh indiquant le chemin de l'interpréteur shell de la machine.

 

Ma remarque n'est qu'une explication du pourquoi je passe par l'intermédiaire d'un script shell pour lancer le script de backup et pourquoi ne pas lancer le script de backup directement depuis Cron.

 

Ce n'est qu'une remarque de ma part justifiant la présence de ce script mais tout fonctionne en l'état, il n'est normalement même pas besoin d'être root sur la machine :P

 

En tout cas je fais tout via PuTTY et WinSCP ayant la flemme de brancher un écran sur mon serveur :)

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.