Date de publication: le samedi 27 février 2010 à 18h42
Dernière modification: par Pascal BOYER le lundi 1 mars 2010 à 14h37
« Article précédent: eZ Publish : traduction de eZ Survey
» Article suivant: eZ Publish : eZ Multiupload - multitéléchargement d'objets
L'extension bpce_backupbdd
Cette petite extension permet d'automatiser la création d'une sauvegarde (dump) de la base de données MySQL utilisée par eZ Publish.
Il est très facile de créer un petit script qui, exécuté à intervalles réguliers par cron, effectuera une telle tâche.
L'avantage de cette extension réside dans le fait qu'elle propose l'affichage d'un nouvel onglet dans le menu de l'interface d'administration permettant l'accès à une interface de gestion à partir de laquel un simple clic déclenche la réalisation (via l'exécution d'un script php) de la sauvegarde de la base de données. Il est ensuite possible de télécharger les dumps réalisés pour en faire des copies locales.
Il devient dès-lors possible de demander à un client n'ayant aucune compétence informatique de réaliser régulièrement des sauvegardes de sa base de données puis de l'archiver localement. Hé oui ! il n'y a pas que les grosses structures, avec les moyens techniques et financiers que cela implique, qui ont le privilège d'avoir un site sous eZ Publish ;-)
- Une version (PHP5) améliorée de l'extension est disponible en bas de page.
- Une version (PHP4) améliorée de l'extension est disponible en bas de page.
Télécharger l'extension bpce_backupbdd
L'extension n'est accessible que par le biais de SVN.
Sous Linux, la commande pour récupérer l'extension est (voir cette page: http://projects.ez.no/bpce_backupbdd/subversion ) :
svn checkout http://svn.projects.ez.no/bpce_backupbdd
A bpce_backupbdd/bpce_backupbdd A bpce_backupbdd/bpce_backupbdd/cronjobs A bpce_backupbdd/bpce_backupbdd/cronjobs/backup_bdd.php A bpce_backupbdd/bpce_backupbdd/ezinfo.php A bpce_backupbdd/bpce_backupbdd/settings A bpce_backupbdd/bpce_backupbdd/settings/module.ini.append.php A bpce_backupbdd/bpce_backupbdd/settings/design.ini.append.php A bpce_backupbdd/bpce_backupbdd/settings/bpce_backupbdd.ini A bpce_backupbdd/bpce_backupbdd/settings/cronjob.ini.append.php A bpce_backupbdd/bpce_backupbdd/settings/menu.ini.append.php A bpce_backupbdd/bpce_backupbdd/settings/site.ini.append.php A bpce_backupbdd/bpce_backupbdd/GPL A bpce_backupbdd/bpce_backupbdd/doc A bpce_backupbdd/bpce_backupbdd/doc/create.sql A bpce_backupbdd/bpce_backupbdd/doc/doc.txt A bpce_backupbdd/bpce_backupbdd/modules A bpce_backupbdd/bpce_backupbdd/modules/backupbdd A bpce_backupbdd/bpce_backupbdd/modules/backupbdd/list.php A bpce_backupbdd/bpce_backupbdd/modules/backupbdd/delete.php A bpce_backupbdd/bpce_backupbdd/modules/backupbdd/createbackupbdd.php A bpce_backupbdd/bpce_backupbdd/modules/backupbdd/module.php A bpce_backupbdd/bpce_backupbdd/modules/backupbdd/download.php A bpce_backupbdd/bpce_backupbdd/design A bpce_backupbdd/bpce_backupbdd/design/admin A bpce_backupbdd/bpce_backupbdd/design/admin/stylesheets A bpce_backupbdd/bpce_backupbdd/design/admin/templates A bpce_backupbdd/bpce_backupbdd/design/admin/templates/backupbdd A bpce_backupbdd/bpce_backupbdd/design/admin/templates/backupbdd/delete.tpl A bpce_backupbdd/bpce_backupbdd/design/admin/templates/backupbdd/createbackupbdd.tpl A bpce_backupbdd/bpce_backupbdd/design/admin/templates/backupbdd/list.tpl A bpce_backupbdd/bpce_backupbdd/design/admin/templates/parts A bpce_backupbdd/bpce_backupbdd/design/admin/templates/parts/backupbdd A bpce_backupbdd/bpce_backupbdd/design/admin/templates/parts/backupbdd/menu.tpl A bpce_backupbdd/bpce_backupbdd/README Révision 1 extraite.
Puis il faut copier le sous-répertoire bpce_backupbdd dans le répertoire extension de l'installation eZ Publish:
cp -Rp bpce_backupbdd/bpce_backupbdd chemin/vers/repertoire/ezpublish/extension/
Penser à modifier les propriétaires (en fonction des directive User et Group du serveur Apache) des répertoires et fichiers de l'extension.
Activer l'extension bpce_backupbdd
A partir de l'interface d'administration:
Fig. 1: Activer l'extension bpce_backupbdd
Une fois l'extension activée, un nouvel onglet apparaît:
Fig. 2: Nouvel onglet et interface de gestion des fichiers de sauvegarde
Traduction des textes
- Dump List (menu gauche)
Peut être modifié dans le template extension/bpce_backupbdd/design/admin/templates/parts/backupbdd/ menu.tpl ligne 6.
- Create BD dump (menu gauche)
Peut être modifié dans le template extension/bpce_backupbdd/design/admin/templates/parts/backupbdd/ menu.tpl ligne 7.
- Le nom de l'onglet
Peut être modifié dans le fichier extension/bpce_backupbdd/settings/ menu.ini.append.php :
[Topmenu_backupbdd] NavigationPartIdentifier=ezbackupbddpart Name=backupbdd <======== CETTE LIGNE
Principe de fonctionnement de l'extension bpce_backupbdd
- Cliquer sur le lien Create BD dump
- Un fichier creation.txt (ne contenant que la chaîne test) est alors créé dans le répertoire var/votreSiteaccess/log/
- La présence de ce fichier est la condition sine qua non pour que le script extension/bpce_backupbdd/cronjobs/ backup_bdd.php réalise le dump de la base de données.
- L'exécution du script extension/bpce_backupbdd/cronjobs/ backup_bdd.php crée un fichier de sauvegarde dans le répertoire var/votreSiteaccess/log/
Modifications nécessaires
Si vous êtes sous Linux, l'extension du fichier de sauvegarde obtenu est .sql.gz et non simplement .sql
Dès lors, le lien Dump List (menu de gauche) n'affichera absolument rien.
Pour remédier à cela, il faut modifier la ligne suivante du fichier extension/bpce_backupbdd/modules/backupbdd/ list.php:
if ($extension != 'sql') continue;
à remplacer par:
if ($extension != 'gz') continue;
La deuxième modification concerne le script extension/bpce_backupbdd/cronjobs/ backup_bdd.php qui par défaut n'accepte pas les mots de passe d'accès à la base de données contenant des accents ou des espaces. Ce qui engendre un message d'erreur lors de l'exécution du script backup_bdd.php.
Il faut donc remplacer la ligne:
40 $command .= "-p$dbpass";
par:
40 $command .= "-p\"$dbpass\"";
Exécution du script backup_bdd.php
La commande manuelle à lancer est:
php runcronjobs.php -s suteaccessPublic backup_bdd
... Running extension/bpce_backupbdd/cronjobs/backup_bdd.php bdd var/test/log/test_2010-02-27-2100.sql already saved
La dernière ligne de la sortie de la commande indique que le fichier de sauvegarde existe déjà. Ceci est dû au fait que le code du script extension/bpce_backupbdd/cronjobs/ backup_bdd.php ne permet de réaliser qu'une sauvegarde par heure. C'est d'ailleurs ce qu'indique SEBBANE Alexandre, le responsable de cette extension, sur la page d'accueil du projet (« only ONE dump/hour max»).
Contourner la limite d'1 sauvegarde/heure
Dans le script extension/bpce_backupbdd/cronjobs/ backup_bdd.php, il faut effectuer les modification suivante:
22 $dbhost=$ini->variable( 'DatabaseSettings', 'Server' ); 23 $dbuser=$ini->variable( 'DatabaseSettings', 'User' ); 24 $dbpass=$ini->variable( 'DatabaseSettings', 'Password' ); 25 $dbname=$ini->variable( 'DatabaseSettings', 'Database' ); 26 /*$backupFile = $vardir."/log/".$dbname ."_". date("Y-m-d-H")."00". '.sql';*/ <== COMMENTER CETTE LIGNE 27 $backupFile = $vardir."/log/".$dbname ."_". date("Y-m-d-H-i"). '.sql'; <== AJOUTER CETTE LIGNE (ON AJOUTE LES MINUTES AU NOM DU DUMP) .. .. .. 50 $iscluster=$fileini->variable( 'ClusteringSettings', 'FileHandler' ); 51 if( ( $iscluster=="eZDBFileHandler" ) ){ <=== SI MODE CLUSTER 52 $dbhost=$fileini->variable( 'ClusteringSettings', 'DBHost' ); 53 $dbuser=$fileini->variable( 'ClusteringSettings', 'DBUser' ); 54 $dbpass=$fileini->variable( 'ClusteringSettings', 'DBPassword' ); 55 $dbname=$fileini->variable( 'ClusteringSettings', 'DBName' ); 56 /*$backupFile = $vardir."/sql/".$dbname ."_". date("Y-m-d-H")."00". '.sql';*/ <=== COMMENTER CETTE LIGNE 57 $backupFile = $vardir."/sql/".$dbname ."_". date("Y-m-d-H-i").'.sql'; <== AJOUTER CETTE LIGNE (ON AJOUTE LES MINUTES AU NOM DU DUMP)
Ensuite, dans le script extension/bpce_backupbdd/modules/backupbdd/ list.php faire les modifications suivantes:
17 if ($extension != 'gz') continue; 18 $i++; 19 $date_save=explode("-",substr($filename,-20)); <=== ICI ON PASSE DE 15 à 20 CARACTERES 20 /*$savebdd_timestamp=mktime($date_save[3]/100, 0, 0, $date_save[1], $date_save[2], $date_save[0]);*/ <=== COMMENTER CETTE LIGNE 21 $savebdd_timestamp=mktime($date_save[3], $date_save[4],0, $date_save[1], $date_save[2],$date_save[0]); <== AJOUTER CETTE LIGNE
Résultat final
Après modifications, il devient possible de réaliser une sauvegarde toutes les minutes par le biais d'une tâche cron.
Par ailleurs, voici à quoi ressemble l'affichage des résultats:
-
Avant modifications:
Les dates et heures affichées correspondent aux dates et heures auxquelles on clique sur le lien Liste des sauvegardes (lien Dump List figure 2).
Les nom des fichiers de sauvegarde sont du type: [nomDuSiteaccess ]_2010-02-24-1600.sql.gz où 1600 signifie 16h00
-
Après modifications:
Les dates et heures affichées correspondent à celles de la réalisation du fichier de sauvegarde (dump).
Les nom des fichiers de sauvegarde sont du type: [nomDuSiteaccess ]_2010-02-27-21-29.sql.gz
Version améliorée de l'extension
Je mets à votre disposition une archive prête à l'emploi de l'extension bpcs_backupbdd. Cette archive est réalisée à partir d'une version 4.2.0 de eZ Publish.
Cette archive contient toutes les modifications abordées dans cet article plus d'autres concernant l'agencement des informations et l'aspect cosmetique de l'interface graphique. La francisation, bien que complète, n'utilise pas de fichier de traduction. Les textes sont donc écrits en dur dans les différents fichiers et templates.
- Télécharger l'archive: bpce_backupbdd_php4.tar
- Télécharger l'archive: bpce_backupbdd_php5.tar
:
Lisez bien les quelques lignes d'explications du fichier README.
Commentaires














