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:
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!).
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 configureWer 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! ;-)
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
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:
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:
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-TestJetzt 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! ;-)):
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:
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:
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":
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:
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:
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!