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

Requêtes MySQL Discussion :

Fusion de BDD


Sujet :

Requêtes MySQL

  1. #21
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    J'avais penser a faire ça :
    je me connecte aux 3 BDD que je sélectionne ensuite (ça doit pas être possible de sélectionner tout ne un coup) :
    Ensuite je regarde si les colonnes présents dans les clés primaires sont identiques sinon j'insére :
    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
    connect(192.X.X.1,util,1233);
    connect(192.X.X.2,util,1233);
    connect(192.X.X.3,util,1233);
     
    use BD3;
    use BD2;
    use BD1;
     
    INSERT INTO BDD3.calibration;
    SELECT *;
    FROM BDD2.calibration;
    WHERE NOT EXISTS
    (
    	SELECT 1;
    	FROM BDD3.calibration;
    	WHERE BDD3.slot = BDD2.slot;
    		AND BDD3.channel = BDD2.channel;
    			AND BDD3.frequency = BDD2.frequency;
    				AND BDD3.date = BDD2.date;
    		-- etc.
    )
    Et pour la date ça me l'affiche en bleue (mots clés MySQL alors que c'est le nom de la variable chez moi)

  2. #22
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    'date' est un mauvais nom de colonne car c'est un mot réservé du langage SQL.

    Encore une erreur du concepteur de la BDD !
    Entoure ce nom de colonne avec des apostrophes inversées ` pour que MySQL interprète bien ça comme une colonne et non pas comme le mot clé.

    Tu avais écrit dans ton premier message :
    J'ai penser à décomposer la tâche de la manière suivante :
    - Réaliser un BACK UP avant toute opération (j'ai un script en BAT pour ça ...) ;
    J'ose espérer qu'il s'agit d'un mysqldump et non pas d'une simple copie du répertoire de la BDD ou, dans ce dernier cas, qu'il n'y a que des tables utilisant le moteur MyISAM dans la BDD !

    Mon idée est plutôt que tu importes les BDD 1 et 2 dans le nouveau serveur à partir du fichier de dump. Ensuite avec les 3 BDD sur le nouveau serveur, tu peux exécuter le script SQL pour n'importer dans BDD3 que les lignes nécessaires à partir de BDD1 et BDD2.

    Si c'est une opération à répéter régulièrement, inclus au script SQL le vidage de BDD1 et BDD2 sur le nouveau serveur.

    En tout cas, ton petit script est bourré d'erreurs !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    connect(192.X.X.1,util,1233);
    connect(192.X.X.2,util,1233);
    connect(192.X.X.3,util,1233);
    3 connexions successives : à mon avis seule la dernière sera active et utilisée par le script !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    use BD3;
    use BD2;
    use BD1;
    3 USE successifs : seule la dernière BDD sélectionnée sera active !

    Et comme ensuite la requête précise le nom de la BDD d'où provient chaque table utilisée, le USE est inutile.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    INSERT INTO BDD3.calibration;
    SELECT *;
    FROM BDD2.calibration;
    WHERE NOT EXISTS
    (
    	SELECT 1;
    	FROM BDD3.calibration;
    	WHERE BDD3.slot = BDD2.slot;
    		AND BDD3.channel = BDD2.channel;
    			AND BDD3.frequency = BDD2.frequency;
    				AND BDD3.date = BDD2.date;
    		-- etc.
    )
    Le point virgule termine la requête ! Comme tu en as mis un à chaque ligne...

  3. #23
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    Oui c'est bien un DUMP ... Je m'étais dis ca ca serait plus simple de me connecter directement aux 3 serveurs SQL et de n'importer que les lignes qui n'existent pas à l'image du post précédent, c'est possible et correct ?

  4. #24
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Non parce que la requête peut être multi-BDD mais pas multi-serveurs. Toutes les BDD utilisées par une requête doivent être sur le même serveur.

  5. #25
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    Donc je devrais importer les BDD 1 et 2 à chaque MAJ. Le nom de mes BACK UP est de la forme BDD1_Date.sql, il faudrait prendre en compte le fait que ce soit un nom dynamique dans le script ?

  6. #26
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql -u user_mysql -pson_mot_de_passe BDD1 < chemin/vers/BDD1_Date.sql
    Ceci va exécuter le script BDD1_Date.sql sur la BDD1 du serveur (en l'occurrence le nouveau serveur puisqu'il s'agit d'y importer le dump de BDD1 du serveur 1).

    Le script SQL qui va ensuite ajouter les nouvelles lignes dans la BDD3 ne change pas puisque le nom de la BDD1 importée reste le même.

  7. #27
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    Ah oui le nom de la BDD reste le même parcontre le nom du fichier back up est datée ?! Ou sinon ca serait bien de prendre le fichier le plus récent à chaque importation, une idée ? Parce que là j'envoie tous les back up dans un dossier . Ou bien sinon je rajouterai un script back up ou le nom sera BDD 1 et BDD 2 pour éviter ce problème

  8. #28
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    Parcontre l'idéal serait que l'on soit assuré que le back up est bien réalisé pour les deux BDD avant de les importés dans le 3ème serveur SQL, il est possible d'executer tout ca sur le même script (connexion BDD et backup, si tout OK je passe au 2ème back up si tout OK je passe au script SQL), mes back up sont en bat.

  9. #29
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Ne confonds pas script de backup (de dump en fait) qui va lancer tes dump et qui utilise la commande mysqldump qui s'exécute en ligne de commande, et le résultat de ces dump qui sont des fichiers SQL qui sont à fournir en paramètre à la commande mysql pour injecter les données sauvegardées dans les BDD 1 et 2 du nouveau serveur.

    Typiquement, tu peux avoir un programme qui :
    1) vérifie que les dumps n'ont pas encore été faits ;
    2) fait les dumps des BDD 1 et 2 sur leurs serveurs respectifs ;
    3) transfère les fichiers de dump sur le serveur 3 ;
    4) injecte les fichiers de dump dans MySQL du serveur 3 ;
    5) lance le script SQL d'ajout des lignes dans la BDD3, lequel prévoit à la fin le vidage de BDD1 et 2 du serveur 3 ;
    6) éventuellement, supprime les fichiers de dump du serveur 3, si vous ne souhaitez pas les conserver.

  10. #30
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    Merci beaucoup, ca commence à rentrer !
    1/ Exécution des back up des BDD1 et BDD2 vers un dossier du PC du serveur 3 (fichiers sql non datés pour simplifier la donne ...)
    2/ Si back up réalisé alors on importe les BDD1 et BDD2 dans le serveur MySQL 3;
    3/ Si back up exécuté alors on exécute la suite de commande SQL.
    Correct pour l'instant ?
    Je pense qu'il serait pas mal de tout taper dans un fichier php ? Vous pensez que c'est long ? (temps surtout ...)

  11. #31
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Relis bien ce que j'ai écrit :
    Citation Envoyé par CinéPhil
    Typiquement, tu peux avoir un programme qui :
    ...
    4) injecte les fichiers de dump dans MySQL du serveur 3 ;
    5) lance le script SQL d'ajout des lignes dans la BDD3, lequel prévoit à la fin le vidage de BDD1 et 2 du serveur 3 ;
    Le programme en question peut être un script batch si tu es sous Winbug ou Shell si tu es sous Linux ou en PHP si tu dois l'intégrer dans une interface Web ou dans n'importe quel autre langage qui te convient mais pas en SQL.
    Il y aura en plus un script SQL, constitué donc d'une suite de requêtes SQL, pour faire l'ajout de données de l'étape 5. Ce script est créé une fois pour toute et est lancé par le programme principal.

  12. #32
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    J'ai modifié après j'ai mis PHP ..., Ca doit pas être executé pour un serveur WEB mais ça me semble la manière la plus simple (quoique c'est déjà du boulot) parce que l'avantage c'est que je testerai l'execution des requêtes à chaque fois (2 commandes mysql dump ...) ?

  13. #33
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    C'est bon c'est faisable, je peux commencer ?

  14. #34
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    J'ai terminé le script batch (j'importe bien les BDD ...) maintenant je voudrai appeler le script sql, comment faire ? (le script SQL devra contenir les requêtes d'insertion dans la BDD finale ...)
    Merci;

  15. #35
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Eh bien dans ton fichier batch, tu ajoutes la commande donnée plus haut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql -u user_mysql -pson_mot_de_passe nom_bdd_a_modifier < chemin/vers/fichier.sql

  16. #36
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    Ok donc dans mon script je mets pas un 'USE BDD à modifier' parcontre j'aurai besoin de manipuler 2 BDD en même temps (pour envoyer les valeurs de BDD1 et BDD2 à 'BDD à modifier'), je ferai un USE BDD1 et BDD2 (pas en même temps bien sûr!) ?
    Merci;

  17. #37
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    J'ai une question.
    J'ai une dizaine de BDD identique, on voudraient les centraliser vers une seule BDD. La BDD à la même structure (comporte des clés ...).
    J'ai pensé à installer 10 BDD vierges (qui récupéreront les BACK UP des BDD), une autre BDD vierge qui permettra de centraliser les autre BDD.
    On voudraient une MAJ réguliére de la BDD commune.
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    INSERT INTO bdd3.table_n n
    SELECT *
    FROM bdd_x.table_n nx
    WHERE NOT EXISTS
    (
    	SELECT 1
    	FROM bdd3.table_n n3
    	WHERE n3.colA = nx.colA
    		AND n3.colB = nx.colB
    		-- etc.
    )
    En réutilisant ce bout de code, je pense que le script serait trés trés long (10 tables par BDD, 10 BDD...) et en plus je ne sais pas si j'aurai des problémes au niveau des clés.
    Je voudrai savoir s'il y a un moyen d'envoyer les données de chaque BDD vers la BDD commune plus facilement.
    Je ne sais pas si une réplication maitre/esclave conviendrait car nos applications doivent communiquer avec les BDD en local (au cas ou on a un incident réseau).
    Merci

  18. #38
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    Je reformule ma demande :
    J'ai trois BDD de même structure. Une BDD sera la BDD commune (data des deux autre BDD).
    A partir d'un script en PHP, je voudrai alimenter la BDD commune (voir le script précédent).
    Les tables contiennent des clés ... Je voulais savoir si on envois des data des BDD1 et BDD2 vers la BDD3, les clés ne sauront plus les mêmes (ex: BDD1 l'id d'une table va de 1 à 5 et BDD2 de 1 à 3 donc sur la BDD3 de 1 à 8 par exemple), les données seront t-ils toujours liés ? Ou bien on ne pourra plus exploiter ces données sur la BDD commune ?
    Merci;

  19. #39
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    Personne ?
    Le script doit :
    - Récupérer les back up des BDD 1 et BDD 2 (les derniers back up)
    - Importer les back up dans BDD_1 et BDD_2 (temporairement, pour ensuite exporter vers la BDD commune:BDD3)
    - Récupérer les lignes non identiques de la BDD_1 dans la BDD commune (IDEM pour BDD_2).
    J'ai pensé à un script en batch, aprés avoir récupérer et importer les back up dans les BDD_1 et BDD_2 j'execute un script sql de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "C:\Program Files\MySQL\mysql server 5.1\bin\mysql.exe" -u root  <"monRep\fichier.sql"
    Dans le fichier fichier.sql j'ai :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    use bdd_3;
     
    INSERT INTO bdd_3.calib
    SELECT *
    FROM bdd_2.calib
    WHERE NOT EXISTS
    (
    	SELECT 1
    	FROM bdd_3.calibration
    	WHERE bdd_3.calib_name = bdd2.calib_name
    		AND bdd_3.calib_tol = bdd_2.calib_tol
    			AND bdd_3.calib_time = bdd_2.calib_time
     
    );
    Merci de votre aide (la partie remplissage de la BDD3 à partir de BDD 1 et 2 fonctionne pas )

  20. #40
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    J'ai l'impression que c'est la même question qu'au début et la réponse a été traitée progressivement durant les deux pages de la discussion.
    Tu reviens dessus un mois et demi plus tard sans que ça ait apparemment évolué.
    Ne t'étonne pas de ne pas avoir de réponse !

Discussions similaires

  1. [WD-2007] syntaxe champ de fusion (champ bdd de type float)
    Par Botzouk dans le forum Word
    Réponses: 2
    Dernier message: 10/12/2010, 23h17
  2. Fusion/consolidation BDD
    Par Needz dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/08/2010, 10h49
  3. Fusion de deux lignes d'une Bdd
    Par breizhlama dans le forum Requêtes
    Réponses: 5
    Dernier message: 10/05/2010, 11h45
  4. [WD-2003] fusion publipostage bdd excel
    Par kikim66 dans le forum Word
    Réponses: 5
    Dernier message: 08/04/2009, 15h22
  5. Fusion BDD SQL Server
    Par nadja dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 04/07/2006, 16h03

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