IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Exporter une base de donnée MySQL


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 76
    Points : 54
    Points
    54
    Par défaut Exporter une base de donnée MySQL
    Bonjour à tous,

    Je cherche à exporter une base de donnée sans passer par le fameux PhpMyAdmin. Alors j'ai pompé le code ci-dessous sur le net.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    <?php
    function mysql_structure() {
      $host = 'localhost';
      $user = 'root';
      $pass = '';
      $base = 'bdd';
      
      mysql_connect($host, $user, $pass);
      mysql_select_db($base);
      $tables = mysql_list_tables($base);
      while ($donnees = mysql_fetch_array($tables))
        {
        $table = $donnees[0];
        $res = mysql_query("SHOW CREATE TABLE $table");
        if ($res)
          {
          $insertions = "";
          $tableau = mysql_fetch_array($res);
          $tableau[1] .= ";";
          $dumpsql[] = str_replace("\n", "", $tableau[1]);
          $req_table = mysql_query("SELECT * FROM $table");
          $nbr_champs = mysql_num_fields($req_table);
          while ($ligne = mysql_fetch_array($req_table))
            {
            $insertions .= "INSERT INTO $table VALUES(";
            for ($i=0; $i<=$nbr_champs-1; $i++)
              {
              $insertions .= "'" . mysql_real_escape_string($ligne[$i]) . "', ";
              }
            $insertions = substr($insertions, 0, -2);
            $insertions .= ");\n";
            }
          if ($insertions != "")
            {
            $dumpsql[] = $insertions;
            }
          }
        }
      return implode("\r", $dumpsql);
      } 
    
    echo "Taille du fichier : " . file_put_contents("sqldump-".$base."-".date("Ymd-His").".sql", mysql_structure());
    ?>

    Ensuite j'ai modifié la ligne en rouge par la ligne en verte (car mysql_list_tables n'est plus supportée) ci-dessous, ce qui me donne le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    <?php
    function mysql_structure() 
    {
      $host = 'localhost';
      $user = 'root';
      $pass = '';
      $base = 'bdd';
      
      mysql_connect($host, $user, $pass);
      mysql_select_db($base);
      $tables = mysql_query( 'SHOW TABLES' );
      while ($donnees = mysql_fetch_array($tables))
        {
        $table = $donnees[0];
        $res = mysql_query("SHOW CREATE TABLE $table");
        if ($res)
          {
          $insertions = "";
          $tableau = mysql_fetch_array($res);
          $tableau[1] .= ";";
          $dumpsql[] = str_replace("\n", "", $tableau[1]);
          $req_table = mysql_query("SELECT * FROM $table");
          $nbr_champs = mysql_num_fields($req_table);
          while ($ligne = mysql_fetch_array($req_table))
            {
            $insertions .= "INSERT INTO $table VALUES(";
            for ($i=0; $i<=$nbr_champs-1; $i++)
              {
              $insertions .= "'" . mysql_real_escape_string($ligne[$i]) . "', ";
              }
            $insertions = substr($insertions, 0, -2);
            $insertions .= ");\n";
            }
          if ($insertions != "")
            {
            $dumpsql[] = $insertions;
            }
          }
        }
      return implode("\r", $dumpsql);
      }
      
        $base = 'bdd';
    
    echo "Taille du fichier : " . file_put_contents("sqldump-".$base."-".date("Ymd-His").".sql", mysql_structure());
    ?>

    Et ça, ça m'affiche "taille du fichier : blablabla"

    Mais ça n'exporte pas la base de donnée "bdd", donc je me demande bien ce qui ne tourne pas rond.

    J'ai trouvé ce code sur un autre site.

    Pourriez-vous m'aider ?

    cdt
    Globolite

  2. #2
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    décidément

    je pense que ce post aurait plus sa place dans le forum php

    ce code dumpe les tables (structure et contenu) d'une certaine base de données dans un fichier.

    cela dit, qu'est-ce que tu veux dire par exporter ? simplement dumper les données dans un fichier(donc ce script fonctionne à un point près, il ne crée pas la base de données) ou copier la base sur un autre serveur/base de données ?

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Pourquoi se compliquer autant la vie avec un script PHP alors qu'une simple commande fait semble t-il la même chose ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysqldump -u nom_user_mysql -pmot_de_passe nom_bdd > chemin/vers/fichier_a_creer.sql
    Et pour recharger la BDD dans un autre serveur, l'opération inverse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql -u nom_user_mysql -pmot_de_passe nom_bdd < chemin/vers/fichier_a_creer.sql
    Cette commande pouvant être mise dans un fichier texte à rendre exécutable sous Linux ou un .bat sous Winbug. ensuite, un programme en PHP ou autre peut très bien exécuter le fichier en question en lui envoyant en paramêtre ce qu'il faut.

    Pour plus de détail sur les commandes mysqldump et mysql, voir la doc.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 76
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par Gardyen Voir le message
    décidément

    je pense que ce post aurait plus sa place dans le forum php

    ce code dumpe les tables (structure et contenu) d'une certaine base de données dans un fichier.

    cela dit, qu'est-ce que tu veux dire par exporter ? simplement dumper les données dans un fichier(donc ce script fonctionne à un point près, il ne crée pas la base de données) ou copier la base sur un autre serveur/base de données ?

    En effet décidément... Je pensais avoir bien choisit, cette fois-ci !

    Via PhpMyAdmin, il est possible de cliquer sur exporter, ce qui génère un fichier SQL. Je veux obtenir ce même fichier via un code php.

    J'essaie de voir ce que je peux faire avec le code de CinePhil

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 76
    Points : 54
    Points
    54
    Par défaut
    Bonjour CinePhil,

    Le truc c'est que je ne veux pas passer par l'executeur. Mais utiliser un simple bouton sur mon navigateur et générer le fameux fichier sql...

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Est-ce que ton code PHP a le droit d'exécuter un fichier sur le serveur de données ?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 76
    Points : 54
    Points
    54
    Par défaut
    Oui

  8. #8
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    sans aller jusqu'à un script externe, PHP permet l'exécution de commandes (fonction exec ou system)

  9. #9
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Voilà ! Donc php exec() la commande que j'ai donnée plus haut.

  10. #10
    Nouveau Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Je me permet de continuer sur ce poste pour décrire mon problème. Effectivement j'ai exécuté la commande cité par CinePhil, pour exporter ma de donnée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysqldump -u nom_user_mysql -pmot_de_passe nom_bdd > chemin/vers/fichier_a_creer.sql
    Mais, ça me génère l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysqldump: Got error: 2013: Lost connection to MySQL server at 'reading initial communication packet', system error: 0 when trying to connect
    Merci d'avance pour votre aide.

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/05/2013, 19h08
  2. Réponses: 0
    Dernier message: 27/04/2010, 12h43
  3. Exporter une base de données MySQL vers un fichier
    Par Niak74 dans le forum Bibliothèques
    Réponses: 6
    Dernier message: 05/05/2008, 10h05
  4. [vb6]Exporter une base de donnée Mysql en fichier csv
    Par budylove dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 06/07/2007, 14h20
  5. Automatiser l'exportation des données d'une base de données MySQL?
    Par zakiaetanas dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 23/03/2007, 10h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo