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

Outils MySQL Discussion :

[SGBD] Copie d'une base mysql à une autre


Sujet :

Outils MySQL

  1. #1
    Membre averti Avatar de nicoaix
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 571
    Points : 362
    Points
    362
    Par défaut [SGBD] Copie d'une base mysql à une autre
    Bonjour,
    Voici le problème :
    Soit 2 serveurs:
    -Source
    -Destination
    Sur chaque serveur une base de données (contenant chacune une table de structures identiques), soit:
    -base_source (table_source)
    -base_destination (table_destination)

    L'objectif est de copier le contenu de base_source.table_source dans base_destination.table_destination
    Je sais que c'est réalisable "à la main" dans phpmyadmin, mais mon second objectif c'est d'implémenter cette méthode pour un grand nombre de tables et de bases.

    J'ai créée un script qui permet de faire cette opération sans problème mais sur le même serveur.
    Voici le code qui permet de faire la copie (ce code est un peu plus complet que ce que j'ai décrit plus haut dans la mesure où il créé aussi les bases et les tables de destination):
    <?php
    $link_src
    =mysql_connect($serveur_src,$loginbase_src,$mdpbase_src);
    $link_dest=mysql_connect($serveur_dest,$loginbase_dest,$mdpbase_dest);


    $new_base_name = "";
    if(
    $bdd_dest != ''){
    $new_base_name = $bdd_dest;
    }elseif(
    $base_dest != ''){
    $new_base_name = $base_dest;
    }
    if(
    $new_base_name != '' and $bdd_src != ''){
    //Vérification de l'unicité du nom de la base
    $sql_bases="SHOW DATABASES;";
    $query_bases=mysql_query($sql_bases,$link_src);
    $numrows_bases=mysql_num_rows($query_bases);
    $base_existe = '';
    for(
    $i=0;$i<$numrows_bases;$i++){
    if(
    $bdd_dest == mysql_result($query_bases,$i,'Database')){
    $base_existe .= 'true';
    }
    }
    if(
    $base_existe != 'true'){
    //Création de la nouvelle base de données
    $sql="CREATE DATABASE ".$new_base_name." ;";
    $query=mysql_query($sql,$link_dest) or die ("Impossible d'exécuter la requête : ".$sql);
    }
    $sql_liste_Tables="SHOW TABLES FROM ".$bdd_src.";";
    $query_liste_Tables=mysql_query($sql_liste_Tables,$link_src);
    $numrows_liste_Tables=mysql_num_rows($query_liste_Tables);

    $sql = "--Création des tables--";
    for(
    $i=0;$i<$numrows_liste_Tables;$i++){
    $table = mysql_result($query_liste_Tables,$i,'Tables_in_'.$bdd_src);
    //Sélection de la nouvelle base.
    mysql_select_db($new_base_name,$link_dest) or die("erreur BDD");

    //Copie de chaque table
    $sql_Tables="SHOW CREATE TABLE ".$bdd_src.".".$table.";";
    $query_Tables=mysql_query($sql_Tables,$link_src);
    $sql_creation = mysql_result($query_Tables,0,1);
    $query_creation=mysql_query($sql_creation,$link_dest);
    $sql .= "\n".$sql_creation;

    //Sauvegarde des données de chaque table
    $query_copy="INSERT INTO ".$new_base_name.".".$table." SELECT * FROM ".$bdd_src.".".$table." ;";
    $results_copy=mysql_query($query_copy,$link_dest);
    $sql .= "\n--Copie des données--";
    $sql .= "\n".$query_copy;

    }
    echo
    "<div align=\"center\">Copie terminée.<br><br>Code SQL:<br><textarea name=\"textarea\" cols=\"80\" rows=\"10\">$sql</textarea></div>";
    }else{
    if(
    $bdd_dest == '' and $base_dest ==''){
    echo
    "<p class='StyleRougeGras' align='center'>Aucune base de données de destination n'a été déterminée</p>";
    }elseif(
    $bdd_src == ''){
    echo
    "<p class='StyleRougeGras' align='center'>Aucune base de données source n'a été déterminée</p>";
    }
    }

    ?>
    Je vous épargne dans le code ci-dessus la gestions des variables de connexion aux bases (ça fonctionne bien).

    Mon problème ce situe à ce niveau:
    //Sauvegarde des données de chaque table
    $query_copy="INSERT INTO ".$new_base_name.".".$table." SELECT * FROM ".$bdd_src.".".$table." ;";
    $results_copy=mysql_query($query_copy,$link_dest);
    En fait ici on insère dans destination les valeurs d'un select fait dans source. Le problème c'est qu'on ne peut utiliser qu'un seul $link (une seule connexion).
    Comment faire donc pour effectuer cette copie?

    Merci.

  2. #2
    Membre averti Avatar de nicoaix
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 571
    Points : 362
    Points
    362
    Par défaut
    Bon j'ai résolu mon problème... en passant par un fichier texte.
    Pour ceux qui sont intéressés je mets mon script en piève jointe.
    nom = export_base.php (attention, si vous changez le nom veillez à conserver le même nombre de lettre, car le script en a besoin pour déterminer le chemin d'accès au fichier)
    Pour utiliser ce script :
    Il faut modifier en début de script les valeurs utilisées par défaut, ensuite il suffit de le copier sur un site et de le lancer...
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Transfert entre une base SQLserver et une base MySQL
    Par Emyleen dans le forum Bases de données
    Réponses: 15
    Dernier message: 12/12/2011, 17h29
  2. Transfert entre une base SQLserver et une base MySQL
    Par Emyleen dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/12/2011, 09h09
  3. Probleme conversion fichier provenant d'une base oracle vers une base mysql
    Par jonnyboy dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 18/06/2009, 09h40
  4. Réponses: 7
    Dernier message: 18/02/2008, 14h33
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24

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