MySQL auf Ubuntu

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Benutzeravatar
juelin
Beiträge: 237
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

MySQL auf Ubuntu

Beitrag von juelin »

Hallo,
Ihr habt mir ja prima geholfen mit meinem MySQL Problem auf Windows.
Jetzt wollte ich das auch in Linux (Ubuntu) einsetzen.
Habe Package ZEOS installiert.
Habe die Komponenten ZConnection und ZQuery eingebunden
und die Eigenschaften entsprechend gesetzt.
Wenn ich nun den Befehl: ZConnection1.Connect ausführe bekomme ich die Fehlermeldung:
Fehlerklasse: EZSQL Exception
None of dynamic libraries can be found, is not loadable

File: libmysqlclient.so.21.2.36 steht in /usr/lib/lazarus/2.2.0/
und habe ich bei ZConnection1 in der Eigenschaft LibrariyLocation angegeben.
Es gibt auch das File libmysqlclient.so.21. Habe ich auch probiert, geht aber auch nicht.

Könnt ihr nochmal helfen?

Danke und Gruß
Jürgen

Benutzeravatar
willi4willi
Lazarusforum e. V.
Beiträge: 167
Registriert: Sa 1. Nov 2008, 18:06
OS, Lazarus, FPC: Windows, Linux (debian) / Lazarus 3.2 / FPC 3.2.2
CPU-Target: i386, win64, arm

Re: MySQL auf Ubuntu

Beitrag von willi4willi »

Ich mache das so:

Code: Alles auswählen

    
      if LibraryLocation='' then
      begin
       {$IFDEF WINDOWS}
         {$IfDef Win32}
           LibraryLocation:=ExtractFilePath(ParamStr(0))+'libmariadb32.dll';
         {$EndIf}
         {$IfDef Win64}
         LibraryLocation:=ExtractFilePath(ParamStr(0))+'libmariadb64.dll';
         {$EndIf}
       {$ENDIF}
       {$IFDEF LINUX}
         LibraryLocation:='/lib/x86_64-linux-gnu/libmariadb.so';
       {$ENDIF}
      end;
   
 
Ich nutze die 64 -bit Debian Version von Linux.

Wichtig ist, dass die richtige Version der Lib auf die Datei libmariadb.so einen Link hat.
Hast du das Paket libmariadb-dev und/oder mariadb-client installiert?
Nutzt du auch 64 bit oder noch 32-bit?
 

Viele Grüße

Willi4Willi

------------

charlytango
Beiträge: 1058
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: MySQL auf Ubuntu

Beitrag von charlytango »

ich würde davon Abstand nehmen Bibliothekspfade und Zugriffsdaten im Source hart rein zu codieren.
Irgend eine Installation im OS ändert sich und schon steht das Programm.
Bei mir stehen Zugriffsdaten in INI Files (die bei Bedarf auch gerne verschlüsselt sein können). Damit kann man das Programm auf die Datenbank ohne erneute Kompilierung anpassen. Das geht so weit dass man damit auch unterschiedliche Datenbanken verwenden kann.

SQLDB und ZEOS haben die Fähigkeit unterschiedliche SQL-Datenbanken bei gleichemm Code zu unterstützen. (Wenn man sich aus SQL-Server-Seite nicht aus den inkompatiblen Funktionen bedient und nahe an den SQL Standards wie SQL89 SQL92 bleibt)

Eine Zugriffskomponente auf SQLDB Basis findest du hier: https://github.com/CharlyTango/ct_sqldatabaseconnection

Leider habe ich sie noch nicht auf Dualbetrieb ZEOS/SQLDB angepasst. Nachdem aber nichts exotisches verwendet wird, kann man die SQLDB Komponenten durch ZEOS-Komponenten ersetzten und es sollte auch mit ZEOS klappen.

Die Strategie ist jedenfalls dabei ersichtlich

Benutzeravatar
juelin
Beiträge: 237
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: MySQL auf Ubuntu

Beitrag von juelin »

