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

Lazarus Pascal Discussion :

[Linux] Accéder à une base MySQL 5.0.96 avec une version récente de Linux [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Invité
    Invité(e)
    Par défaut [Linux] Accéder à une base MySQL 5.0.96 avec une version récente de Linux
    Bonjour,

    je peste des fois contre Linux et aujourd'hui c'est le cas. J'ai un programme développé avec Lazarus qui fonctionne en Win 32 et 64 et fonctionnait en Linux 32 et 64. Il travaille avec une base de données MySQL hébergée mutualisée ce qui signifie que je ne peux pas modifier son my.cnf.

    A l'époque où j'ai fait ce programme, la version de la base de données MySQL était 5.0 (pour être précis 5.0.96). En Nux cela correspond à libmysqlclient.so.15. "Chez" MySQL, le format d'identification de connexion aux bases a été modifié dans les versions suivantes [old_password]... Il faudrait modifier le my.cnf pour qu'une version actuelle d'un driver de MySQL me permette de me connecter. C'est impossible... Et l'autre solution envisagée, installer sur une Ubuntu 14.04 un obsolète libmysqlclient.so.15 et toutes ses dépendances tout aussi obsolètes qui vont entrer en concurrence avec les actuelles librairies clientes fournies dans les dépôts, est une véritable gageure.

    Donc j'ai transféré hier ma base sur mon serveur MariaDB 5.5 qui lui aussi est hébergé (et n'est pas mutualisé... J'ai "compris" depuis). Mais par curiosité, je me demandais s'il n'y avait pas une autre approche possible ?

    Evidemment pour les versions Windows le refus d'identification est le même lors d'une tentative de connexion à la base avec un libmysql.dll de version 5.6. Mais, comme Win 32 (et 64) n'ont guère changé depuis des années, il suffit de télécharger une vieille libmysql.dll version 5.0.96 pour contourner le problème.

    Merci.
    Dernière modification par Invité ; 14/12/2014 à 11h08. Motif: Relecture - Orthographe

  2. #2
    Membre averti

    Homme Profil pro
    Diverses
    Inscrit en
    Février 2014
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Diverses

    Informations forums :
    Inscription : Février 2014
    Messages : 122
    Points : 428
    Points
    428
    Par défaut
    Evidemment pour les versions Windows le refus d'identification est le même lors d'une tentative de connexion à la base avec un libmysql.dll de version 5.6. Mais, comme Win 32 (et 64) n'ont guère changé depuis des années, il suffit de télécharger une vieille libmysql.dll version 5.0.96 pour contourner le problème.
    Sous Linux aussi tu peux faire ce genre de choses.

    1. Tu places ton executable et tes vieilles bibliothèques dans un dossier (genre /opt/monprg par exemple).
    2. Tu créés dans /usr/bin un script shell qui initialise la variable d'environement LD_LIBRARY_PATH à /opt/monprg puis lance le programme contenu dans /opt/monprg.
    3. Tu lances le script.


    exemple de script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #!/bin/bash
    PRGNAME=monprg
    DIRNAME=/opt/monprg 
    export LD_LIBRARY_PATH=$DIRNAME 
    $DIRNAME/$PRGNAME

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    dans ce cas précis, je ne crois pas. Feu libmysqlclient.so.15 a des dépendances et sous-dépendances qui ne sont compatibles avec la version de l'OS utilisé, ni installables. Donc, si l'idée est de les faire cohabiter ou de remplacer l'une par l'autre, à ma connaissance, ce n'est pas jouable. Ce qui, à mon avis, ne permet pas d'utiliser votre solution.

    Autre solution à rejeter, créer un lien... Ce serait totalement inutile car la libmysqlclient.so.18 n'est pas compatible avec ma base pour les raisons que j'ai expliquées.

    Par contre en général, si la librairie n'est pas trop ancienne, on peut bricoler comme par exemple ici avec Qt 5.3... (je n'en suis pas l'auteur mais cela résume bien le problème rencontré) :
    Re: QSqlDatabase: QMYSQL driver not loaded but available
    I have had the similar problem on Kubuntu 14.04 64 bit with the latest 5.3.1 Qt relase downloaded from the qt-project and installed to the /opt.
    The Ubuntu 14.04 ships with libmysqlclient 18 while the Qt 5.3.1 is built with 16. So the creating of a symlink like above did not solved my issue.
    Finally I have downloaded the libmysqlclient 16 from here:
    [...] And extraceted the library files to my /usr/lib/x86_64-linux-gnu folder.
    [http://www.qtcentre.org/threads/55365-QSqlDatabase-QMYSQL-driver-not-loaded-but-available]
    Dans ce problème que j'ai donc rencontré, je n'ai pas voulu installer la version 16 puisque nativement sur les postes Ubuntu 14, c'est la version 18 qui est installée... Donc la solution proposée par l'interlocuteur n'est pas aisément portable sur les postes Clients. Donc recompilation de l'environnement de développement incluant la version 18 (incomplètement d'ailleurs). C'est pour cela que je trouve Lazarus très sympa. Mais là, le problème me semble incontournable. Cependant les approches en Linux sont nombreuses... On ne sait jamais.

    Merci pour votre aide.
    Dernière modification par Invité ; 14/12/2014 à 17h25.

  4. #4
    Membre averti

    Homme Profil pro
    Diverses
    Inscrit en
    Février 2014
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Diverses

    Informations forums :
    Inscription : Février 2014
    Messages : 122
    Points : 428
    Points
    428
    Par défaut
    A ma connaissance la procédure que je t'ai indiquée doit fonctionner. Il suffit de placer dans le dossier de ton programme la bibliothèque mysql et éventuellement les bibliothèques dont elle dépend (si les bibliothèques installées sur le système ne sont pas compatibles). Ces bibliohèques ne seront utilisées que par le programme lancé par le script. Elles ne remplacent pas les libs ubuntu pour les autres programmes. Tu peux récupérer les vieilles bibliothèques dans les anciennes version ubuntu. Pour déployer sur les postes clients c'est simple tu copies le dossier qui contient le programmes et les bibliothèques ainsi que le script.

    Si tu veux comprendre comment ça marche renseignes toi sur la variable d'environnement LD_LIBRARY_PATH. Tu peux aussi te renseigner dans la section linux du forum il y a peut être d'autres méthodes.

  5. #5
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 878
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 878
    Points : 15 310
    Points
    15 310
    Par défaut
    Bonsoir,
    Citation Envoyé par selzig Voir le message
    Donc j'ai transféré hier ma base sur mon serveur MariaDB 5.5 qui lui aussi est hébergé (et n'est pas mutualisé... J'ai "compris" depuis). Mais par curiosité, je me demandais s'il n'y avait pas une autre approche possible ?
    Moi, les vieux softs auxquels je tiens et qui ne pourront pas / plus évoluer, je les fige dans des machines virtuelles dédiées, par exemple ma messagerie Outloook Express tourne dans une MV XP SP2 qui ne sert qu'à ça et, ma foi, ça le fait bien.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    @Yamer : je tenterai votre solution sur un autre appareil. Mais j'ai toujours un doute.
    Je regarde les packages des 2 versions (ou équivalentes), un accès mysql lucid et un trusty:


    Tous les 2 utilisent comme dépendances libc6 (cf les pages internet).
    La "vieille" libc6 (>= 2.4) pour l'un et la nouvelle libc6 (>= 2.17) pour l'autre. Evidemment je peux placer l'ancienne libc6 (>= 2.4) dans un répertoire dédié à l'ancienne. Mais libc6... dépend de libgcc1, de debconf qui dépendent de...

    A un moment, il va bien falloir qu'il y ait un socle commun à l'ancienne et la nouvelle et forcément, ce seront des dépendances de Ubuntu 14... qui ne seront pas évidemment compatibles avec les vieilles.

    Donc j'essayerai mais je reste sceptique.

    @Jipété : original en effet... Mais je me vois mal installer une VM sur chacun de mes postes clients.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Pour clore cette discussion, méthode testée pendant les vacances scolaires : Echec complet. Et pourtant je suis allé aussi loin que possible pour satisfaire les dépendances récupérées sur un poste secondaire installé avec une vieille Ubuntu, au point qu'il m'a fallu ré-installer mon Ubuntu 14 pour la "re-stabiliser". Donc la bonne méthode était bien de mettre à jour (migrer dans mon cas) le serveur mySQL.

    Tous mes voeux.

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

Discussions similaires

  1. Question ODBC en C avec une Base MySQL
    Par wixaw dans le forum C
    Réponses: 6
    Dernier message: 04/05/2010, 15h58
  2. [2000] Connection avec une base MySQl
    Par alpachico dans le forum SSAS
    Réponses: 1
    Dernier message: 20/02/2009, 09h14
  3. Réponses: 6
    Dernier message: 26/09/2007, 07h55
  4. Problème avec une base Mysql sur le web
    Par mappy dans le forum Accès aux données
    Réponses: 2
    Dernier message: 08/06/2007, 08h38
  5. [MySQL] Afficher une image d'un champ blob d'une base MySQL
    Par lolobedo dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 29/11/2005, 10h10

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