Artikel - Detailansicht

Icon Aktuelles ODBC-Zugriff auf MySQL-Datenbank mit ColdFusion 4.5 für Linux

    Vorbemerkungen
  1. MySQL installieren
  2. iODBC installieren
  3. MyODBC installieren
  4. Permissions in MySQL setzen
  5. ODBC.INI anpassen
  6. ODBC-Test
  7. Einen MySQL-Account für ColdFusion einrichten
  8. ColdFusion-ODBC anpassen
  9. CF-Administrator

 

Vorbemerkungen

MySQL ist eine der beliebtesten Datenbanken unter Linux, und seit es eine Linux-Version von ColdFusion gibt, wird immer wieder die Frage gestellt: "Wie kann ich eine MySQL-Datenbank unter ColdFusion nutzen?". Das Dumme an der Sache ist, daß Allaire keinen ODBC-Treiber für MySQL mitliefert, also ist Eigeninitiative gefragt.

Um eine MySQL-Datenbank unter CF Linux zu nutzen, brauchen wir (neben CF und MySQL) 2 Softwarekomponenten:

  • Einen ODBC-Manager für Linux (iODBC oder UnixODBC)
  • myODBC

Im Folgenden beschreibe ich die Installation von MySQL, iODBC und myODBC sowie die Konfiguration der odbc.ini-Datei von CF.

Wichtig: Bitte beachtet die Versionsnummern! MyODBC 2.50.28 benötigt mindestens MySQL 3.23.6. Mit ältere Versionen von MySQL wird es bei dieser MyODBC-Version Schwierigkeiten geben. Außerdem sollte man sich die Source-Pakete der Komponenten downloaden, um z.B. MySQL mit den richtigen Optionen compilieren zu können.

Hier die Voraussetzungen, bzw. die von mir verwendeten Komponenten:

Eine Anmerkung zum Compiler: Das INSTALL-Readme von MySQL gibt Optionen an, mit denen die Compilierung auch funktionieren soll, wenn man ausschließlich gcc installiert hat. Bei meinem System war allerdings trotz aller Optionen nichts zu machen, bis ich egcs installierte.

Zwar ist MySQL 3.23.7 noch im Alpha-Stadium, doch hat auch der Alpha-Code von TcX einen recht hohen Standard. Für einen Produktiv-Server würde ich trotzdem auf Version 3.22 zurückgreifen und entsprechend eine ältere Version von MyODBC installieren.

Nun zur eigentlichen Installation:

Ich gehe davon aus, daß jeder in der Lage ist, die downgeloadeten Tarballs zu entpacken. Für Vergessliche: shell> tar ?xzvf mysql-3.23.7-alpha.tar.gz

 

1. MySql installieren

1.1 configure

In das Verzeichnis wechseln, in dem wir den MySQL-Tarball entpackt haben und configure aufrufen:

shell> ./configure ?prefix=/usr/local/mysql ?with-thread-save-client

Die Option "--with-thread-save-client" ist wichtig für MyODBC! Das Prefix (= Installationspfad) bleibt natürlich jedem selbst überlassen.

1.2 make

Nach erfolgreichem configure "make" aufrufen

shell> make

1.3 make install

Anschließend:

shell> make install

1.4 mysql_install_db

Abschließend nur noch die Administrationstabellen erzeugen:

    shell> scripts/mysql_install_db

1.5 MySQL-Dämon starten

Im Unterverzeichnis "bin" des Prefixes aus Schritt 1.1 "safe_mysqld &" aufrufen:

    shell> /usr/local/mysql/bin/safe_mysqld &

Damit wäre Schritt 1 abgeschlossen. Für weitere MySQL.-Aktionen (z.B. Ändern des MySQL-Admin-Passworts) siehe MySQL-Manual.

 

2. iODBC installieren

Das iODBC-Source-Paket wiederum entpacken, in das Verzeichnis wechseln und wieder die Schritte configure, make und make install ausführen, sollte problemlos gehen. Der guten Ordnung halber habe ich wieder ein Prefix für configure verwendet (was allerdings den Nachteil hat, daß iODBC nicht im Suchpfad ist!).

    2.1 shell> ./configure ?prefix=/usr/local/iodbc
    2.2 shell> make
    2.3 shell> make install

