Es existieren jede Menge Tutorials, in denen beschrieben wird, wie man ODBC mit MySQL unter Linux zum Laufen bekommt. Leider sind die meisten davon nicht als Tutorial konzipiert und die darin beschriebenen Lösungen arbeiten oft weder zuverlässig noch stabil.
Die folgende Variante wurde auf einem Ubuntu-14.04-Server (MySQL 5.5.37, Apache 2.4.7, PHP 5.5.9, unixODBC 2.2.14) getestet und läuft bisher stabil.
Stellen Sie sicher, dass Sie Root-Rechte auf Ihrem System besitzen, entweder indem Sie sich als Root-User anmelden:
su root
oder indem Sie das „sudo“-Präfix vor jedem Befehl auf der Konsole notieren:
sudo ls sudo vi ...
Installieren und konfigurieren Sie MySQL:
apt-get install mysql-server mysql-client
Installieren Sie die ODBC-Treiber:
apt-get install libmyodbc unixodbc-bin
Ermitteln Sie das Verzeichnis, in dem die ODBC-Treiber abgelegt sind:
find / -name 'lib*odbc*.so' OUTPUT (BEISPIEL): /usr/lib/i386-linux-gnu/odbc/libodbcnnS.so /usr/lib/i386-linux-gnu/odbc/libodbctxtS.so /usr/lib/i386-linux-gnu/odbc/libodbcdrvcfg1S.so /usr/lib/i386-linux-gnu/odbc/libodbcmyS.so /usr/lib/i386-linux-gnu/odbc/liboraodbcS.so /usr/lib/i386-linux-gnu/odbc/libodbcpsqlS.so /usr/lib/i386-linux-gnu/odbc/liboplodbcS.so /usr/lib/i386-linux-gnu/odbc/libodbcminiS.so /usr/lib/i386-linux-gnu/odbc/libmyodbc.so /usr/lib/i386-linux-gnu/odbc/libodbcdrvcfg2S.so
Erstellen Sie Ihre eigene ODBC-Installationsdatei:
vi /etc/odbcinst.ini
Fügen Sie dies in Ihre odbcinst.ini ein:
[myodbc_mysql] Description = ODBC for MySQL Driver = /usr/lib/i386-linux-gnu/odbc/libmyodbc.so Setup = /usr/lib/i386-linux-gnu/odbc/libodbcmyS.so UsageCount = 1
Ermitteln Sie das MySQL-Socket-Verzeichnis:
mysqladmin -u root -p version
AUSGABE (BEISPIEL):
Server version 5.5.37-0ubuntu0.14.04.1
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/run/mysqld/mysqld.sock
Uptime: 7 hours 14 min 15 sec
Erstellen Sie Ihre ODBC-Konfigurationsdatei:
vi /etc/odbc.ini
Fügen Sie dies in Ihre odbc.ini ein:
[myodbc_mysql_dsn] # Ihr System-DSN Description = description of your DSN Driver = myodbc_mysql # benutzerdef. Treibername Server = localhost # oder ggf. externe IP Port = 3306 # oder ggf. benutzeref. Port Socket = /var/run/mysqld/mysqld.sock # Socket, siehe oben Database = mysqldb1 # MySQL DB-Name oder leer Option = 3 ReadOnly = No
Installieren Sie den ODBC-Treiber:
odbcinst -i -d -f /etc/odbcinst.ini
Installieren Sie Ihren System-DSN:
odbcinst -i -s -l -f /etc/odbc.ini
Testen Sie, ob Ihr System-DSN erfolgreich installiert wurde:
odbcinst -s -q AUSGABE (BEISPIEL): [myodbc_mysql_dsn]
Testen Sie, ob Sie per ODBC eine Verbindung mit Ihrer MySQL-Datenbank herstellen können:
isql -v myodbc_mysql_dsn MYSQLUSER MYSQLUSERPASSWORD
AUSGABE (BEISPIEL):
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
Ganz starke Seite! Super detailliert und toll erklärt. Ganz ohne zu übertreiben; Da kann die offizielle Dokumentation von MySQL nicht mithalten!
Vielen Dank für das Lob!
Hallo,
endlich mal eine Anleitung, die genau beschreibt, warum man genau das tun soll, was in der feinen Anleitung notiert ist – und das Schönste: Die ODBC-Anbindung (MySQL) funktionierte sofort fehlerfrei. Zwei Nachfragen sind erforderlich, weil meine Erfahrungen zu ODBC hinreichend Null sind.
[1] Die Bemerkung ‚Installieren Sie DIE ODBC-Treiber: apt-get install libmyodbc unixodbc-bin‘ bezieht sich sicher NICHT speziell auf MySQL? Den Eindruck könnte man gewinnen, weil vorher das DBMS MySQL installiert wurde. Was wird hier installiert?
[2] Die letzte Frage bezieht sich auf ‚Installieren Sie DEN ODBC-Treiber:
odbcinst -i -d -f /etc/odbcinst.ini‘.
Ist die Interpretation richtig, dass in [1] ALLE ODBC-Treiber für das genutzte System installiert werden und in [2] dann ein spezieller Treiber (hier für MySQL)?
Der Hintergrund meiner Fragen ist folgender: Für die in unserem Online-Buch beschriebene Programmiersprache GAMBAS gibt es für das DBMS FireBird keinen gambas-spezifischen Treiber mehr, da es Lizenzprobleme gibt, weil die Lizenz der Komponente nicht mit der GPL, unter der Gambas lizensiert ist, kompatibel war. Aber man kann problemlos per ODBC Firebird nutzen.
Gibt es zu dieser Anbindung ODBC FireBird Erfahrungen oder gar eine spezielle Anleitung wie zu MySQL?
Mit flotten Grüßen
Honsek
Hallo Hans, schön, dass dir unsere Anleitung gefällt.
Zu deinen Fragen:
[1] Im Paket libmyodbc ist der MySQL-ODBC-Treiber enthalten, unixdobc-bin wird zum Konfigurieren desselben unter Unix benötigt.
[2] odbcinst liest die Konfiguration ein und installiert den MySQL-ODBC-Treiber damit systemweit. Wenn neben MySQL noch weitere ODBC-Treiber installiert und in der Konfigurationsdatei odbcinst.ini beschrieben wären, würde odbcinst diese ebenfalls installieren.
Zu FireBird können wir dir ad hoc leider keine Tipps geben.
Schließe mich an, tolle Beschreibung.
Aber eine Frage:
Also kann man unter Linux mehrere ODBC Verbindungen nebeneinander installieren und nutzen?
Bisher hatte ich auf dem Server immer das Problem, dass bei Neustart Montag morgen, immer nur die erste ODBC Verbindung da war. Dabei bräuchte ich auf dem Server MySQL und MSSQL. Und wenn ja, kann ich diese in den Scipt’s dann unter verschiedenen Namen ansprechen?
Hallo,
erstmal vielen Dank für diese tolle Anleitung. Ist wirklich verständlich geschrieben. Doch leider bekomme ich es nicht zum Laufen.
Ich habe ebenfalls Ubuntu 14.04 LTS, aber in 64-Bit. Den abweichenden Pfad habe ich natürlich berücksichtigt. Ansonsten habe ich zum Testen eure kompletten Daten genommen, ausser den Datenbanknamen noch angepasst.
Wenn ich jetzt isql -v myodbc_mysql_dsn ### ### eingebe kommt als erstes, dass isql nicht gefunden wird und ich apt-get instal unixodbc eingeben soll. Kein Problem.
Aber jetzt bekomme ich folgende Meldungen:
[IM002][unixODBC][Driver Manager]Data source name not found, and no default driver specified
[ISQL]ERROR: Could not SQLConnect
Irgendjemand eine Idee oder einen Hinweis. Ich kann leider auch per Google nichts passendes dazu finden.
Bin über jeden Hinweis dankbar 🙂
Liebe Grüße
Laura
Nach einem Jahr kann man ruhig mal anworten ^^
höchstwahrscheinlich musst du bei dem befehl „isql -v myodbc_mysql_dsn ### ### “ das myodbc_mysql_dsn ersetzen in das dir der befehl „odbcinst -s -q“ ausspuckt.
Meine Frage ist kann ich den odbc connector auf mehrere DB’s zugreifen lassen? kann ich in der odbc.ini mehrere datenbanken angeben? bei mir sagt das system das es nicht geht.
Grüße Chris