Hallo zusammen,
leider ist es bis jetzt noch nicht möglich unter Linux (Ubuntu) auf die MySQL Datenbank in Lazarus zu zugreifen.

willi4willi: es geht um Linux nicht Windows

Ich benutze ZEOS aber er kann die Library libmysqlclint.so.21 nicht laden.

charlytango: ich habe deinen Vorschlag das Package installiert. Bringt aber leider auch nichts. Der kann die Libray auch nicht laden.

Es ist übrings eine MySQL Datenbank unter Ubuntu (nicht MariaDB).

Die MySQL Workbench in Ubuntu funktioniert einwandfrei.

Wer kann mir da helfen??????

Besten Dank und Gruß
Jürgen

charlytango
Beiträge: 1058
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: MySQL auf Ubuntu

Beitrag von charlytango »

ok, dann mal von vorne:

Nur zur Info, ich bin kein Linux-Guru, das können andere hier weit besser, aber im wesentlichen ist meine Basisstrategie für mich auf jedem OS gleich.

1 - den gewünschten SQL Server installieren
2 - ein Zugriffs- bzw Adminprogramm installieren von dem man weiß dass es grundsätzlich funktioniert. (Aus meiner Sicht brauche ich so eine Admintool ohnedies, weil es MIR einiges erleichtert.). Hier findest du einige. Beim schnellen drüberschauen würde ich es mal mit MySQL Workbench versuchen, das ist wenigstens kostenfrei.

3 - Mit dem Admin-Tool einmal auf den SQL Server und die DB zugreifen

Danach weiß ich mal, dass der SQL Server und ein Zugriffsmechanismus funktioniert.

Meine Komponente hat einige Standard-Suchpfade eingebaut in denen sie automatisch nach der Bibliothek sucht (wenn nur der Bibliotheksname im INI Fil angegeben ist und nicht gleich der ganze qualifizierte Pfad.) Trotzdem kann es sein dass die Zugriffsblibliothek nicht gefunden wird wenn der Pfad oder die Rechte nicht stimmen.

Als Nebenmaßnahme würde ich einfach mal die ganze Platte nach der datei durchsuchen lassen, denn wie gesagt -- kein Linux- Guru, daher weiß ich auch nicht wohin die Programme installiert werden. Soweit ich weiß kann das in unterschiedlichen Verzeichnissen passieren.
juelin hat geschrieben: Di 10. Sep 2024, 19:40 File: libmysqlclient.so.21.2.36 steht in /usr/lib/lazarus/2.2.0/
und habe ich bei ZConnection1 in der Eigenschaft LibrariyLocation angegeben.
Es gibt auch das File libmysqlclient.so.21. Habe ich auch probiert, geht aber auch nicht.
Was auch passieren kann ist, dass die Datei die du brauchst gar nicht real existiert, sondern nur als Symlink. Wenn so ein Symlink dann mal auf ein nicht existierendes File oder einen falschen Namen zeigt, dann klappt es auch nicht.

Und ja, als DB-Frontend-Entwickler hat man es leider mit der gesamten Kette bis zum SQL-Server zu tun. Daher empfehle ich erst mal Schritt 1 bis 3, danach ist man meistens schlauer.

Edit -- sorry, hab überlesen dass die Workbench schon funktioniert
Zuletzt geändert von charlytango am Mi 11. Sep 2024, 22:35, insgesamt 1-mal geändert.

charlytango
Beiträge: 1058
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: MySQL auf Ubuntu

Beitrag von charlytango »

oh sorry, da hab ich was überlesen.

ich habe keine Ahnung ob die Workbench nicht ihre eigene Bibliotheken mit installiert.
Aber irgendwo muss doch die verdammt Datei auf der Platte sein.

Allerdings.....

Unter Windows braucht Lazarus selbst Zugriff auf eine Bibliotheksdatei (da kopiert man diese ins Verzeichnis mit der Lazarus.exe) wenn man in der GUI Zugriff auf die Daten haben will bzw die Connection prüfen/öffnen will.
Für die von Lazarus erzeugten EXE gelten dann wieder andere Bedingungen, da muss die Bibliothek von der erzeugten EXE erreicht werden können -->also das EXE Verzeichnis oder ein definiertes anderes, wenn du selbst den Pfad setzt oder direkt ins \System32 Verzeichnis odere das \SysWOW64 (nicht täuschen lassen, die 64bit Versionen gehören ins \System32)

Ich nehme stark an dass für Linux ähnliches gilt -- versuchst du in der GUI zu connecten oder in der danach laufende EXE (bzw deren Linux-Entsprechung)?

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6762
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: MySQL auf Ubuntu

Beitrag von af0815 »

Das was willi4will da gezeigt hat, ist gar nicht mal so schlecht (Ich verwende ein ähnliches Konstrukt)

Linux - fast alle Linuxoide sind 64 Bit, RasPi ist eine der wenigen Ausnahmen (da gibt es 32 & 64 Bit).

Das erste ist man sollte mal herausfinden, welche library ZEOS standardmässig sucht. Ist es libmariadb.so oder libmysqlclient.so ?
Wenn das mal klar ist, so sollte man auf der Platte mal dannach suchen, wichtig das man auch die Ergenisse mit den Versionsnummern und die Symlinks sieht. Warum, meistens wird mit den *-dev Paketen mehr oder minder nur ein Symlink erstellt Beispiel libmariadb.so -> libmariadb.so.21 . Deswegen immer wieder der Rat die Developer Pakte zu installieren.
Erst wenn man wirklich die richtigen Namen kennt, so kann man den in LibraryLocation angeben und dort immer den kompletten Pfad.
Dann ist die Wahrscheinlichkeit recht groß das es funktioniert. Habe es so sowohl unter SqlDB als auch ZEOS zum laufen gebracht (Bei Programmen die sowohl unter Win32, Win4, RasPi32 und Linux64 laufen, einfach nur die Kompilierung umschalten :-) )
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
juelin
Beiträge: 237
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: MySQL auf Ubuntu

Beitrag von juelin »

Hallo,
hier nochmal zum besseren Verständnis ein paar Screenshots aus meinem Ubuntu.

Fehlermeldung ist die Meldung, die kommt wenn ich im Programm ZConnection1 Connecte (ZEOS).

MySQLWorkbench ist die Ausgabe von MySQLWorkbench (die Datenbank läuft).

find ist die Ausgabe vom FIND-Aufruf in Ubuntu.

Ich hoffe das brint Euch weiter.

Gruß
Jürgen

PS: habe es mit allen libmysql aus dem FIND probiert. Nichts funktioniert.
Dateianhänge
MySQLWorkbench.jpg
(114.31 KiB) Noch nie heruntergeladen
find.txt
(530 Bytes) 80-mal heruntergeladen
Fehlermeldung.jpg
(93.57 KiB) Noch nie heruntergeladen

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Re: MySQL auf Ubuntu

Beitrag von theo »

Wieso liegt die lib in /usr/lib/lazarus/2.2.0/ ?
Schon mal probiert, die testweise als "libmysqlclient.so.21" in /usr/lib zu legen? (Oder ein Symlink oder LD_LIBRARY_PATH setzen...)

Benutzeravatar
Zvoni
Beiträge: 363
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: MySQL auf Ubuntu

Beitrag von Zvoni »

libmysqlclient.so.21.2.36 <> libmysqlclient.so.21
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Benutzeravatar
Zvoni
Beiträge: 363
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: MySQL auf Ubuntu

Beitrag von Zvoni »

theo hat geschrieben: Do 12. Sep 2024, 13:26 Wieso liegt die lib in /usr/lib/lazarus/2.2.0/ ?
Schon mal probiert, die testweise als "libmysqlclient.so.21" in /usr/lib zu legen? (Oder ein Symlink oder LD_LIBRARY_PATH setzen...)
Für mich sieht das eher so aus, als ob Lazarus aus den Ubuntu-Repos installiert wurde, was für mich ein "Pfui bäh" ist (und zwar genau wegen den ganzen Pfad-Geschichten. Hatte immer nur Ärger damit)
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Benutzeravatar
juelin
Beiträge: 237
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: MySQL auf Ubuntu

