6. Januar 2008

MySQL-Datenbank-Zugriff in Perl mit MAMP

Ich verwende MAMP für meine lokalen MySQL-Datenbanken. Mit PHP funktioniert der Datenbank-Zugriff tadellos.

Jetzt mußte ich einige Perl-Skripte mit MySQL-Zugriff nutzen.
Schon die Modul-Installation der Perl-Module DBI und besonders DBD::mysql lief einfach nicht.

Nach einigen Recherchen habe ich es doch geschafft. Hier steht wie (Kommentare willkommen - ALLES OHNE GEWÄHR UND MIT VORSICHT VERWENDEN!!)

Verwendete Plattform: Intel, Mac OS X Tiger, MAMP 1.4.1, MySQL 5.0.

(1)
Download MySQL 5 for OS X von mysql.com.
Den Installer ausführen, der alles in /usr/local/mysql-5.0.45-osx10.4-i686 installiert.
Außerdem gibt es einen symb. Link /usr/local/mysql zu obigen Verzeichnis.

(2)
Nun in der MAMP-Installation das MySQL-include- und -lib-Verzeichnis "anhängen" bzw. ersetzen:
sudo su

mkdir /Applications/MAMP/Library/include

ln -s /usr/local/mysql/include/ /Applications/MAMP/Library/include/mysql

mv /Applications/MAMP/Library/lib/mysql /Applications/MAMP/Library/lib/mysql_orig

ln -s /usr/local/mysql/lib /Applications/MAMP/Library/lib/mysql

(3)
In der MySQL-Installation stehen die dyn. Bibliotheken in /usr/local/mysql/lib. Jedoch werden sie vom Modul-Installer in /usr/local/mysql/lib/mysql erwartet. Also folgende "Quick 'n Dirty"-Abhilfe:
sudo su

mkdir /usr/local/mysql/lib/mysql

cp /usr/local/mysql/lib/lib* /usr/local/mysql/lib/mysql

(4)
PATH muss um /Applications/MAMP/Library/bin erweitert werden, um den Zugriff auf mysql_config zu ermöglichen:
export PATH="/Applications/MAMP/Library/bin:$PATH"

(5)
Nun die Perl-Module installieren:
sudo perl -MCPAN -e shell

install DBI

force install DBD::mysql

quit

(6)
Jetzt sollte alles klappen; die DB-Verbindung in Perl erfolgt so:
use strict;

use utf8; # Quelltext in UTF-8 speichern

use DBI;

use Encode;

binmode(STDOUT, ":utf8"); # Ausgaben in UTF-8

my $dsn = "DBI:mysql:database=DB_NAME;host=localhost;" .
"mysql_socket=/Applications/MAMP/tmp/mysql/mysql.sock;port=8889";

my $dbh = DBI->connect($dsn, "root", "root");

$dbh->do("SET NAMES 'utf8'");
Abgerufene Daten aus MySQL müssen via
decode("utf8", $feld);
in Unicode konvertiert werden.

Wenn es jemand besser weiß: Bitte Kommentare - danke!