/dev/joschi

Ramblings, rants, and rabid speculations

Installation Von MySQL 5.0 Auf Einem 1&1 Homepage-Server

Disclaimer: Der Artikel wurde nach bestem Wissen und Gewissen geschrieben und überprüft. Ich übernehme jedoch keinerlei Haftung für Schäden, die durch Ausführung der in diesem Artikel aufgeführten Kommandos entstehen oder entstanden sind.

Derzeit ist auf den Homepage-Servern (sowie den Managed- und Exklusiv-Servern) von 1&1 noch MySQL 4.0 installiert. Für einige Anwendungen werden jedoch Features benötigt, welche erst mit MySQL 4.1 oder MySQL 5.0 eingeführt wurden, etwa Unterstützung für Unicode oder Store Procedures.

Es ist jedoch möglich einen eigenen MySQL-Server in der gewünschten Version innerhalb des Homeverzeichnisses auf dem System zu installieren. Dieser Artikel beschreibt die notwendigen Schritte.

Hinweis: Der Support des Providers umfasst keine selbst installierte MySQL-Version. Bei Problemen damit, ist man auf sich selbst gestellt.

Zur Installation des MySQL-Servers müssen wir diesen zunächst aus dem Quellcode kompilieren. Der Quellcode wird im Verzeichnis ~/executable/src/ gespeichert. MySQL wird unter ~/executable/mysql/ installiert.

mkdir ~/executable/src
cd ~/executable/src

Zu Anfang laden wir bei MySQL unter Source Downloads die Variante Compressed GNU TAR archive (tar.gz) des Quellarchivs herunter und entpacken es im Verzeichnis ~/executable/src/ auf dem Server.

wget http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.41.tar.gz/from/ftp:/ftp.gwdg.de/pub/misc/mysql/
tar -xzf mysql-5.0.41.tar.gz
cd mysql-5.0.41

Mit dem “Dreisatz” (configure && make && make install)können wir den Quellcode kompilieren und installieren. Wichtig sind dabei vor allem das Präfix sowie der geänderte Port für den MySQL-Server.

./configure --prefix=${HOME}/executable/mysql --with-tcp-port=13306 --without-docs --without-man --without-debug
make
make install

Nach der Ausführung von make install sollten die meisten Dateien schon unter ~/executable/mysql/ zu finden sein. Es fehlen uns noch ein temporäres Verzeichnis sowie ein Verzeichnis, in dem die Datenbanken und Tabellen gespeichert werden.

mkdir ~/executable/mysql/tmp ~/executable/mysql/datadir

Zur Erstellung der MySQL-Konfigurationsdatei my.cnf müssen wir zunächst den kompletten Pfad zu unserem Verzeichnis auf dem Server ermitteln. Das machen wir mit pwd, welches das aktuelle Arbeitsverzeichnis ausgibt. Es kommt eine Ausgabe ähnlich der folgenden:

u12345678:~/executable/mysql > pwd
/kunden/homepages/1/d123456789/htdocs/executable/mysql

Diesen Pfad müssen wir uns merken und die Einträge für die my.cnf entsprechend anpassen:

$ cat ~/executable/mysql/my.cnf
[client]
host=127.0.0.1
port=13306

[mysql]
host=127.0.0.1
port=13306

[mysqladmin]
host=127.0.0.1
port=13306

[mysqld]
bind-address=127.0.0.1
port=13306
socket=/kunden/homepages/1/d123456789/htdocs/executable/mysql/mysql.sock
basedir=/kunden/homepages/1/d123456789/htdocs/executable/mysql/
character-sets-dir=/kunden/homepages/1/d123456789/htdocs/executable/mysql/share/mysql/charsets/
datadir=/kunden/homepages/1/d123456789/htdocs/executable/mysql/datadir/
language=/kunden/homepages/1/d123456789/htdocs/executable/mysql/share/mysql/english/
tmpdir=/kunden/homepages/1/d123456789/htdocs/executable/mysql/tmp/
pid-file=/kunden/homepages/1/d123456789/htdocs/executable/mysql/mysql.pid
log-error=/kunden/homepages/1/d123456789/htdocs/executable/mysql/mysql.err

Damit die Konfigurationsdatei und andere Angaben, welche von den Standardeinstellungen abweichen, problemlos gefunden werden, erstellen wir uns eine Datei namens ~/.profile, in welcher die entsprechenden Umgebungsvariablen gesetzt werden.

$ cat ~/.profile
export PATH=${HOME}/executable/mysql/bin/:${PATH}
export MYSQL_HOME=${HOME}/executable/mysql/
export MYSQL_HOST=127.0.0.1
export MYSQL_PORT=13306
export TMPDIR=${HOME}/executable/mysql/tmp/

