Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Outils
Outils Forum d'entraide sur les outils pour MySQL. Avant de poster -> Outils MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/06/2006, 13h01   #1
Membre éclairé
 
Avatar de nicoaix
 
Homme
Chef de projet MOA
Inscription : décembre 2004
Messages : 561
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chef de projet MOA
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 561
Points : 325
Points : 325
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):
Citation:
<?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.
nicoaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2006, 17h57   #2
Membre éclairé
 
Avatar de nicoaix
 
Homme
Chef de projet MOA
Inscription : décembre 2004
Messages : 561
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chef de projet MOA
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 561
Points : 325
Points : 325
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
Type de fichier : php Export_base.php (15,6 Ko, 6 affichages)
nicoaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h35.


 
 
 
 
Partenaires

Hébergement Web