Beitrag von juelin »

Hallo Lazarus-Fans,
recht herzlichen Dank für Eure Unterstützung.
Der Tipp in Linus die libmaysqlclient Files nach /usr/lib zu kopieren hat es gebracht.
Man braucht in der Komponente ZConnection1 nicht mal (im Gegensatz zu Windows)
die Eigenschaft LibraryLocation ausfüllen.
Jetzt klappt also der Zugriff auf meine MySQL-Datenbank mit Lazarus unter Ubuntu,
Also nochmal Danke.
Gruß
Jürgen

charlytango
Beiträge: 1058
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: MySQL auf Ubuntu

Beitrag von charlytango »

juelin hat geschrieben: Do 12. Sep 2024, 19:50 Der Tipp in Linus die libmaysqlclient Files nach /usr/lib zu kopieren hat es gebracht.
Gratuliere, soweit klappt es mal.
Trotzdem ist der Thead für mich noch etwas unbefriedigend, denn der Tipp von Theo lief ja eigentlich auf einen Workaround hinaus.
Wo liegt jetzt wirklich der Hund begraben dass es nicht geklappt hat?

@juelin : Hast du Lazarus aus den Ubuntu-Repositories installiert
Zvoni hat geschrieben: Do 12. Sep 2024, 14:41 Für mich sieht das eher so aus, als ob Lazarus aus den Ubuntu-Repos installiert wurde
oder aus den Sourcen? (also z.B. mit fpcupdeluxe) ?

Denn ich nehme an, die Installation von MySQL Server und Client lief über die Ubuntu-Repositories und sollte wohl standardisiert sein?

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6762
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: MySQL auf Ubuntu

Beitrag von af0815 »

charlytango hat geschrieben: Fr 13. Sep 2024, 08:47 Denn ich nehme an, die Installation von MySQL Server und Client lief über die Ubuntu-Repositories und sollte wohl standardisiert sein?
Dann wäre noch interessant, von wo er die libs nach /usr/lib kopiert hat, weil unter Linux kopiert man nicht, sondern man macht einen entsprechenden Symlink. Den sollten aber die entsprechenden *-dev Pakete ja setzen. Oder ist da wieder mal an den Pfaden in der Distribution gedreht worden ?

Edit:
Die Pakete verstecken das je nach Architektur.
Paket "libmysqlclient21" für amd64
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.21
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.21.2.39
Paket "libmysqlclient21" für armhf (Raspi)
/usr/lib/arm-linux-gnueabihf/libmysqlclient.so.21
/usr/lib/arm-linux-gnueabihf/libmysqlclient.so.21.2.39
Wenn dann keiner die Symlinks richtig setzt, so geht das nur Distributions-Versionsspezfisch.

Was bei Win die DLL-Hölle ist, ist bei Linux die Symlink-Hölle :-) SCNR

Kopieren ist damit nicht der richtige Weg, weil dadurch keine Bugfixes mitbehandelt werden, also geht nur der Symlink weg um das sauber zu machen. Daher wird eine veraltete Lib bei der kopierten Version nicht automatisch upgedatet und man tritt sich damit eine langfristige Mine ein. Auch wenn man die DIstribution upgraded würde die alte Version bestehen bleiben und das macht dann sicher irgendwann (wenn man nicht mehr daran denkt) überraschende Probleme die man fast nicht findet.
Zuletzt geändert von af0815 am Fr 13. Sep 2024, 09:16, insgesamt 1-mal geändert.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
juelin
Beiträge: 237
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: MySQL auf Ubuntu

Beitrag von juelin »

Habe die libmysqlclient von /usr/lib/lazarus nach /usr/lib kopiert.
Gruß
Jürgen

Antworten