Que pensez vous de ce script pour sauver les base de donnees
Résolu
flexi2202
Messages postés
3822
Date d'inscription
Statut
Membre
Dernière intervention
-
flexi2202 Messages postés 3822 Date d'inscription Statut Membre Dernière intervention -
flexi2202 Messages postés 3822 Date d'inscription Statut Membre Dernière intervention -
bonjour a tous
je viens de découvrir ce script qui fonctionne pour la sauvegarde des bases de données avec un cron
mais je me demande si il est valable
ou si quelqu un en aurait un un peu plus récent
je viens de découvrir ce script qui fonctionne pour la sauvegarde des bases de données avec un cron
mais je me demande si il est valable
ou si quelqu un en aurait un un peu plus récent
<?php /** * Sauvegarde MySQL * * @package BackupMySQL * @author Benoit Asselin <contact@ab-d.fr> * @version backup.php, 2013/01/13 * @link http://www.ab-d.fr/ * */ error_reporting(E_ALL); ini_set('display_errors', true); /** * Sauvegarde MySQL */ class BackupMySQL extends mysqli { /** * Dossier des fichiers de sauvegardes * @var string */ protected $dossier; /** * Nom du fichier * @var string */ protected $nom_fichier; /** * Ressource du fichier GZip * @var ressource */ protected $gz_fichier; /** * Constructeur * @param array $options */ public function __construct($options = array()) { $default = array( 'host' => ini_get('mysqli.default_host'), 'username' => ini_get('mysqli.default_user'), 'passwd' => ini_get('mysqli.default_pw'), 'dbname' => '', 'port' => ini_get('mysqli.default_port'), 'socket' => ini_get('mysqli.default_socket'), // autres options 'dossier' => './', 'nbr_fichiers' => 5, 'nom_fichier' => 'backup' ); $options = array_merge($default, $options); extract($options); // Connexion de la connexion DB @parent::__construct($host, $username, $passwd, $dbname, $port, $socket); if($this->connect_error) { $this->message('Erreur de connexion (' . $this->connect_errno . ') '. $this->connect_error); return; } // Controle du dossier $this->dossier = $dossier; if(!is_dir($this->dossier)) { $this->message('Erreur de dossier "' . htmlspecialchars($this->dossier) . '"'); return; } // Controle du fichier $this->nom_fichier = $nom_fichier . date('Ymd-His') . '.sql.gz'; $this->gz_fichier = @gzopen($this->dossier . $this->nom_fichier, 'w'); if(!$this->gz_fichier) { $this->message('Erreur de fichier "' . htmlspecialchars($this->nom_fichier) . '"'); return; } // Demarrage du traitement $this->sauvegarder(); $this->purger_fichiers($nbr_fichiers); } /** * Message d'information ( commenter le "echo" pour rendre le script invisible ) * @param string $message HTML */ protected function message($message = ' ') { echo '<p style="padding:0; margin:1px 10px; font-family:sans-serif;">'. $message .'</p>'; file_put_contents( __DIR__ . 'log_'.date("Y-m-d").'.log', date("Y-m-d H:i:s") . ' - ' . $message . PHP_EOL, FILE_APPEND); } /** * Protection des quot SQL * @param string $string * @return string */ protected function insert_clean($string) { // Ne pas changer l'ordre du tableau !!! $s1 = array( "\\" , "'" , "\r", "\n", ); $s2 = array( "\\\\" , "''" , '\r', '\n', ); return str_replace($s1, $s2, $string); } /** * Sauvegarder les tables */ protected function sauvegarder(){ $this->message('Sauvegarde...'); $sql = '--' ."\n"; $sql .= '-- '. $this->nom_fichier ."\n"; gzwrite($this->gz_fichier, $sql); // Liste les tables $result_tables = $this->query('SHOW TABLE STATUS'); if($result_tables && $result_tables->num_rows) { while($obj_table = $result_tables->fetch_object()) { $this->message('- ' . htmlspecialchars($obj_table->{'Name'})); // DROP ... $sql = "\n\n"; $sql .= 'DROP TABLE IF EXISTS `'. $obj_table->{'Name'} .'`' .";\n"; // CREATE ... $result_create = $this->query('SHOW CREATE TABLE `'. $obj_table->{'Name'} .'`'); if($result_create && $result_create->num_rows) { $obj_create = $result_create->fetch_object(); $sql .= $obj_create->{'Create Table'} .";\n"; $result_create->free_result(); } // INSERT ... $result_insert = $this->query('SELECT * FROM `'. $obj_table->{'Name'} .'`'); if($result_insert && $result_insert->num_rows) { $sql .= "\n"; while($obj_insert = $result_insert->fetch_object()) { $virgule = false; $sql .= 'INSERT INTO `'. $obj_table->{'Name'} .'` VALUES ('; foreach($obj_insert as $val) { $sql .= ($virgule ? ',' : ''); if(is_null($val)) { $sql .= 'NULL'; } else { $sql .= '\''. $this->insert_clean($val) . '\''; } $virgule = true; } // for $sql .= ')' .";\n"; } // while $result_insert->free_result(); } gzwrite($this->gz_fichier, $sql); } // while $result_tables->free_result(); } gzclose($this->gz_fichier); $this->message('<strong style="color:green;">' . htmlspecialchars($this->nom_fichier) . '</strong>'); $this->message('Sauvegarde terminée !'); } /** * Purger les anciens fichiers * @param int $nbr_fichiers_max Nombre maximum de sauvegardes */ protected function purger_fichiers($nbr_fichiers_max) { $this->message(); $this->message('Purge des anciens fichiers...'); $fichiers = array(); // On recupere le nom des fichiers gz if($dossier = dir($this->dossier)) { while(false !== ($fichier = $dossier->read())) { if($fichier != '.' && $fichier != '..') { if(is_dir($this->dossier . $fichier)) { // Ceci est un dossier ( et non un fichier ) continue; } else { // On ne prend que les fichiers se terminant par ".gz" if(preg_match('/\.gz$/i', $fichier)) { $fichiers[] = $fichier; } } } } // while $dossier->close(); } // On supprime les anciens fichiers $nbr_fichiers_total = count($fichiers); if($nbr_fichiers_total >= $nbr_fichiers_max) { // Inverser l'ordre des fichiers gz pour ne pas supprimer les derniers fichiers rsort($fichiers); // Suppression... for($i = $nbr_fichiers_max; $i < $nbr_fichiers_total; $i++) { $this->message('<strong style="color:red;">' . htmlspecialchars($fichiers[$i]) . '</strong>'); unlink($this->dossier . $fichiers[$i]); } } $this->message('Purge terminée !'); } } // Instance de la classe ( a copier autant que necessaire, mais attention au timeout ) // Rq: pour les parametres, reprendre une ou plusieurs cles de $default ( dans la methode __construct() ) new BackupMySQL(array( 'username' => 'idi', 'passwd' => 'Ss2+', 'dbname' => 'id1il' )); //new BackupMySQL(array( // 'username' => 'root', // 'passwd' => 'root', // 'dbname' => 'mabase', // 'dossier' => './dossier2/' // )); ?>
A voir également:
- Que pensez vous de ce script pour sauver les base de donnees
- Fuite données maif - Guide
- Base de registre - Guide
- Supprimer les données de navigation - Guide
- Script vidéo youtube - Guide
- Formules mathématiques de base - Télécharger - Études & Formations
3 réponses
Bonjour,
Tu as des pertes de mémoire ?
Tu ne viens pas de trouver ce script... tu l'as au moins depuis le 4 Mai. :-)
Mais oui, il est valable.
Tu as des pertes de mémoire ?
Tu ne viens pas de trouver ce script... tu l'as au moins depuis le 4 Mai. :-)
Mais oui, il est valable.
bonjour Jordane
merci pour la réponse
aie aie c est l âge tout cela
ou sont nos 20, 30, 40,50 ans ...
a tout hasard je viens de tomber sur un petit morceau de script mais il ne fonctionne pas
dommage c était petit
merci pour la réponse
aie aie c est l âge tout cela
ou sont nos 20, 30, 40,50 ans ...
a tout hasard je viens de tomber sur un petit morceau de script mais il ne fonctionne pas
dommage c était petit
<?php $date = date('Y-m-d-H\hi'); // Répertoire de destination des backups (chemin absolu !) define('DIR_DEST', './dumps_mysql_svg/'); // Paramètres de connexion à la base de données define('DB_HOST', 'localhost'); define('DB_USER', 'id1il'); define('DB_PWD', 'S+'); define('DB_NAME', 'idt'); // Lancement du backup system("mysqldump --host=".DB_HOST." --user=".DB_USER." --password=".DB_PWD." ".DB_NAME." > ".DIR_DEST.DB_NAME.".".$date.".sql"); ?>