Voici un code source fonctionnel pour sauvegarder l’intégralité de votre base de donnée Mysql.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216<?php################################################################################# L'auteur a autorisé la redistribution gratuite et l'inclusion de ce code dans# les programmes à condition que cette notice de copyright soit dûment incluse.# BackySQL (c) 2010 Brice Sanchez# 10/03/2010 Brice SANCHEZ - www.brice-sanchez.com## LE CODE COUVERT PAR CETTE LICENCE EST FOURNI « EN L'ÉTAT »,# SANS GARANTIE D'AUCUNE SORTE, EXPRESSE OU IMPLICITE, INCLUANT,# SANS S'Y LIMITER, LES GARANTIES D'ABSENCE DE DÉFAUT, DE QUALITÉ MARCHANDE,# D'ADÉQUATION À UN USAGE PARTICULIER OU DE NON-VIOLATION DE DROITS DE TIERCES# PARTIES. VOUS ASSUMEZ TOUS LES RISQUES LIÉS À LA QUALITÉ ET AUX PERFORMANCES# DU CODE COUVERT PAR CETTE LICENCE. SI UN DÉFAUT, QUEL QU'IL SOIT, EST DÉTECTÉ# DANS LE CODE COUVERT PAR CETTE LICENCE, VOUS (ET NON LE DÉVELOPPEUR INITIAL# OU UN CONTRIBUTEUR) ASSUMEZ LE COÛT DES SERVICES D'ASSISTANCE, DES RÉPARATIONS# OU DES CORRECTIONS NÉCESSAIRES. CETTE LIMITATION DE GARANTIE CONSTITUE UNE# PARTIE ESSENTIELLE DE CETTE LICENCE. LE CODE COUVERT PAR CETTE LICENCE NE PEUT# ÊTRE UTILISÉ QUE DANS LE CADRE DE CETTE LIMITATION DE GARANTIE.# Vous utilisez ce code à vos propres risques.################################################################################////////////////////////////////////////////////////////////////////////////////// @Description// Sauvegarde de base de donnée// @Version 0.6// @Licence GNU/GPL3// http://www.gnu.org/licenses/gpl-3.0.html// @Publication Vendredi 12 Mars 2010// @Revision Samedi 13 Mars 2010// @Catgorie Administration// @Compatibilite PHP 4 >= 4.0.1, PHP 5// @Auteur Brice Sanchez// http://www.brice-sanchez.com/// @Contributeur Flashx// @Contact// @Télechargement// http://www.siteduzero.com/forum-83-498153-p1-sauvegarde-automatique-de-la-base-de-donnee-mysql.html#r4753068// @Note// Utiliser un cron job toute les 24 h vers 3heure du matin//// @changement// Support la sauvegarde de DB differente// Windows compatibility// check config//// Remerciement// * à M@teo pour héberger gracieusement nos sources,// * à Brice pour l'élan communautaire qu'il a su ranimer,// * aux développeurs de siteduzero.com pour leurs conseils( notamment Sebi57)////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Configuration//////////////////////////////////////////////////////////////////////////////////TODO : céer un object de configuration( ajouter un nom a cette config, donner plus d'option)// inclure la configuration : pas de C/C// Nom de la base de donnée à enregistrer$nom_bdd = 'test' ;// Hôte de la base de donnée ciblé$hote = 'localhost' ;// Port de la base de donnée$port = '3306' ;// Nom d'utilisateur de la base de donnée à enregistrer$utilisateur = 'root' ;// Mot de passe de la base de donnée à enregistrer$mot2passe = '' ;// Exemple : latin1 ou utf8$encodage_caracteres_mysql = 'latin1' ;// Remplir le tableau si on veut sauvegarder uniquement certaines tables// Exemple : array('table1','table2','table5')$selection_tables_mysql = array();// Chemin absolu de l'emplacement du site$chemin_absolu_site = dirname( __FILE__) . DIRECTORY_SEPARATOR;// Emplacement sur le FTP du répertoire des sauvegardes$repertoire = 'sauvegarde_mysql';// Nom du fichier ( ex : nomdelabasededonnee_2010-03-01_01-01-01.sql)$ext_fichier = 'sql' ;// Nombre de sauvegardes à garder sur le FTP$nbre_sauvegardes_a_garder = 7 ;define( "CHECK", true);define( "FIRST_RUN", true);////////////////////////////////////////////////////////////////////////////////// Initialisation////////////////////////////////////////////////////////////////////////////////$repertoire_sauvegardes = $chemin_absolu_site . $repertoire.DIRECTORY_SEPARATOR;$nom_fichier = $nom_bdd.'_'.date('Y-m-d_H-i-s').'.'.$ext_fichier ;////////////////////////////////////////////////////////////////////////////////// Vérification de l'environnement////////////////////////////////////////////////////////////////////////////////if( true == CHECK){$sapi_type = php_sapi_name();// Context d'executionif (substr($sapi_type, 0, 3) != 'cli') {if( true == FIRST_RUN){?>Il semblerai que vous souhaitez utiliser ce fichier a travers le reseaux.Si tel est votre souhais, Pensez à :Autentifier l'attaquant;Identifier l'attaquant;Modifier périodiquement vos codes d'acces.<?php}exit( );}if( is_dir ($repertoire_sauvegardes) === FALSE ) {if(mkdir ($repertoire_sauvegardes, 0700) === FALSE ) {exit('Impossible de créer le répertoire de sauvegarde'.PHP_EOL);// TODO : Indiquer une solution}} else if( is_writable( $repertoire_sauvegardes)===FALSE) {exit('Impossible d\'écrire dans le répertoire de sauvegarde'.PHP_EOL);// TODO : Indiquer une solution}// tester la connexion Mysql;// Que ce passe t-il si MySQL n'est pas en TCP mais en socket file ?// Optimiser le mode de compatibilité mysql( interoger mysql)// Que ce pass t'il si on se plante dans le nom des table $selection_tables_mysql( interoger mysql)}////////////////////////////////////////////////////////////////////////////////// Sauvegarde de la base de donnée////////////////////////////////////////////////////////////////////////////////$commande = 'mysqldump';$commande .= ' --host='.$hote;$commande .= ' --port='.$port;$commande .= ' --user='.$utilisateur;$commande .= ' --password='.$mot2passe ;$commande .= ' --skip-opt';$commande .= ' --compress';$commande .= ' --add-locks';$commande .= ' --create-options';$commande .= ' --disable-keys';$commande .= ' --quote-names';$commande .= ' --quick';$commande .= ' --extended-insert';$commande .= ' --complete-insert';$commande .= ' --default-character-set='.$encodage_caracteres_mysql;$commande .= ' --compatible=mysql40';$commande .= ' --result-file='.$repertoire_sauvegardes.$nom_fichier ;$commande .= ' '.$nom_bdd ;if( !empty($selection_tables_mysql) ) {$commande .= ' '.implode(' ',$selection_tables_mysql) ;}// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!// WARNING// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!// a REVOIR, exec() serrai plus mieux ????????????????// Execution de la commande de sauvegardesystem($commande) ;// Compression au format GZIP du fichier sauvegardésystem('cd '.$repertoire_sauvegardes.'; gzip '.$nom_fichier) ;// $] gzip: test_2010-03-13_02-31-16.sql.gz already exists; do you wish to overwrite (y or n)?// et il me crée *.sql sans le gziper// donc verifier les erreur retourner par systeme// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!// WARNING// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//TODO choix de la destination de la sauvegarde sur FTP// Initialisation des variables$tableau_sauvegardes = array();// Ouverture du dossier, Attention au cache du filesysteme???if ($repertoire_ouvert = opendir($repertoire_sauvegardes)) {// Lecture des entréeswhile( ($fichier_en_cours = readdir($repertoire_ouvert)) !== false) {if(is_file($repertoire_sauvegardes.$fichier_en_cours)) {if( substr( $fichier_en_cours, 0, strlen( $nom_bdd))!=$nom_bdd ) {continue;//}// Mise en tableau des résultats$tableau_sauvegardes[] = $fichier_en_cours;}}// fermeture du dossierclosedir($repertoire_ouvert) ;}sort($tableau_sauvegardes, SORT_STRING);// Supprime les fichiers en trop$ln = sizeof( $tableau_sauvegardes)-( $nbre_sauvegardes_a_garder-1);for($i=0; $i<$ln; $i++) {unlink($repertoire_sauvegardes.$tableau_sauvegardes[$i]);}////////////////////////////////////////////////////////////////////////////////// Loger nos actions//////////////////////////////////////////////////////////////////////////////////TODO, envoyer un mail : c'est rassurant
Grand maître L
Laisser un commentaire