Copier une table d'un serveur mysql a un autre en php

willpower
WRInaute discret
WRInaute discret
 
Messages: 208
Inscription: 15 Mar 2007

Copier une table d'un serveur mysql a un autre en php

Message le Sam Avr 03, 2010 15:52

Hello a tous,

J'essais de copier le contenu d'une table a une table identique sur un autre serveur.

Voici mon code:
Code: Tout sélectionner
<?
// BASE 2
$host2 = "nomdedomaine.ca"; // voir hébergeur
$user2 = "user2"; // vide ou "root" en local
$pass2 = "pass2"; // vide en local
$bdd2 = "cybersp1_kvdsoft"; // nom de la bdd
// connexion
@mysql_connect($host2,$user2,$pass2)
   or die("Impossible de se connecter base 2");
@mysql_select_db("$bdd2")
   or die("Impossible de se connecter database2");

//Efface le contenu actuel
mysql_query("TRUNCATE TABLE updatedate2");


//BASE ORIGINAL
$host = "localhost"; // voir hébergeur
$user = "user"; // vide ou "root" en local
$pass = "pass"; // vide en local
$bdd = "kvd"; // nom de la BD
// connexion
@mysql_connect($host,$user,$pass)
   or die("Impossible de se connecter");
@mysql_select_db("$bdd")
   or die("Impossible de se connecter");


mysql_query("INSERT INTO cybersp1_kvdsoft.updatedate2
Select * kvd.updatedate");

echo"hello";

?>


Mais voila le contenu de la table updatedate2 se fait bien effacer, mais rien n'est copier.
Mes connection au base se font et mon "hello" s'affiche.

Avez vous une idee?

JulienV
WRInaute discret
WRInaute discret
 
Messages: 156
Inscription: 18 Mar 2010

Re: Copier une table d'un serveur mysql a un autre en php

Message le Sam Avr 03, 2010 16:39

Salut ;)

Le mieux est de faire un backup de tes tables dans un fichier .txt ou .sql (fopen, fputs, fclose) puis de l'exporter sur ta seconde base.

Sinon, il y a aussi la réplication MySQL qui est très performante (ta base esclave se connecte à la base maître pour reproduire tes données à l'identique).

willpower
WRInaute discret
WRInaute discret
 
Messages: 208
Inscription: 15 Mar 2007

Re: Copier une table d'un serveur mysql a un autre en php

Message le Sam Avr 03, 2010 16:57

On oubli l'option 1, car ca doit etre mis dans un script php qui sera lancer plusieurs fois par jour.

Pour ce qui est de l'option 2 j'ai seulement besoin de copier quelques tables et donc j'ai l'impression que ca va etre tres lourd pour rien non?
Merci

jcaron
WRInaute accro
WRInaute accro
 
Messages: 2685
Inscription: 13 Fév 2004

Re: Copier une table d'un serveur mysql a un autre en php

Message le Sam Avr 03, 2010 18:12

C'est normal que ça ne marche pas, tu fais une requête SQL sur un seul serveur, forcément, elle ne peut pas aller prendre des données dans une table sur un serveur X et la mettre sur un serveur Y.

Ce qu'il faut que tu fasses, c'est une première requête qui fait un select sur la première base, puis pour chaque ligne du résultat, faire un insert de la ligne en question dans la deuxième base.

Evidemment pour ça il faut que tu utilises des identificateurs de connexion de BDD explicites (un pour chaque connexion).

En gros:
Code: Tout sélectionner
$bdd1 = mysql_connect(paramètres bdd 1);
$bdd2 = mysql_connect(paramètres bdd 2);
mysql_query("TRUNCATE table",$bdd2);
$res = mysql_query("SELECT * FROM table",$bdd1);
while ($row = mysql_fetch_assoc($res))
{
    mysql_query("INSERT INTO table (col1,col2...) VALUES '".mysql_real_escape_string($row['col1'])."','".mysql_real_escape_string($row['col2'])."'...",$bdd2);
}


En espérant que ta table ne soit pas trop grosse, sinon il va au minimum falloir faire ça par petits bouts (avec des offset/limit), sans parler de l'impact sur les performances des deux bases. Et evidemment il faudrait que l'ensemble de l'opération se fasse dans une transaction, sinon le gars qui arrive "au mauvais moment" il va avoir droit à une table incomplète...

Une solution de réplication aura l'avantage de faire de l'incrémental, i.e. ne copier que ce qui change (et en plus les modifications seront répercutées beaucoup plus rapidement).

Jacques.

JulienV
WRInaute discret
WRInaute discret
 
Messages: 156
Inscription: 18 Mar 2010

Re: Copier une table d'un serveur mysql a un autre en php

Message le Lun Avr 05, 2010 3:31

Rien ne vaut la réplication MySQL pour faire cela, c'est extrêmement performant et ça prend à tout casser 5 minutes à mettre en place...

Même pour un débutant, comptons 1 heure pour être large :)

