In diesem Abschnitt werden einige Probleme in Zusammenhang mit MIT-pthreads angesprochen.
Unter Linux sollten Sie MIT-pthreads nicht verwenden. Benutzen Sie stattdessen die installierte LinuxThreads-Implementierung. Siehe auch Abschnitt 2.12.1, „Linux (alle Linux-Versionen)“.
Wenn Ihr System keine native Thread-Unterstützung bietet, sollten Sie MySQL mithilfe des MIT-pthreads-Pakets erstellen. Dies gilt für ältere FreeBSD-Systeme, SunOS 4.x, Solaris 2.4 und früher sowie einige andere. Siehe auch Abschnitt 2.1.1, „Betriebssysteme, die von MySQL unterstützt werden“.
MIT-pthreads ist nicht in der Quelldistribution von MySQL 5.1 enthalten. Wenn Sie dieses Paket benötigen, müssen Sie es unter http://dev.mysql.com/Downloads/Contrib/pthreads-1_60_beta6-mysql.tar.gz separat herunterladen.
Extrahieren Sie das Quellarchiv nach dem Download in das oberste
MySQL-Quellverzeichnis. Hierdurch wird ein neues
Unterverzeichnis namens mit-pthreads
erstellt.
Auf den meisten Systemen können Sie die Verwendung von
MIT-pthreads erzwingen, indem Sie
configure mit der Option
--with-mit-threads
ausführen:
shell> ./configure --with-mit-threads
Die Erstellung eines Nichtquellverzeichnisses wird bei der Verwendung von MIT-pthreads nicht unterstützt, da wir unsere Änderungen an diesem Code minimieren wollen.
Die Tests, mit denen ermittelt wird, ob MIT-pthreads
verwendet werden soll, finden nur während derjenigen Phase
des Konfigurationsvorgangs statt, in der der Servercode
bearbeitet wird. Haben Sie die Distribution mit der Option
--without-server
konfiguriert, um nur den
Clientcode zu erstellen, dann wissen die Clients nicht, ob
MIT-pthreads verwendet wird oder nicht; deswegen verwenden
sie standardmäßig die Unix-Socketdatei. Da
Unix-Socketdateien jedoch auf bestimmten Plattformen unter
MIT-pthreads nicht funktionieren, bedeutet dies, dass Sie
-h
oder --host
mit einem
anderen Wert als localhost
verwenden
müssen, wenn Sie Clientprogramme ausführen.
Wird MySQL mit MIT-pthreads kompiliert, dann wird die
Systemsperrung zum Zweck der Leistungsoptimierung
standardmäßig deaktiviert. Mit der Option
--external-locking
können Sie den Server
anweisen, die Systemsperre zu verwenden. Dies ist aber nur
erforderlich, wenn Sie zwei MySQL Server ausführen, die auf
die gleichen Datendateien zugreifen (hiervon sei aber
ohnehin abgeraten).
Manchmal schlägt beim pthread-Befehl
bind()
der Versuch fehl, eine Bindung an
den Server vorzunehmen – und dies, ohne dass (zumindest
bei Solaris) eine Fehlermeldung erzeugt wird. Nachfolgend
schlagen alle Verbindungen zu diesem Server fehl. Ein
Beispiel:
shell> mysqladmin version
mysqladmin: connect to server at '' failed;
error: 'Can't connect to mysql server on localhost (146)'
Die Lösung dieses Problems besteht in Terminierung und Neustart des Servers mysqld. Dies ist bei uns nur aufgetreten, wenn wir den Server zwangsweise beendet und unmittelbar darauf neu gestartet haben.
Bei MIT-pthreads ist der Systemaufruf
sleep()
nicht durch
SIGINT
(Pause) zu unterbrechen. Dies
macht sich nur bemerkbar, wenn Sie mysqladmin
--sleep ausführen. Sie müssen warten, bis der
Aufruf sleep()
abgeschlossen ist, bevor
der Interrupt bedient und der Prozess angehalten wird.
Beim Verknüpfen erhalten Sie (wiederum zumindest unter Solaris) unter Umständen Warnmeldungen wie die folgende, die Sie aber getrost ignorieren können:
ld: warning: symbol `_iob' has differing sizes: (file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4; file /usr/lib/libc.so value=0x140); /my/local/pthreads/lib/libpthread.a(findfp.o) definition taken ld: warning: symbol `__iob' has differing sizes: (file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4; file /usr/lib/libc.so value=0x140); /my/local/pthreads/lib/libpthread.a(findfp.o) definition taken
Bestimmte andere Warnungen können ebenfalls ignoriert werden:
implicit declaration of function `int strtoll(...)' implicit declaration of function `int strtoul(...)'
Wir haben es nicht geschafft, die Verwendung von
readline
mit MIT-pthreads zu
ermöglichen. (Das ist zwar auch nicht notwendig, mag für
manchen aber von Interesse sein.)
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.