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

Bibliothèques Discussion :

Exporter une base de données MySQL vers un fichier


Sujet :

Bibliothèques

  1. #1
    Membre averti
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Points : 333
    Points
    333
    Par défaut Exporter une base de données MySQL vers un fichier
    Bonjour,

    Je travaille avec une base de données locale alimentée via un soft écrit en C/C++ à l'aide de la librairie libmysql.

    Il est possible via le binaire mysqldump (fournit dans l'installation de MySQL) d'effectuer un backup d'une base de données. Cet utilitaire affiche dans la console les commandes nécessaires à la recréation des tables, de leur structure et à la réinsertion des valeurs présentes dans celles ci au moment du dump.

    Ces lignes sont de la forme requête SQL :
    CREATE TABLE MaTable ...
    INSERT INTO MaTable ...
    ect...

    De nombreuses options existent pour retirer la création de la table, demander la destruction de la table avant création, ect...

    Plus d'infos sur cet exécutable ici :
    http://dev.mysql.com/doc/refman/5.0/en/mysqldump.html

    Libre ensuite à nous de rediriger la sortie vers un fichier, ce qui permet de disposer d'un script permettant de recréer notre base de données.


    Je souhaiterai savoir comment utiliser la librairie libmysql (ou une autre) de manière à effectuer le même traitement dans une application C/C++. Je ne parviens pas à trouver d'information à ce propos sur le net.

    Le but final sera de livrer un logiciel alimentant une base de données locale et possédant une fonction d'export de la base de données vers un fichier (script). Ce fichier sera récupéré sur un support externe (clé USB...) et pourra alors mettre à jour aisément une autre base de données.

    Si vous avez des idées à ce sujet, ou d'autres moyen d'alimenter la base de données mère, sachant que l'ordinateur sur lequel sera présente l'application ne dispose pas de connexion réseau, je suis preneur ! =)

    Merci à vous !

  2. #2
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065

  3. #3
    Membre averti
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Points : 333
    Points
    333
    Par défaut
    Je suis déjà tombé sur ce fichier, assez indigeste. Il n'y a pas un semblant d'API définissant les fonctions de manière un peu moins bourrine? ^^'

    Merci pour la proposition =)


    EDIT : Je viens de me souvenir comment est organisé DOxygen, lecture des définitions en cours...

  4. #4
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    j'ai une question idiote : pk tu n'exécutes pas directement mysqldump dans ton programme ?

  5. #5
    Membre averti
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Points : 333
    Points
    333
    Par défaut
    Pour le moment c'est ce qui est fait. Le binaire est copié dans le répertoire de l'appli et est appelé avec les options qui vont bien. Tout ceci marche très bien.

    Le soucis étant que je trouve cette façon de faire un peu sale, je préfèrerai que l'utilisateur ne puisse pas voir ce binaire dans les fichiers de l'application.

    De plus, cette version du code marche pour Windows (car le binaire est celui de la version Windows), il faut que je fasse une branche Linux pour que mon appli reste portable.

    Passer par les librairies mysql (comme je le fait pour émettre des requêtes à ma base de données) me parait plus propre. Je ne sais pas si ce que je dis est vraiment fondé, c'est une impression que j'ai. Voilà pourquoi je me prends la tête ^^


    Je mets à disposition le code actuel qui marche, ça peut peut-être intéresser quelqu'un :

    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
     
    //Verification de l'existance du repertoire d'export
    	char * repExport= DB_EXPORTPATH;
    	if (!access(repExport, 0) == 0) {
    		cout << "Creation du repertoire d'export de database" << endl;;
    		mkdir(DB_EXPORTPATH);
    	}
     
    	//Dump avec le binaire windows
    	if (strcmp(ENV,"WIN") == 0) {
    		//Genere le backup
    		string cmd("mysqldump -u ");
    		cmd += DB_USER;
    		cmd += " --password=\"";
    		cmd += DB_PWD;
    		cmd += "\" --result-file=\"";
    		cmd += DB_EXPORTPATH;
    		cmd += "/";
    		cmd += DB_BACKUPFILE;
    		cmd += "\" --no-create-info ";
    		cmd += DB_DATABASE;
    		system(cmd.c_str());
    		//ouvre le repertoire de backup
    		string cmdop("explorer \"");
    		cmdop += DB_EXPORTPATH;
    		cmdop += "\"";
    		system(cmdop.c_str());
    	}
    Avec les define suivants :
    DB_EXPORTPATH Chemin du répertoire des fichiers backups
    DB_USER Un utilisateur MySQL ayant les droits suffisants pour effectuer un dump
    DB_PWD Le mot de passe de l'utilisateur
    DB_BACKUPFILE Le nom du fichier de backup
    DB_DATABASE Le nom de la base de données à dumper

    ENV est créé au lancement de l'application, prend la valeur "WIN" si l'environnement est Windows, "LIN" si il s'agit de Linux.
    Ce moyen de déterminer l'environnement permet aussi d'utiliser les bons en-tête. Par exemple, sous Windows, l'include de winsock.h est nécessaire au bon fonctionnement de mysql.h

    Voici comment j'organise ceci, seule la branche Windows est implementée pour le moment :

    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
     
    //OS Configuration
    //Windows 
    #ifdef _WIN32
    #define WINENV
    #define WINTYPE "32"
    #define ENV "WIN"
    #endif
     
    #ifdef _WIN64
    #define WINENV
    #define WINTYPE "64"
    #define ENV "WIN"
    #endif
     
    //Windows environment
    #ifdef WINENV
    #include <winsock.h>
    #endif
    NB : Ce backup permet de mettre a jour une base de données. Ce qui implique qu'il doit être appliqué à une database répondant à une structure identique à celle de la database dumpée. L'option --no-create-info permet en effet de supprimer les requêtes de suppression/création de table. Le backup ne sera composé que de clauses de type INSERT (ce qui signifie aussi que si les éléments à restaurer sont déjà présents - clé primaire - l'instruction INSERT échouera et la ligne correspondante sera droppée).

    Voir la documentation relative à mysqldump dans mon premier post pour modifier les options à votre guise.

  6. #6
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    sinon tu peux exécuter les requêtes listant les tables d'une base; les membres de la table et enfin lister le contenu de la table

  7. #7
    Membre averti
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Points : 333
    Points
    333
    Par défaut
    Ouep, j'avais pensé faire comme ça au début et créer moi même mes commandes INSERT INTO & compagnie. Mais il faut avouer que si tout ce procédé est déjà fait, c'est un gain de temps sympathique.

    N'ayant plus trop de temps pour traiter ce soucis, je le laisse en suspend et conserve la solution énoncée ci dessus. Je reviendrai sans doute là dessus plus, si je trouve quelque chose de mieux, je vous en ferai part ^^

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/05/2013, 20h08
  2. [MySQL] Exporter une base de donnée MySQL
    Par Globolite dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 16/08/2012, 11h51
  3. Migrer une base de données MySQL vers SQL Server
    Par Goupo dans le forum MS SQL Server
    Réponses: 17
    Dernier message: 04/06/2010, 10h58
  4. Réponses: 0
    Dernier message: 27/04/2010, 13h43
  5. [vb6]Exporter une base de donnée Mysql en fichier csv
    Par budylove dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 06/07/2007, 15h20

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