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 :

Sauvegarde schéma et données d'une base en respectant les FK


Sujet :

Administration MySQL

  1. #1
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 276
    Points : 83
    Points
    83
    Par défaut Sauvegarde schéma et données d'une base en respectant les FK
    Bonjour, J'ai bien cherché mais je n'ai pas trouvé une solution pour ce problème. J'ai effectué le backup de ma base à l'aide de mysqldump avec la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysqldump -u root --password=admin myDB --opt --routines --triggers --default-character-set=utf8 --complete-insert > %FICHIER_MON_DB%
    En effet quand je fais un dump, mysqldump sauvegarde à la volé par ordre alphabétique sans tenir compte de mes Foreign key. De ce fait, j'ai des erreurs lors de la restauration.
    Existe-t-il un outils qui gère cette problématique ? Es ce que quelqu'un a idée solution pour contourner ce problème.
    Je vous remercie d'avance.
    Cordialement

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    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 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Si tes erreurs sont sur les CREATE TABLE, je ne vois pas trop...

    Si par contre c'est juste à l'insertion, il te suffit de passer cette requête avant l'import :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET @@foreign_key_checks = 0 ;
    et de rétablir ensuite le comportement normal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET @@foreign_key_checks = 1 ;
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  3. #3
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 276
    Points : 83
    Points
    83
    Par défaut
    Merci pour ta réponse.
    Le problème c'est que lors du backup j'ai par exemple cette table :
    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
    DROP TABLE IF EXISTS `bord`;
    SET @saved_cs_client     = @@character_set_client;
    SET character_set_client = utf8;
    CREATE TABLE `bord` (
      `bo_code_pk` int(11) NOT NULL auto_increment,
      `bo_numero` int(11) default NULL,
      `bo_mode` enum('ESP','CHQ','MAN','VIR') NOT NULL,
      `bo_montant` decimal(11,3) NOT NULL default '0.000',
      `bo_dateval` date default NULL,
      `bo_remise` date default NULL,
      `bo_annee` date NOT NULL,
      `bo_user_fk` int(11) NOT NULL,
      `bo_created` date default NULL,
      `bo_updated` date default NULL,
      PRIMARY KEY  (`bo_code_pk`),
      KEY `index_bord_user_fk` USING BTREE (`bo_user_fk`),
      CONSTRAINT `bord_user_fk` FOREIGN KEY (`bo_user_fk`) REFERENCES `utilisateur` (`UT_CODE_PK`) ON DELETE NO ACTION ON UPDATE NO ACTION
    ) ENGINE=InnoDB AUTO_INCREMENT=100009 DEFAULT CHARSET=utf8;
    SET character_set_client = @saved_cs_client;
    Or, la table utilisateur n'est pas encore crée, donc l'erreur se produit lors de la création de la table. Je n'ai pas trouvé un moyen (c'est à dire une option à rajouter avec mysqldump) pour faire un backup sans ces ordres de création des foreign key ou créer ces ordres de création avec la commande ALTER à la fin du script.
    Encore merci de votre collaboration.

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    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 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Je te suggère de faire d'abord un dump sans les données, qui te donnera tous les CREATE TABLE, et de les ordonner toi-même par ordre de dépendance. Tu pourras ensuite faire un second dump avec seulement les données.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  5. #5
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 276
    Points : 83
    Points
    83
    Par défaut
    En fait, c'est ma seule solution. Mais là aussi, j'ai des problèmes puisque le fichier dump obtenu avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\MySQL\bin\mysqldump.exe -u root -padmin ascbn > C:\Sources\BDD\data_acsbn_%date:~6,4%%date:~3,2%%date:~0,2%.sql
    contient aussi la définition des données c'est à dire la création des tables.
    Pouvez vous m'indiquer quelle l'option pour obtenir juste un script contenant juste les données.
    Merci de votre aide et vos suggestion.
    Cordialement

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    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 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Apparemment, ça n'existe pas. Tu as deux options :

    • Utiliser phpMyAdmin au lien de mysqldump, puisque lui te permet d'exporter sans la structure.
    • Recharger ton dump structure + données ; les CREATE TABLE vont faire des erreurs, il te suffit de les ignorer.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  7. #7
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 276
    Points : 83
    Points
    83
    Par défaut
    j'ai cherché et essayé. La meilleur résultat que j'ai obtenu c'est d'avoir 2 fichiers distincts : Un pour contenant la structure de la base et le second contenant les données.
    Pour avoir la structure de la base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\MySQL\bin\mysqldump.exe -u root -padmin --skip-opt --no-data --routines --triggers --disable-keys --create-options --default-character-set=utf8 MyDb > C:\BDD\MyDb_%date:~6,4%%date:~3,2%%date:~0,2%.sql
    Pour avoir seulement les données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\MySQL\bin\mysqldump.exe -u root -padmin --skip-opt --triggers=FALSE --no-create-info --default-character-set=utf8 MyDb > C:\BDD\MyDb\data_MyDB_%date:~6,4%%date:~3,2%%date:~0,2%.sql
    Le problème que j'ai pas trouvé un moyen pour ordonner la création de la base selon l'ordre des foreign key. Pour remédier à cela je dois intervenir manuellement. Sinon je pourrais avoir un fichier contenant les données dans lequel je dois ajouter les commandes d'activation/désactivation des FK : insérer au début
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET @@foreign_key_checks = 0 ;
    et à la fin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET @@foreign_key_checks = 1 ;
    Merci de votre collaboration. J'espère que cette solution servirait pour quelqu'un d'autre.
    Cordialement

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 17/01/2014, 20h41
  2. Réponses: 3
    Dernier message: 07/05/2013, 11h39
  3. Réponses: 2
    Dernier message: 07/08/2011, 09h05
  4. Sauvegarder la structure et les données d'une base MySQL
    Par Invité dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 0
    Dernier message: 14/02/2011, 18h53
  5. Sauvegarde de donnée dans une base dBase ou Paradox
    Par l'Ermite Misanthrope dans le forum C++Builder
    Réponses: 1
    Dernier message: 06/01/2008, 18h02

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