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 :

Copie de database vers une autre database


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 35
    Points : 21
    Points
    21
    Par défaut Copie de database vers une autre database
    Bonjour à tous et à toutes,

    le sujet a deja été abordé mais je n'ai pas trouvé ce que je cherchai dans les reponses.

    je souhaite en faite créér un bouton dans ma page php afin de faire une copie direct (sans faire de backup) d'une db vers une autre db (en gardant les tables de la db).

    C'est pas trés claire, donc je vais essaye de l'imager pour plus de clareté.

    J'ai 2 DB, la DB1 qui est celle qui va etre copier et la DB2 qui elle va recevoir les données de la DB1.

    dans la DB1 j'ai 3 tables A, B, et C; dans la DB2 j'ai les tables X, et Y

    la premier fois sera une copie standars (choses qui est déja faite donc qui m'interese pas). (résultat DB2 contient les tables A,B,C,X et Y)

    puis les fois d'aprés ce ne sera qu'une simple mise a jours (le must serai de pouvoir checker la DB2 afin de voir si elle contient déja les derniéres modifications des tables de la DB1). (résultat mises a jours des tables A, B, C dans la DB2)

    donc c'est là ou je sais pas comment m'y prendre j'ai essayé des trucs mais sans succes.

    pour checker et copier seulement ce que j'ai besoin, je séche completement.

    et la copie simple ne fonctionnent pas ou j'ai mal utilisé mysqldump.

    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
    <?php
    //identifiant de connection
    $serveur = "127.0.0.1";
    $login = "root";
    $pass ="";
    $table1 = "DB1";
    $table2 = "DB3";
    $table3 = "DB2";
     
    //connection a la database
    $db = mysql_connect ($serveur, $login, $pass);
     
    echo "Votre base est en cours de copie.......";
     
    mysqldump --host=$serveur --user=$root --password=$pass $table1 | mysql --host=$serveur --user=$root --password=$pass $table3;
     
     
    //fermeture de la database
    mysql_close($db);
     
     
    echo "C'est fini. Db copié";
     
    ?>
    En esperant qu'une âme charitable me donne un coup de pouce...

    P.S. le bouton et deja crée et fait appelle à une partie de la page que je viens de vous ecrire.

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Points : 98
    Points
    98
    Par défaut
    Bonjour,

    Quels sont tes messages d'erreur ?

    Il semblerait que tu écris une ligne de commande directement dans du PHP, je ne suis pas sûr que tu obtiennes ce que tu veux. La fonction exec() en PHP te permet d'exécuter des commandes système.

    Pour ton problème de BDD, tu as diverses options dans mysqldump, mais de mémoire aucune permettant de checker ligne à ligne si la donnée existe déjà (et puis ce serait une vraie usine à gaz).

    La solution qui se rapproche le plus de ce que tu veux, ce serait de supprimer les tables A, B et C de DB2 avant de les recréer. Tu as une option dans mysqldum (--add-drop-table) qui fera un "DROP TABLE " avant de faire un "CREATE TABLE ...". Ca ne supprimerait que les tables présentes dans DB1 et ne toucherait donc pas aux tables X et Y de DB2.
    Tu as une liste complète des options ici.


    Quel est ton objectif en faisant ça ? Avoir une sauvegarde ?

    Petit conseil de développeur : nomme tes variables comme il faut. $table1, $table2 et $table3 représentent en fait des noms de BDD, donc autant les nommer $db1, $db2 et $db3

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 35
    Points : 21
    Points
    21
    Par défaut
    Dabord, merci d'avoir repondu, et desolé de ne pas avoir pu répondre plus tôt.

    En faite, je n'ai qu'un seul message d'erreur:

    Parse error: parse error in C:\wamp\www\copydb.php on line 20
    Mon objectif et de commencer une nouvelle structure (site + database). Mais pour ça je dois recuperer les données de la database actuelle.

    pour le site j'ai juste nommé les databases db1 ect... car une s'appelle identifiant, l'autre pointage ect... (c'etait plus rapide)

    donc tu me conseil de supprimer les anciennes tables importé puis d'importé les nouvelles.
    je vais suivre cette piste et je pense poster le résultat dans le courant de l'aprem.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 35
    Points : 21
    Points
    21
    Par défaut
    Donc voila j'ai bien avancé pas d'erreur lors de la page mais il ne fait pas son boulot je sais toujours pas pourquoi... (testé sur mon petit serveur maison).
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    <?php
     
    //identifiant de connection
    $serveur = "127.0.0.1";
    $login = "Simple";
    $pass ="*****";
     
    //Autre commande
    $table1 = "jgs";
    $table2 = "jls";
    $table3 = "knight";
    $cmd1 = "mysqldump"; 
    $cmd2 = "mysql"; 
    $GZIP1 = "jgs.gz";
    $GZIP2 = "jls.gz";
     
    // Activer le rapport d'erreurs PHP 
    error_reporting(E_ALL); 
    //Partie sauvegarder en 2 partie
    //Sauvegarde de la DB1 
    echo " Sauvegarde de la base <b>$table1</b> dans le fichier <b>$GZIP1</b> <br>\n"; 
     
    $savedb1 = $cmd1." --host=$serveur --user=$login--password=$pass -C -Q -e  $table1| gzip -c > $GZIP1"; 
    $exec = system($savedb1); 
     
    //Sauvegarde de la DB2
    echo " Sauvegarde de la base <b>$table2</b> dans le fichier <b>$GZIP1</b> <br>  \n"; 
     
    $savedb2 = $cmd1." --host=$serveur --user=$login--password=$pass -C -Q -e  $table1| gzip -c > $GZIP2"; 
    $exec = system($savedb2); 
     
    if (file_exists($GZIP1)) { echo " fichiers non créer \n"; }
       	else { echo " Sauvegarde de la base <font color=red><b>$table1</b></font> et  <font color=red><b>$table2</b></font> effectué \n";
     
     
     
    //Copie des DB en 2 partie 
    //copie de la DB1 dans la DB3
     
    echo " Copy de la base <b>$table3</b> grace <b>$GZIP1</b> <br> \n"; 
     
     
    $load1 = "gzip -d < $GZIP1 | $cmd2 --host=$serveur--user=$login --password=$pass $table3"; 
    $exec = system($load1); 
     
    //copie de la DB2 dans la DB3
     
    echo " Copy de la base <b>$table3</b>grace<b>$GZIP2</b> <br> \n"; 
     
     
    $load2 = "gzip -d < $GZIP2 | $cmd2 --host=$serveur--user=$login --password=$pass $table3"; 
    $exec = system($load2); 
     
    echo " Copy de la base <b>$table3</b></font> depuis les fichiers <b>$GZIP1</b> et <b>$GZIP2</b> effectué <br>  \n"; 
     
    }
     
    ?>
    Si vous avez des idées pour ameliorer le code je suis prenneur.

    edit: je viens de voir la grosse betise que j'ai faite donc la deusieme partie et loin de se que j'ai besoin

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Points : 98
    Points
    98
    Par défaut
    A vue de nez, il manque des espaces avant des paramètres de commande :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    --host=$serveur--user=$login

    Doit être :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    --host=$serveur --user=$login

    Cette erreur est présente à plusieurs endroits.

Discussions similaires

  1. Copie bdd Access vers une autre bdd access
    Par lucie22 dans le forum Visual Studio
    Réponses: 5
    Dernier message: 19/10/2009, 15h04
  2. Migration d'une database vers une autre
    Par krovomi dans le forum Développement
    Réponses: 6
    Dernier message: 09/10/2009, 18h57
  3. MQSeries:Envoi de copie des message vers une autre file
    Par lionelEIGIP dans le forum z/OS
    Réponses: 2
    Dernier message: 29/01/2009, 11h50
  4. copie d'un record vers une autre table
    Par ph4prod dans le forum Bases de données
    Réponses: 2
    Dernier message: 27/10/2005, 14h04
  5. [VB.NET] Copie d'une table d'une DB vers une autre
    Par SergeF dans le forum Windows Forms
    Réponses: 9
    Dernier message: 20/11/2004, 09h54

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