Hinweis: Bei dieser Konfiguration wird später eine odbc.ini in /usr/local/iodbc/etc erwartet.

 

3. MyODBC installieren

Auch hier sind wieder die gleichen Schritte notwendig:

3.1 configure

Wer wie ich bei MySQL und iODBC Prefixes verwendet hat, muß bei diesem Schritt die entsprechenden Optionen angeben (dieses Beispiel entspricht den Prefixes aus Schritt 1.1 und 2.1).
Hinweis: Wie üblich, bedeutet der Backslash (\) lediglich, daß das Kommando in der nächsten Zeile fortgesetzt wird, also nicht mit eingeben! ;-)

    shell> ./configure ?prefix=/usr/local/myodbc ?with-mysql-libs=/usr/local/mysql/lib/mysql \
    ?with-mysql-includes=/usr/local/mysql/include/mysql ?with-iodbc-libs=/usr/local/iodbc/lib \
    ?with-iodbc-includes=/usr/local/iodbc/include

Falls eine Warnung auftaucht, daß libiodbcinst nicht gefunden wurde, kann die normalerweise ignoriert werden (siehe INSTALL-Readme von MyODBC!).

Make und make install sollten wiederum problemlos funktionieren.

3.2 make

    shell> make

3.3 make install

    shell> make install

 

4. Permissions in MySQL setzen

Bevor wir nun unsere ODBC-Installation testen können, müssen wir in MySQL noch die nötigen Permissions setzen (für Erklärungen siehe MySQL-Manual). Das Programm odbctest verwendet den User "dummy" ohne Password, also fügen wir die entsprechenden Datensätze in die Tabellen "user" und "db" ein:

    shell> /usr/local/mysql/bin/mysql

    mysql> use mysql
     
    mysql> INSERT INTO user(host,user,password)
    VALUES(?myHostName?, ?dummy?,??);
     
    mysql> INSERT INTO db
    (host, db, user, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv)
    values ('myHostName', 'test', 'dummy', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');

 

Den MySQL-Client beenden und ?mysqladmin reload? ausführen:

    shell> /usr/local/mysql/bin/mysqladmin reload

 

5. ODBC.INI anpassen

Jetzt fehlt uns noch die richtige odbc.ini. Im Unterverzeichnis "etc" des iodbc-Installations-Verzeichnisses (im Beispiel aus unserem Schritt 2 /usr/local/iodbc) editieren wir die Datei. (Sollten Verzeichnis und Datei nicht vorhanden sein, einfach anlegen.)

Für die von MySQL installierte Datenbank "test" sollte die Datei so aussehen:

# odbc.ini Anfang--------------------------

[test]
     DSN        = test
     # Unter ?Driver? den Pfad zu libmyodbc.so einsetzen,
     # bei unserem Beispiel also:
     Driver     = /usr/local/myodbc/lib/libmyodbc.so
     Database   = test
     Server     = myHostname
     Port       = 3306

# odbc.ini Ende ---------------------------

Klar, daß bei "myHostname" jeder seinen richtigen Rechnernamen einträgt!

6. ODBC-Test

Jetzt können wir unsere ODBC-Verbindung mit dem Programm "odbctest" (gehört zu iODBC) überprüfen. Es befindet sich im Unterverzeichnis "samples" des iODBC-Source-Verzeichnisses (nur zur Deutlichkeit: SOURCE-Verzeichnis! ;-)):

    shell> /usr/src/packages/SOURCES/libiodbc-2.50/samples/odbctest

Am dort erscheinenden Prompt "DSN=test" eingeben. Erscheint anschließend ein Prompt "SQL>" hat alles funktioniert. Sollte eine Fehlermeldung erscheinen, gibt es mehrere Möglichkeiten:

  1. Der Pfad zu libmyodbc.so in der odbc.ini stimmt nicht
  2. Die odbc.ini liegt nicht im richtigen Verzeichnis (IODBCDIR/etc)
  3. In den configure-Optionen bei MyODBC wurden falsche Pfade angegeben
  4. MySQL wurde ohne die Option "?with-thread-safe-client" compiliert.
  5. libmysqlclient.so wurde nicht gefunden:

Die Punkte 1 ? 4 lassen sich relativ schnell überprüfen und ausschließen. Punkt 5 ist eine recht wahrscheinliche Mglichkeit, und auch hier können wir uns relativ schnell Klarheit verschaffen:

    shell> ldd /usr/local/myodbc/lib/libmyodbc.so
    libmysqlclient.so.8 => not found
    libc.so.6 => /lib/libc.so.6 (0x40018000)
    /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)

Das heißt, das die Library nicht gefunden wurde. Auch hier gibt es wieder mehrere Möglichkeiten der Abhilfe (siehe INSTALL-README von MyODBC!!). Hier nur eine: Den Pfad LD_LIBRARY_PATH anpassen:

    shell> export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mysql/lib/mysql
    shell> ldd /usr/local/myodbc/lib/libmyodbc.so
    libmysqlclient.so.8 => /usr/local/mysql/lib/mysql/libmysqlclient.so.8 (0x4001e000)
    so.6 => /lib/libc.so.6 (0x40032000)
    so.1 => /lib/libnsl.so.1 (0x4012c000)
    libm.so.6 => /lib/libm.so.6 (0x40142000)
    libz.so.1 => /usr/lib/libz.so.1 (0x40160000)
    libcrypt.so.1 => /lib/libcrypt.so.1 (0x40170000)
    /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x2aaaa000)

Wenn unser anschließender ODBC-Test erfolgreich war, geht es nun weiter zu ColdFusion.

 

7. Einen MySQL-Account für ColdFusion einrichten

Sinnvollerweise sollte CF einen eigenen Account bei MySQL-Datenbanken benutzen. Den richten wir ein mit dem MySQL-Client (ähnlich wie beim User Dummy für den ODBC-Test). Nehmen wir an, der Username soll "cf45" heißen und das Passwort lautet "myCFPassword":

    shell> /usr/local/mysql/bin/mysql
    mysql> use mysql
     
    mysql> INSERT INTO user(host,user,password)
    VALUES(?myHostName?,?cf45?,password(?myCFPassword?);
     
    mysql> INSERT INTO db
    (host, db, user, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv)
    values ('myHostName', 'test', 'cf45', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');
     
    mysql> quit

    shell> /usr/local/mysql/bin/mysqladmin reload

Nun hat der User "cf45" mit dem Passwort "myCFPassword" Zugriff auf die Datenbank "test".

 

8. ColdFusion-ODBC.INI anpassen

Die Datei /opt/coldfusion/odbc/odbc.ini wird wie folgt angepaßt:

  • unter [ODBC Data Sources] fügen wir ein: test=MySQL
  • unter den Datasources fügen wir den gleichen Abschnitt [test] ein wie in der /usr/local/iodbc/etc/odbc.ini

Die Datei sollte also in etwa so aussehen:

# CF odbc.ini Anfang --------------------------------

[ODBC Data Sources]
   test=MySQL

[test]
   DSN        = test
   Driver     = /usr/local/myodbc/lib/libmyodbc.so
   Database   = test
   Server     = myHostName
   Port       = 3306

# CF odbc.ini Ende ----------------------------------

Damit die Änderungen wirksam werden, muß CF neu gestartet werden:

    shell> /opt/coldfusion/bin/stop
    shell> /opt/coldfusion/bin/start

 

9. Letzter Schritt: CF-Administrator

Nun sollte im ColdFusion-Administrator die ODBC-Datasource "test" zu sehen sein. Bei den Eigenschaften der Datasource noch Username und Passwort eintragen (im Beispiel: Username "cf45" und Passwort "myCFPassword") und anschließend die Datasource verifizieren.

Uff... geschafft! ;-)) Für weitere CF-MySQL-Datasources müssen nun nur noch die Berechtigungen in MySQL gesetzt werden, die CF-odbc.ini angepasst und im CF-Administrator Username und Passwort eingetragen werden (nach CF-Neustart, versteht sich).

Viel Spaß mit MySQL und CF Linux!



C. Schmitz chris@procept.net - 14.01.2000

Zurück


Das deutsche ColdFusion-Forum cfml.de ist das Portal für Einsteiger und Experten zum Thema ColdFusion und der ColdFusion Markup Language (CFML).

© 2017 Webdesign & Hosting: CHC ONLINE Kassel | SOLVA Content-Management-System CMS
Urlaub-Angebote.de - Urlaub mit Bestpreis-Garantie buchen