Für die aktuell geöffnete Shell führen wir diese dann auch sogleich aus.

source ~/.profile

Der nächste Schritt besteht darin, die MySQL-Datenbank zu initialisieren. Das erledigt das Programm mysql_install_db für uns.

~/executable/mysql/bin/mysql_install_db

Nachdem nun alle Installationsschritte erledigt wurden, können wir den MySQL-Server testweise starten.

~/executable/mysql/bin/mysqld_safe &

Das angehängte Ampersand sorgt dafür, dass der Prozess nicht das aktuelle Terminal blockiert, sondern im Hintergrund läuft. Nun sollte das Fehlerlog unter ~/executable/mysql/mysql.err auf Einträge überprüft werden. Idealerweise enthält es nur Meldungen über den Start des MySQL-Servers. Aber Vorsicht, der MySQL-Server wird jetzt beendet, sobald wir das Terminal schließen. Das wird später noch geändert, aber zum Testen reicht es aus.

Das Rootpasswort des MySQL-Servers ist nach der Installation noch leer und muss erst von uns gesetzt werden. Für den Benutzer root sollte ein möglichst sicheres Passwort gewählt werden, also nicht “Passwort”, “Gott” oder das eigene Geburtsdatum.

~/executable/mysql//bin/mysqladmin -u root password 'NeuesPasswort'

Das Passwort ist nun gesetzt. Nach der Eingabe des Kommandos mysql -uroot -p -e ‘SHOW STATUS;’ sollten wir eine Auflistung aller Laufzeitvariablen des MySQL-Servers erhalten. Die Datenbank ist also erreichbar.

Nun können wir ein kleines Testskript in PHP schreiben, das auf den Server zugreift. Zu beachten ist dabei, dass lediglich PHP 5 funktioniert, da die Version der MySQL-Client Bibliothek bei PHP 3 und 4 zu alt ist. Standardmäßig werden Dateien mit der Endung .php5 von dem PHP 5 Interpreter verarbeitet. Mit einem kleinen Eintrag in einer .htaccess Datei werden auch Dateien mit der Endung .php mit dem korrekten Interpreter verarbeitet. Eine Anleitung findet sich in dem FAQ-Artikel Wie kann ich .php Dateien als PHP5 parsen lassen?. Unser Testskript sieht folgendermaßen aus:

\n";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
        echo "\t\n";
        foreach ($line as $col_value) {
                echo "\t\t$col_value\n";
        }
        echo "\t\n";
}
echo "\n";

// Free resultset
mysql_free_result($result);

// Closing connection
mysql_close($link);
?>

Es zeigt uns alle Versionsinformationen unseres MySQL-Servers an und sollte wirklich nur zu Testzwecken dienen. Wichtig ist dabei, dass der Funktion mysql_connect die komplette URI zum MySQL-Server, also IP-Adresse und Port übergeben werden. Wenn das Skript funktioniert hat, können wir eine php.ini erstellen, in der die Angaben zum MySQL-Server gespeichert werden, so dass nicht immer der Port und die IP-Adresse angegeben werden müssen.

[MySQL]
mysql.default_host = "127.0.0.1"
mysql.default_port = "13306"
mysql.default_socket = /kunden/homepages/1/d123456789/htdocs/executable/mysql/mysql.sock

Der Pfad in mysql.default_socket muss natürlich entsprechend angepasst werden.

Der Testlauf unseres neuen MySQL-Servers ist damit erfolgreich beendet. Wir können den MySQL-Server mit folgendem Kommando herunterfahren:

kill `<~/executable/mysql/mysql.pid`

Damit der MySQL-Server nicht beendet wird, wenn wir das Terminalfenster schließen, bedienen wir uns des Programms nohup. Für die faulen Benutzer ;) schreiben wir zwei kleine Aliase in unsere ~/.profile Datei, welche den Start und Stop des mysqld vereinfachen. Die zuvor eingerichteten Umgebungsvariablen bleiben natürlich weiterhin in der Datei. Komplett sollte die Datei in etwa folgenden Inhalt haben:

export PATH=${HOME}/executable/mysql/bin/:${PATH}
export MYSQL_HOME=${HOME}/executable/mysql/
export MYSQL_HOST=127.0.0.1
export MYSQL_PORT=13306
export TMPDIR=${HOME}/executable/mysql/tmp/

function mysql_start() {
        /usr/bin/nohup ~/executable/mysql/bin/mysqld_safe &
}

function mysql_stop() {
        kill `<~/executable/mysql/mysql.pid`
}

Nachdem wir uns neu eingeloggt haben bzw. die Datei neu eingelesen haben (<em>source ~/.profile</em>), können wir den MySQL-Server mit dem Kommando mysql_start starten und mit mysql_stop wieder anhalten.

Comments