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

Administration MySQL Discussion :

Importation base de données


Sujet :

Administration MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 315
    Points : 114
    Points
    114
    Par défaut Importation base de données
    WampServer
    Apache, PHP, MySQL on Windows

    Bonjour ,

    J'ai consulté les discussions concernant l'export/import des bases de données sur ce forum mais j'ai encore 1 question sans réponse:

    Comment faire une importation complète de toutes les bases sur un nouvel ordinateur

    MAIS EN CONSERVANT TOUTE LA STRUCUTURE DES UTILISATEURS ET DES PRIVILEGES ,

    Les deux machines sont équipées de la meme façon avec WAMPSERVER 2.0

    Il est difficilement concevable qu'il faille redéfinir manuellement tous les utilisateurs et tous les privilèges sur les bases lors d'une importation sur une nouvelle machine

    Je suis donc toujours preneur d'une solution à ce sujet ,si elle existe ....

    Merci d'avance de la réponse

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    Tu peux par exemple faire un mysqldump de la base mysql.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 315
    Points : 114
    Points
    114
    Par défaut
    Bonjour Antoun, prenons 2 cas:

    1) je fais via mysqldump all databases un export/import de toutes les bases Mysql de wampserver (y compris mysql et information_schema) figurant sur mon ordinateur A vers mon ordinateur B.

    Les USERS et PRIVILEGES définis sur la machine A seront -il fidèlement reproduits sur la machine B ?

    2) Autre cas :

    Machine A : je fais via mysqldump un export de 5 bases de données pour lesquelles j'ai définis des USERS et PRIVILEGES. Je fais donc également un export des bases mysql et information-schema

    Machine B :import des 5 bases via mysqldump
    import des 2 bases mysql et information-schema

    Les utilisateurs et privileges importés n'existaient pas sur la machine B avant l'import

    Que va t-il se passer ? Les anciens utilisateurs et privilèges définis sur la machine B vont-ils être conservés soigneusement ? les nouveaux vont-ils être ajoutés convenablement ?

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    ça ne sert à rien de dumper information_schema, elle ne contient que des vues système en lecture seule.

    Par contre, mysql contient de vraies tables dont tu peux modifier les données... Le scénario précis serait donc plutôt :

    • tu dumpes tes cinq bases standard de A, et tu les re-crées sur B
    • tu dumpes mysql de A avec l'option -t (données seulement, pas de CREATE TABLE)
    • tu ré-injectes les données du dump de mysql dans la mysql de B ; tout ce qui existe déjà est préservé
    • tu fais un FLUSH PRIVILEGES, pour que MySQL recharge les nouveaux droits en mémoire


    A tester avec toutes les précautions possibles...
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 315
    Points : 114
    Points
    114
    Par défaut
    Bonjour Antoun,
    D'abord merci pour la réponse qui au moins est claire et précise

    J'ai testé ton idée sur des bases sans importance. C'est OK MAIS attention, il y a un petit couac !

    Transposons l'affaire à la la base mysql.

    Il réinjecte bien les données en préservant les données existantes grace à l'option -t mais les deux bases mysql de chaque machine doivent être identiques car s'il rencontre une table différente sur la machine de destination, il arrête l'import ou il est arrivé
    Je vois donc 2 possibilites à cet histoire

    1) faire en sorte que la base mysql de destination possède au moins toutes les tables de la machine de départ. Si table manquante , créer seulement la structure (dumper la structure avec -d et réinjecter) et ensuite faire l'import de la base mysql avec l'option -t

    2) deuxième possibilité
    J'ai lu dans la FAQ ta définition de la base mysql

    Citation Envoyé par Antoun
    Un serveur MySQL comprend toujours deux bases de données système : information_schema, qui contient les vues système du catalogue (cf le tutoriel Le catalogue MySQL), et mysql, qui contient les comptes utilisateur et leurs privilèges. Les principales tables de cette base sont user (comptes, mot de passe et privilèges globaux), db (privilèges accordés pour une base de données entière), tables_priv (privilèges accordés table par table) et column_priv (privilèges accordés colonne par colonne). Il est possible d'administrer les utilisateurs en modifiant les données de la base mysql. Comme le contenu de cette base est intégralement chargé en mémoire au démarrage du serveur, il sera nécessaire de le recharger avec un FLUSH PRIVILEGES. A l'inverse, le FLUSH n'est pas nécessaire avec les ordres DCL (GRANT, REVOKE, etc.) qui impactent automatiquement la copie en mémoire vive de la base mysql.
    J'en déduis donc pour cette question de USERS et privilèges, il suffirait peut-être de dumper les tables user,db,tables_priv, column_priv avec l'option -t et réinjecter dans la base mysql de destination

    Voilà , dis-moi ce que tu en pense, MERCI

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    1) oui, c'est pour cela que j'ai bien mis en première étape l'import de tes bases normales sur B avant de s'occuper de mysql

    2) yep, avec éventuellement les tables host (qui n'est généralement pas utilisée, mais je ne sais pas ce qu'il en est chez toi), et procs_privqui contient les privilèges sur les routines (si tu en as). cf http://dev.mysql.com/doc/refman/5.1/...structure.html
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 315
    Points : 114
    Points
    114
    Par défaut
    Après avoir remis le métier sur l'ouvrage, j'ai remarqué que nous avions commis une erreur:
    si on fait un dump de la base mysql avec l'option -t de la machine A, il préserve les utilisateurs existants à l'import sur la machine B mais il ajoute non seulement les nouveaux utilisteurs et nouveaux privileges de la machine A mais aussi tout le reste c'est à dire tous les anciens utilisteurs de la machine A ainsi que les privilèges

    Au final , on se retrouve sur la machine B avec :
    - les utilisteurs et privilèges présents au départ sur cette machine
    - les nouveaux utilisteurs de la mchine B
    - les anciens utilisteurs de la machine B
    sans compter que si certains sont communs ...

    En conclusion : c'est pas facile de débrouiller tout cela, connaîtrez-tu un logiciel qui permet de faire tout cela de manière optimale ?

    Merci

  8. #8
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    euh... quelle différence fais-tu entre les "anciens" et les "nouveaux" utilisateurs de la machine A ?
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 315
    Points : 114
    Points
    114
    Par défaut
    Bonjour,

    En fait , de peur d être trop long, j'en deviens peu clair...

    Voici donc ce que je veux faire exactement: une machine A (une tour) sur laquelle je travaille habituellement et une machine B (un portable) sur laquelle je désire faire une sauvegarde de la machine A

    Situation de départ:
    ***************
    Machine A : utilisateurs 1, 2, 3 agissant sur des bases avec des privilèges spécifiques

    Machine B : utilisateurs 1, 2, 3, + 9, 10 (créés par exemple pour des tests)

    Situation nouvelle:
    *************
    Machine A : utilisateurs 1, 2, 3 (anciens utilisateurs) + 4,5,6 (nouveaux utilisateurs)
    Ces nouveaux utilisateurs , comme je les appelle , sont créés suite à de nouveaux projets

    Je fais un export mysqldump avec l'option -t de la base mysql

    Machine B : import de la base mysql

    RESULTAT : utilisateurs 1, 2, 3, + 9, 10 (situation de départ)
    PLUS
    utilisateurs 1,2,3,4,5,6 (de la Machine A)

    J'ai donc DANS LA BASE MYSQL DE LA Machine B :
    utilisateurs 1,2,3,9,10,1,2,3,4,5,6 --> problème


    Si maintenant je fais un export/import SANS l'option -t, j'obtiens sur la Machine B
    utilisateurs 1,2,3,4,5,6 --> problème (9,10) disparus --> normal, puisque ce type d'import efface les tables et en recrée de nouvelles mais bien sûr , ce n'est pas ce que je veux !!!

    CONCLUSION : ce que je voudrais au final sur la Machine B
    utilisateurs 1,2,3,9,10,4,5,6 avec des privilèges spécifiques aux bases, tables, ....

    Voilà un peu long mais précis ,... enfin je crois

    Y a t-il une solution à mon histoire...si tu as la patience de me répondre ...

    A bientôt, Michel

  10. #10
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    Donc en résumé, tu veux exporter les users de A, mais pas tous...

    Je te propose de le jouer comme ça :

    1/ créer une base spéciale, qui sera une copie de mysql, mais avec seulement les utilisateurs à exporter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE DATABASE secu ;
    USE secu ;
    2/ créer sur A une table avec les users à exporter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TABLE new_users (`user` VARCHAR(16), `host` VARCHAR(60)) ;
    3/ copier sur secu une copie filtrée de mysql :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE `user`
    SELECT *
    FROM mysql.user U 
      INNER JOIN new_users NU ON U.user = NU.user AND U.host = NU.host ;
     
    CREATE TABLE tables_priv
    SELECT *
    FROM mysql.tables_priv TP
      INNER JOIN new_users NU ON TP.user = NU.user AND TP.host = NU.host ;
     
    etc.
    4/ dumper secu avec l'option -t, et la réimporter sur B.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 315
    Points : 114
    Points
    114
    Par défaut
    Merci de ta réponse mais avec le recul, je crois que je me suis un peu trompé de cible

    En fait , ce que je souhaite faire n'est pas de la copie de tables mais de la copie d'enregistrements qui figurent dans certaines tables mysql

    Etant donné le caractère sensible de cette base et de ces tables , il vaut mieux avoir un ordinateur "dédié" à la sauvegarde et ne pas faire de manipulations trop compliquées dessus ( j'importe/exporte la totalité de ma base mysql et de ses tables d'une machine à l'autre) si je veux avoir des sauvegardes propres et nettes.

    Encore merci pour les posts et bon réveillon !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Echec d'importation base de données
    Par djulian dans le forum Administration
    Réponses: 9
    Dernier message: 17/09/2007, 04h46
  2. Réponses: 5
    Dernier message: 10/08/2007, 12h47
  3. importer base de donnée
    Par matt51 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 21/03/2007, 11h46
  4. Import base de données
    Par maxime17s dans le forum Installation
    Réponses: 5
    Dernier message: 17/12/2006, 21h37
  5. procédure pour exporter et importer bases de données
    Par mariogarcia dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 24/03/2006, 17h33

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