willpower
WRInaute discret
WRInaute discret
 
Messages: 208
Inscription: 15 Mar 2007

Re: Copier une table d'un serveur mysql a un autre en php

Message le Lun Avr 05, 2010 20:00

Hello,

Pour ce qui est de la replication, mon hebergeur est tellement securisé, que je trouve pas les fichiers a modifier et donc je crois que vu que mes tables ne sont pas trop grosse, que vais y aller avec un script php.

Je reprends donc le script de Jacques:
Code: Tout sélectionner
<?
// BASE 2
$host2 = "nomdedomaine.ca"; // voir hébergeur
$user2 = "user2"; // vide ou "root" en local
$pass2 = "pass2"; // vide en local
//$bdd2 = "cybersp1_kvdsoft"; // nom de la bdd

//BASE ORIGINAL
$host1 = "localhost"; // voir hébergeur
$user1 = "user"; // vide ou "root" en local
$pass1 = "pass"; // vide en local
//$bdd = "kvd"; // nom de la BD


$bdd1 = mysql_connect($host1,$user1,$pass1);
$bdd2 = mysql_connect($host2,$user2,$pass2);
mysql_query("TRUNCATE table cybersp1_kvdsoft.updatedate2",$bdd2);
$res = mysql_query("SELECT * FROM kvd.updatedate",$bdd1);
while ($row = mysql_fetch_assoc($res))
{
    mysql_query("INSERT INTO cybersp1_kvdsoft.updatedate2(customer, products, images) VALUES '".mysql_real_escape_string($row['customer'])."','".mysql_real_escape_string($row['products'])."','".mysql_real_escape_string($row['images'])."'",$bdd2);
}

echo"hello";

?>



Le truncate fonctionne, mais le insert toujours pas. C'est surement quelques chose de bete, mais je trouve pas. Auriez-vous une idee?

Merci

willpower
WRInaute discret
WRInaute discret
 
Messages: 208
Inscription: 15 Mar 2007

Re: Copier une table d'un serveur mysql a un autre en php

Message le Lun Avr 05, 2010 22:07

Youuuuuuuuuuuuuuppppi!
J'ai reussi!

Voici le code si ca peus aider...holalala j'en ai mis du temps pour ce ptit code.. :D Merci Jacques et Julien!

Code: Tout sélectionner
<?
// BASE 2
$host2 = "nomdedomaine.ca"; // voir hébergeur
$user2 = "user2"; // vide ou "root" en local
$pass2 = "pass2"; // vide en local
//$bdd2 = "cybersp1_kvdsoft"; // nom de la bdd

//BASE ORIGINAL
$host1 = "localhost"; // voir hébergeur
$user1 = "user"; // vide ou "root" en local
$pass1 = "pass"; // vide en local
//$bdd = "kvd"; // nom de la BD


$bdd1 = mysql_connect($host1,$user1,$pass1);
$bdd2 = mysql_connect($host2,$user2,$pass2);
mysql_query("TRUNCATE table cybersp1_kvdsoft.updatedate2",$bdd2);

$res = mysql_query("SELECT * FROM kvd.updatedate",$bdd1)or die("<pre><b>MySQL Error:<b/>". mysql_error() ."</pre>");
while ($row = mysql_fetch_array($res))
{
   mysql_query("INSERT INTO cybersp1_kvdsoft.updatedate2 (customer, products, images) VALUES ('".mysql_real_escape_string($row['customer'])."','".mysql_real_escape_string($row['products'])."','".mysql_real_escape_string($row['images'])."')",$bdd2)or die("<pre><b>MySQL Error:<b/>". mysql_error() ."</pre>");
}

echo"hello";

?>


varioflux
WRInaute discret
WRInaute discret
 
Messages: 103
Inscription: 6 Aoû 2004

Re: Copier une table d'un serveur mysql a un autre en php

Message le Mar Mai 03, 2011 13:03

Désolé de remonter ce post, mais merci, il m'a bien été utile !
:o)


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités