Dump sql avec sélection automatique des tables

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 221 fois - Téléchargée 15 fois

Contenu du snippet

Voici un petit code de DUMP (sauvegarde) SQL qui fait lui même l'inventaire des tables et vous génère un gz contenant la sauvegarde complète de la base SQL permettant de la réinstaller.

Source / Exemple :


<?php
/*****************************
*

  • Dump SQL
  • The P'tit Prince
  • 28/12/2010
  • Rev 1 du 28/12/2010
*
                                                          • /
// Infos $host = 'localhost'; $user = 'root'; $login = 'root'; $dbname = 'information_schema'; ini_set("memory_limit",'64M'); // Afin d'etre sur d'avoir assez d'espace pour les grosses tables $structure = ""; $tout_contenu =""'; $dstName = 'dumptest/dump'.time().'.sql.gz'; // Connexion @mysql_connect($host,$user,$login) or die("Connexion impossible"); @mysql_select_db($dbname) or die("Echec de selection de la base"); // Creation de la liste de table $req_table = "SHOW TABLES"; $result_table = mysql_query($req_table) or die ("Erreur de selection de table"); while($table = mysql_fetch_array($result_table)){ // Creation de la structure $req_structure = "SHOW CREATE TABLE $table[0]"; $result_structure = mysql_query($req_structure) or die ("Erreur creation structure"); $donnee_structure = mysql_fetch_array($result_structure); $structure .= $donnee_structure[1].";\n\n\n"; // Recuperation du nombre de valeur par table $req_champ = "SHOW COLUMNS FROM $table[0]"; $result_champ = mysql_query($req_champ) or die ("Erreur lors de la recuperation du nombre d'entrees"); $nbre_champ= mysql_num_rows($result_champ); // Recuperation des entrees de chaque table $req_tout = "SELECT * FROM $table[0]"; $result_tout = mysql_query($req_tout) or die ("Erreur lors de la recuperation des donnes"); while($donnees_tout = mysql_fetch_array($result_tout)){ $contenu = "INSERT INTO ".$table[0]." VALUES ("; $i = 0; while($i < $nbre_champ){ $contenu .= "'".addslashes($donnees_tout[$i])."',"; $i++; } $tout_contenu .= $contenu."); \n"; } $tout_contenu .= "\n"; } // Suppression de l'inutil $tout_contenu = str_replace(',);',');',$tout_contenu); // Mise en ordre des donnees $data = ""; $data .= $structure; $data .= "\n"; $data .= $tout_contenu; // Creation du .gz $zp = gzopen($dstName, "w9"); gzwrite($zp,$data); gzclose($zp); echo "sauvegarde finie"; ?>

Conclusion :


On peut directement utiliser le fichier généré dans SQL pour régénérer les tables et leur contenu.

A voir également

Ajouter un commentaire

Commentaires

cs_christobal
Messages postés
208
Date d'inscription
jeudi 3 octobre 2002
Statut
Membre
Dernière intervention
31 mars 2011

@theptitprince
:D je ne souhaite pas faire un simple dump de ma base (elle est archivé quotidiennement) mais uniquement sauvegarder les tables propre a un client "prefix" a un instant.
Le tout est dans une fonction qui archive la db puis les supprimes :)
cs_theptitprince
Messages postés
14
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
5 janvier 2012

Merci a tous pour vos commentaire et vos notes :)

@ Christobal :
Je ne vois pas vraiment l'utilité d'une close LIKE puisque le but est de sauvegarder l'intégralité d'un base SQL.
Cependant, je pense en effet qu'il est possible de mettre une close LIKE, mais pas avec un ' WHERE '.$table[0] puisque $table[0] est le nom de la table... Il faut mettre un nom de colonne, et encore...
Pour obtenir le nom de la colonne, tu peux passer par un explode(",",$donnee_structure[1])... Mais tu serais après obligé pendant toute la sauvegarde de faire un like d'un numéro de colonne fixe sans pouvoir changer de colonne, a condition que la dite colonne existe...
Quoiqu'il en soit, je n'en vois pas une grande utilité pour une sauvegarde.... Peux-tu me dire pourquoi tu as besoin d'un LIKE?

@ Autre:
Je ne sais pas si free permet de changer l'allocation maximale... C'est assez bridé Free de ce que je m'en souviens...
cs_christobal
Messages postés
208
Date d'inscription
jeudi 3 octobre 2002
Statut
Membre
Dernière intervention
31 mars 2011

Pfff, pô les yeux en face des trous ce soir.
bon le plus simple c'est de le mettre dans "$req_table" :

$req_table = 'SHOW TABLES LIKE \'' . $client . '%\' ' ;

@++ et encore merki pour la source ;)
cs_christobal
Messages postés
208
Date d'inscription
jeudi 3 octobre 2002
Statut
Membre
Dernière intervention
31 mars 2011

C'est parfait, exactement se que j'avais besoin.
Juste une chose dans "$req_tout" vous pensez qu'il est possible de mettre une close where et LIKE du style :
$req_tout = 'SELECT * FROM ' . $table[0] . ' WHERE ' . $table[0] . ' LIKE \'' . $prefix. '%\' ' ;

parce que je n'y arrive pô :)

merki
cs_RudiRatlos
Messages postés
6
Date d'inscription
vendredi 17 février 2006
Statut
Membre
Dernière intervention
10 décembre 2007

parfait :) 10/10

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.