MySQL für Windows hat sich als sehr stabil erwiesen. Die Windows-Version von MySQL hat dieselben Merkmale wie die entsprechende Unix-Version. Es gibt jedoch folgende Ausnahmen:
Windows 95 und Threads
Pro erstelltem Thread verliert Windows 95 durch ein Speicherleck etwa 200 Byte Hauptspeicher. Jede Verbindung in MySQL erstellt einen neuen Thread, weswegen man mysqld nicht für längere Zeit unter Windows 95 ausführen sollte, wenn Ihr Server mehrere Verbindungen verwaltet! Neuere Windows-Versionen weisen diesen Bug nicht auf.
Eingeschränkte Anzahl von Ports
Windows-Systeme stellen für Clientverbindungen etwa 4000 Ports bereit. Wird eine Verbindung über einen Port beendet, dann dauert es zwei bis vier Minuten, bis der Port wieder verwendet werden kann. In Situationen, in denen Clients sehr schnell Verbindungen mit dem Server herstellen und diese wieder trennen, ist es unter Umständen möglich, dass alle verfügbaren Ports verbraucht sind, bevor bereits geschlossene Ports wieder verfügbar werden. In diesem Fall scheint der MySQL Server stehen geblieben zu sein, obwohl er tatsächlich nach wie vor ausgeführt wird. Beachten Sie, dass unter Umständen auch andere auf dem System laufenden Anwendungen Ports beanspruchen; in diesem Fall ist die Anzahl der für MySQL verfügbaren Ports noch geringer.
Weitere Informationen zu diesem Problem finden Sie unter http://support.microsoft.com/default.aspx?scid=kb;en-us;196271.
Gleichzeitige Leseoperationen
MySQL ist auf die Systemaufrufe pread()
und pwrite()
angewiesen, um
INSERT
und SELECT
miteinander kombinieren zu können. Zurzeit verwenden wir
Mutexe zur Emulation von pread()
und
pwrite()
. Wir beabsichtigen, diese
Schnittstelle auf Dateiebene in der Zukunft durch eine
virtuelle Schnittstelle zu ersetzen, damit wir die
Schnittstellen
readfile()
/writefile()
unter Windows NT, Windows 2000 und Windows XP verwenden
und so eine höhere Geschwindigkeit erzielen können. Die
aktuelle Implementierung beschränkt die Anzahl der von
MySQL 5.1 verwendbaren offenen Dateien auf
2048, d. h., Sie können unter Windows NT/2000/XP/Server
2003 nicht so viele gleichzeitige Threads ausführen wie
unter Unix.
Sperrleseoperationen
MySQL verwendet für jede Verbindung eine Sperrleseoperation. Dies hat die folgenden Auswirkungen, wenn Named-Pipe-Verbindungen aktiviert sind:
Eine Verbindung wird – anders als bei MySQL für Unix – nicht automatisch nach acht Stunden getrennt.
Hängt eine Verbindung, dann ist es nicht möglich, diese zu unterbrechen, ohne MySQL zu terminieren.
mysqladmin kill funktioniert bei hängenden Verbindungen nicht.
mysqladmin shutdown kann MySQL nicht herunterfahren, solange eine Verbindung hängt.
Wir beabsichtigen, dieses Problem in der Zukunft zu lösen.
ALTER TABLE
Während Sie eine ALTER TABLE
-Anweisung
ausführen, ist die betreffende Tabelle für die Benutzung
durch andere Threads gesperrt. Dies hängt mit der Tatsache
zusammen, dass Sie eine Datei unter Windows nicht löschen
können, solange sie von einem anderen Thread verwendet
wird. Wir hoffen, für dieses Problem in der Zukunft einen
Workaround zu finden.
DROP TABLE
Die Ausführung von DROP TABLE
für eine
Tabelle, die von einer MERGE
-Tabelle
verwendet wird, funktioniert unter Windows nicht, da der
MERGE
-Handler die Tabellenzuordnung vor
der übergeordneten Schicht von MySQL verborgen vornimmt. Da
Windows das Löschen geöffneter Dateien nicht gestattet,
müssen Sie zunächst alle MERGE
-Tabellen
(mit FLUSH TABLES
) neu laden oder die
MERGE
-Tabelle löschen, bevor Sie die
gewünschte Tabelle tatsächlich löschen können.
DATA DIRECTORY
und
INDEX DIRECTORY
Die Optionen DATA DIRECTORY
und
INDEX DIRECTORY
für CREATE
TABLE
werden unter Windows ignoriert, da Windows
keine symbolischen Verknüpfungen unterstützt. Außerdem
werden diese Optionen auf Systemen ignoriert, bei denen der
Aufruf realpath()
nicht funktioniert.
DROP DATABASE
Sie können eine Datenbank, die gerade von einem Thread verwendet wird, nicht löschen.
MySQL aus dem Task-Manager heraus terminieren
Unter Windows 95 können Sie MySQL nicht aus dem Task-Manager heraus oder mit dem Ausschalt-Utility terminieren. Sie müssen MySQL vielmehr mit dem Befehl mysqladmin shutdown beenden.
Irrelevante Groß-/Kleinschreibung bei Namen
Da die Groß-/Kleinschreibung bei Dateinamen unter Windows nicht unterschieden wird, ist auch die Schreibweise der Namen von MySQL-Datenbanken und -Tabellen unter Windows irrelevant. Die einzige Einschränkung besteht darin, dass die Datenbank- und Tabellennamen unter Verwendung derselben Schreibweise (Groß- oder Kleinschreibung) in einer gegebenen Anweisung festgelegt werden müssen. Siehe auch Abschnitt 9.2.2, „Groß-/Kleinschreibung in Namen“.
Das Pfadtrennzeichen
‘\
’
Unter Windows werden die Bestandteile von Pfaden durch das
Zeichen ‘\
’ voneinander
getrennt, welches gleichzeitig das Escape-Zeichen von MySQL
ist. Wenn Sie LOAD DATA INFILE
oder
SELECT ... INTO OUTFILE
verwenden,
verwenden Sie Dateinamen im Unix-Stil mit
‘/
’-Zeichen:
mysql>LOAD DATA INFILE 'C:/tmp/skr.txt' INTO TABLE skr;
mysql>SELECT * INTO OUTFILE 'C:/tmp/skr.txt' FROM skr;
Alternativ müssen Sie das Zeichen
‘\
’ doppelt verwenden:
mysql>LOAD DATA INFILE 'C:\\tmp\\skr.txt' INTO TABLE skr;
mysql>SELECT * INTO OUTFILE 'C:\\tmp\\skr.txt' FROM skr;
Probleme mit Pipes
An der Windows-Eingabeaufforderung funktionieren Pipes nicht
zuverlässig. Wenn eine Pipe das Zeichen
^Z
/CHAR(24)
enthält,
meint Windows ein Dateiende zu erkennen und bricht das
Programm ab.
Dies ist in erster Linie ein Problem, wenn Sie wie folgt eine binäre Logdatei anzuwenden versuchen:
C:\> mysqlbinlog binary_log_file
| mysql --user=root
Wenn Sie bei der Anwendung des Logs Probleme haben und das
Zeichen ^Z
/CHAR(24)
für die Ursache halten, dann können Sie den folgenden
Workaround verwenden:
C:\>mysqlbinlog
C:\>binary_log_file
--result-file=/tmp/bin.sqlmysql --user=root --execute "source /tmp/bin.sql"
Der untere Befehl kann auch verwendet werden, um zuverlässig in einer beliebigen SQL-Datei zu lesen, die unter Umständen Binärdateien enthält.
Fehler Access denied for
user
Wenn MySQL Ihren Hostnamen nicht korrekt auflösen kann, erhalten Sie unter Umständen folgende Fehlermeldung, sobald Sie versuchen, ein MySQL-Clientprogramm auszuführen, um eine Verbindung mit dem auf dem gleichen Computer laufenden Server herzustellen:
Access denied for user 'some_user
'@'unknown'
to database 'mysql'
Um dieses Problem zu beheben, sollten Sie eine Datei namens
\windows\hosts
erstellen, die die
folgenden Informationen enthält:
127.0.0.1 localhost
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.