Dump sql avec sélection automatique des tables

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 093 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_lanner
Messages postés
132
Date d'inscription
samedi 16 avril 2005
Statut
Membre
Dernière intervention
8 avril 2015
-
Bonjour

Ou se définie le mot de passe ?
cs_theptitprince
Messages postés
14
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
5 janvier 2012
-
Bonjour.
Je l'accorde, mes noms de variables ne sont pas forcément évident. Tout est défini au début du code avec ses variables:

$host = 'localhost';
$user = 'nomdutilisateur';
$login = 'motdepasse';
$dbname = 'information_schema';

Je pense tout de même qu'en regardant le code, il était possible d'identifier les variables...
cs_lanner
Messages postés
132
Date d'inscription
samedi 16 avril 2005
Statut
Membre
Dernière intervention
8 avril 2015
-
oui je l'accorde aussi :) je n'ai pas directement testé, cependant une information il se peu que le memory_limit soit trop bas est provoque une erreur et du coup ne fonctionera pas
sur le script on peu ajouter (si on a pas accès a la configuration)

ini_set("memory_limit",'16M');

Dans mon cas j'avais l'erreur : Allowed memory size of 8388608 bytes exhausted
cs_theptitprince
Messages postés
14
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
5 janvier 2012
-
En effet, en fonction de la taille de la base sauvegardée, il est possible que le memory_limit soit trop petit (limité à 8M il me semble, si ma mémoire est bonne). Après, à chacun de le modifier en conséquence!
vincseize
Messages postés
114
Date d'inscription
mardi 25 février 2003
Statut
Membre
Dernière intervention
28 mars 2010
-
Hi

parfait

cependant
je me suis permis néanmoins d'ajouter

en ligne 28

// init variables
$structure = '';
$tout_contenu = '';

pour eviter le message d'erreur non bloquant 'variables indéfinies'

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.