1. ✅ Apprenez une METHODE qui marche pour votre SEO ! Formation à distance avec Olivier Duffez et Fabien Facériès + aide pour prise en charge du financement
    Rejeter la notice

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

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par willpower, 3 Avril 2010.

  1. willpower
    willpower WRInaute discret
    Inscrit:
    15 Mars 2007
    Messages:
    189
    J'aime reçus:
    0
    Hello a tous,

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

    Voici mon code:
    Code:
    <?
    // 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?
     
  2. JulienV
    JulienV WRInaute discret
    Inscrit:
    18 Mars 2010
    Messages:
    164
    J'aime reçus:
    0
    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).
     
  3. willpower
    willpower WRInaute discret
    Inscrit:
    15 Mars 2007
    Messages:
    189
    J'aime reçus:
    0
    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
     
  4. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 593
    J'aime reçus:
    0
    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:
    $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.
     
  5. JulienV
    JulienV WRInaute discret
    Inscrit:
    18 Mars 2010
    Messages:
    164
    J'aime reçus:
    0
    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 :)
     
  6. willpower
    willpower WRInaute discret
    Inscrit:
    15 Mars 2007
    Messages:
    189
    J'aime reçus:
    0
    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:
    <?
    // 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
     
  7. willpower
    willpower WRInaute discret
    Inscrit:
    15 Mars 2007
    Messages:
    189
    J'aime reçus:
    0
    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:
    <?
    // 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";
    
    ?>
     
  8. varioflux
    varioflux WRInaute discret
    Inscrit:
    6 Août 2004
    Messages:
    90
    J'aime reçus:
    0
    Désolé de remonter ce post, mais merci, il m'a bien été utile !
    :eek:)
     
Chargement...
Similar Threads - Copier table serveur Forum Date
Copier le site du .fr sur le .ch : bonne idée ? Référencement international (langues, pays) 11 Septembre 2020
Comment empêcher les gens de faire du copier coller ? Débuter en référencement 21 Janvier 2018
copier texte sans plagier Référencement Google 6 Mai 2017
Copier des articles dans 1 forum = duplicate content ? Débuter en référencement 21 Février 2017
Copier le SSL d'un mutualisé OVH sur un VPS Administration d'un site Web 10 Août 2016
Un site entièrement Copier/Coller d'articles du web : Plagiat Problèmes de référencement spécifiques à vos sites 31 Mai 2016
Copier coller Débuter en référencement 13 Février 2016
Peut-on copier les noms des rubriques des annuaires ? Débuter en référencement 22 Février 2015
Copier Début d'Article avec lien de redirection externe Débuter en référencement 12 Novembre 2014
Ces sites de petites annonces qui vous proposent de copier vos annonces Débuter en référencement 27 Septembre 2013