Kapitel 2. Installation von MySQL
Zurück |  | Weiter

## Kapitel 2. Installation von MySQL

Dieses Kapitel beschreibt, wie Sie sich MySQL beschaffen und installieren. Zunächst folgt eine Zusammenfassung der Vorgehensweise; die Details werden dann im weiteren Verlauf beschrieben. Wenn Sie MySQL nicht zum ersten Mal installieren, sondern eine vorhandene MySQL-Version auf eine neuere Version aktualisieren wollen, dann finden Sie weitere Informationen zur Vorgehensweise und zu Gesichtspunkten, die vor dem Upgrade beachtet werden müssen, in Abschnitt 2.10, „MySQL aktualisieren (Upgrade/Downgrade)“.

1. Ermitteln Sie, ob Ihre Plattform unterstützt wird. Bitte beachten Sie, dass nicht alle unterstützten Systeme gleichermaßen zur Ausführung von MySQL geeignet sind. Auf manchen Plattformen arbeitet MySQL robuster und effizienter als auf anderen. Weitere Informationen finden Sie in Abschnitt 2.1.1, „Betriebssysteme, die von MySQL unterstützt werden“.

2. Wählen Sie die zu installierende Distribution. Es sind verschiedene MySQL-Versionen verfügbar, die meisten davon in unterschiedlichen Distributionsformaten. Sie können zwischen fertig gepackten Distributionen mit binären (vorkompilierten) Programmen und dem Quellcode wählen. Entscheiden Sie sich im Zweifelsfall für eine binäre Distribution. Für Benutzer, die unsere aktuellsten Entwicklungen sehen und uns beim Testen des neuesten Codes helfen wollen, bieten wir auch einen öffentlichen Zugang zum aktuellen Source-Tree. Wie Sie bestimmen, welche Version und welchen Distributionstyp Sie verwenden sollten, erfahren Sie in Abschnitt 2.1.2, „Welche MySQL-Version Sie benutzen sollten“.

3. Laden Sie die Distribution herunter, die Sie installieren wollen. Informationen zur Vorgehensweise finden Sie in Abschnitt 2.1.3, „Woher man MySQL bekommt“. Um die Integrität der Distribution zu überprüfen, gehen Sie vor wie in Abschnitt 2.1.4, „Bestätigen der Paketintegrität mittels MD5-Prüfsummen oder `GnuPG`“, beschrieben.

4. Installieren Sie die Distribution. Um MySQL aus einer binären Distribution zu installieren, gehen Sie vor wie in Abschnitt 2.2, „Schnelle Standardinstallation von MySQL“, beschrieben. Wenn Sie MySQL hingegen aus einer Quelldistribution oder aus dem aktuellen Entwicklungs-Source-Tree installieren, gehen Sie vor wie in Abschnitt 2.8, „Installation der Quelldistribution“, beschrieben.

   Wenn Sie bei der Installation Probleme haben, finden Sie plattformspezifische Hinweise zu deren Beseitigung in Abschnitt 2.12, „Betriebssystemspezifische Anmerkungen“.

5. Führen Sie die nach der Installation erforderlichen Konfigurationsarbeiten durch. Lesen Sie nach der Installation von MySQL Abschnitt 2.9, „Einstellungen und Tests nach der Installation“. Dieser Abschnitt enthält wichtige Informationen dazu, wie Sie den einwandfreien Betrieb des MySQL Servers sicherstellen. Ferner ist dort beschrieben, wie Sie die bei der Installation erstellten MySQL-Benutzerkonten, die anfangs keine Passwörter aufweisen, bis zur Konfiguration von Passwörtern sichern. Die in diesem Abschnitt enthaltenen Informationen gelten unabhängig davon, ob Sie MySQL mithilfe einer Binär- oder einer Quelldistribution installieren.

6. Wenn Sie die MySQL-Benchmark-Skripten ausführen wollen, muss der Perl-Support für MySQL eingerichtet sein. Siehe auch Abschnitt 2.13, „Anmerkungen zur Perl-Installation“.

## 2.1. Allgemeines zur Installation

Vor der Installation von MySQL müssen Sie Folgendes tun:

1. Ermitteln Sie, ob MySQL auf Ihrer Plattform läuft.

2. Wählen Sie die zu installierende Distribution aus.

3. Laden Sie die Distribution herunter und überprüfen Sie die Integrität.

Dieser Abschnitt enthält Informationen, die für die Ausführung dieser Schritte erforderlich sind. Danach können Sie die Anweisungen in den nachfolgenden Abschnitten des Kapitels zur Installation der von Ihnen gewählten Distribution verwenden.

### 2.1.1. Betriebssysteme, die von MySQL unterstützt werden

Dieser Abschnitt listet die Betriebssysteme auf, auf denen MySQL ausgeführt können werden sollte.

Wir verwenden GNU Autoconf, weswegen eine Portierung von MySQL auf alle modernen Systeme möglich ist, die einen C++-Compiler und eine funktionsfähige Implementierung von POSIX-Threads enthalten. (Die Thread-Unterstützung wird für den Server benötigt. Wenn Sie nur den Clientcode kompilieren wollen, benötigen Sie lediglich den C++-Compiler.) Wir selbst verwenden und entwickeln die Software in erster Linie auf Systemen unter Linux (SuSE und Red Hat), FreeBSD und Sun Solaris (Versionen 8 und 9).

Berichten zufolge lässt sich MySQL erfolgreich auf den nachfolgend aufgeführten Kombinationen aus Betriebssystem und Thread-Paket kompilieren. Beachten Sie, dass die native Thread-Unterstützung bei vielen Betriebssystemen nur in den jeweils aktuellsten Versionen funktioniert.

- AIX 4.x, 5.x mit nativen Threads. Siehe auch Abschnitt 2.12.5.3, „Anmerkungen zu IBM-AIX“.

- Amiga.

- BSDI 2.x mit dem MIT-pthreads-Paket. Siehe auch Abschnitt 2.12.4.4, „Anmerkungen zu BSD/OS“.

- BSDI 3.0, 3.1 und 4.x mit nativen Threads. Siehe auch Abschnitt 2.12.4.4, „Anmerkungen zu BSD/OS“.

- Digital Unix 4.x mit nativen Threads. Siehe auch Abschnitt 2.12.5.5, „Anmerkungen zu Alpha-DEC-UNIX (Tru64)“.

- FreeBSD 2.x mit dem MIT-pthreads-Paket. Siehe auch Abschnitt 2.12.4.1, „Anmerkungen zu FreeBSD“.

- FreeBSD 3.x und 4.x mit nativen Threads. Siehe auch Abschnitt 2.12.4.1, „Anmerkungen zu FreeBSD“.

- FreeBSD 4.x mit LinuxThreads. Siehe auch Abschnitt 2.12.4.1, „Anmerkungen zu FreeBSD“.

- HP-UX 10.20 mit den DCE-Threads oder dem MIT-pthreads-Paket. Siehe auch Abschnitt 2.12.5.1, „Anmerkungen zu HP-UX Version 10.20“.

- HP-UX 11.x mit den nativen Threads. Siehe auch Abschnitt 2.12.5.2, „Anmerkungen zu HP-UX Version 11.x“.

- Linux 2.0+ mit LinuxThreads 0.7.1+ oder `glibc` 2.0.7+ für verschiedene CPU-Architekturen. Siehe auch Abschnitt 2.12.1, „Linux (alle Linux-Versionen)“.

- Mac OS X. Siehe auch Abschnitt 2.12.2, „Anmerkungen zu Mac OS X“.

- NetBSD 1.3/1.4 Intel und NetBSD 1.3 Alpha (erfordert GNU make). Siehe auch Abschnitt 2.12.4.2, „Anmerkungen zu NetBSD“.

- Novell NetWare 6.0 und 6.5. Siehe auch Abschnitt 2.6, „Installation von MySQL unter NetWare“.

- OpenBSD 2.5 mit nativen Threads. OpenBSD vor Version 2.5.x mit dem MIT-pthreads-Paket. Siehe auch Abschnitt 2.12.4.3, „Anmerkungen zu OpenBSD“.

- OS/2 Warp 3, FixPack 29, und OS/2 Warp 4, FixPack 4. Siehe auch Abschnitt 2.12.6, „Anmerkungen zu OS/2“.

- SCO OpenServer 5.0.X mit einer aktuellen Portierung des FSU-Pthreads-Pakets. Siehe auch Abschnitt 2.12.5.8, „Anmerkungen zu SCO UNIX und OpenServer 5.0.x“.

- SCO OpenServer 6.0.x. Siehe auch Abschnitt 2.12.5.9, „Anmerkungen zu SCO OpenServer 6.0.x“.

- SCO UnixWare 7.1.x. Siehe auch Abschnitt 2.12.5.10, „Anmerkungen zu SCO UnixWare 7.1.x und OpenUNIX 8.0.0“.

- SGI Irix 6.x mit nativen Threads. Siehe auch Abschnitt 2.12.5.7, „Anmerkungen zu SGI Irix“.

- Solaris 2.5 und höher mit nativen Threads auf SPARC und x86. Siehe auch Abschnitt 2.12.3, „Anmerkungen zu Solaris“.

- SunOS 4.x mit dem MIT-pthreads-Paket. Siehe auch Abschnitt 2.12.3, „Anmerkungen zu Solaris“.

- Tru64 Unix. Siehe auch Abschnitt 2.12.5.5, „Anmerkungen zu Alpha-DEC-UNIX (Tru64)“.

- Windows 9x, Me, NT, 2000, XP und Windows Server 2003. Siehe auch Abschnitt 2.3, „Installation von MySQL unter Windows“.

Nicht alle Plattformen sind für die Ausführung von MySQL gleichermaßen geeignet. Die Eignung einer Plattform für einen unternehmenskritischen, stark beanspruchten MySQL Server wird von den folgenden Faktoren bestimmt:

- Allgemeine Stabilität der Thread-Bibliothek. Auch auf Plattformen, die ansonsten einen exzellenten Ruf genießen, ist MySQL nur so stabil wie die aufgerufene Thread-Bibliothek – und zwar auch dann, wenn alles andere perfekt ist.

- Die Funktionalität des Kernels und der Thread-Bibliothek bezüglich der optimalen Nutzung von SMP-Systemen (symmetrischen Multiprozessorsystemen). Mit anderen Worten: Wenn ein Prozess einen Thread erstellt, sollte dieser auf einem anderen Prozessor laufen können als der ursprüngliche Prozess.

- Die Fähigkeit von Kernel und Thread-Bibliothek, mehrere Threads auszuführen, die häufig ein Mutex für einen kurzen kritischen Bereich ohne umfassende Kontextschalter setzen, und aufzuheben. Wenn die Implementierung von `pthread_mutex_lock()` zu zurückhaltend bei der Bereitstellung von Prozessorzeit ist, wird MySQL hierdurch empfindlich gestört. Wird dieser Aspekt nicht berücksichtigt, dann macht das Ergänzen zusätzlicher Prozessoren MySQL tatsächlich langsamer.

- Allgemeine Stabilität und Leistungsfähigkeit des Dateisystems.

- Wenn Ihre Tabellen sehr groß werden, steht und fällt die Leistung mit der Fähigkeit des Dateisystems, mit großen Dateien nicht nur überhaupt, sondern sogar effizient umgehen zu können.

- Unser eigenes Fachwissen hier bei MySQL AB bezüglich des jeweiligen Betriebssystems. Kennen wir eine Plattform gut, dann können wir plattformspezifische Optimierungen und Fehlerbehebungen bei der Kompilierung aktivieren. Außerdem können wir Informationen zur optimalen Konfiguration Ihres Systems für MySQL vermitteln.

- Der Umfang der Tests, die wir intern für ähnliche Konfigurationen durchgeführt haben.

- Die Anzahl der Benutzer, die MySQL erfolgreich auf Plattformen mit ähnlichen Konfigurationen verwenden. Ist diese Zahl groß, dann ist die Wahrscheinlichkeit plattformspezifischer Überraschungen eher gering.

Basierend auf diesen Kriterien sind die derzeit am besten für die Ausführung von MySQL geeigneten Plattformen x86 mit SuSE Linux (Kernel 2.4 oder 2.6) und ReiserFS (oder jede ähnliche Linux-Distribution) und SPARC mit Solaris (2.7 bis 2.9). An dritter Stelle kommt FreeBSD; wir hoffen aber, es in den Kreis der Favoriten aufnehmen zu können, sobald die Thread-Bibliothek optimiert wurde. Außerdem sind wir natürlich zuversichtlich, irgendwann alle anderen Plattformen, auf denen MySQL derzeit kompiliert und ausgeführt werden kann, aber noch nicht mit derselben hohen Stabilität und Leistungsfähigkeit läuft, in diese Runde aufnehmen zu können. Dies erfordert einigen Aufwand unsererseits in Zusammenarbeit mit den Entwicklern der Betriebssysteme und Bibliothekskomponenten, auf die MySQL angewiesen ist. Wenn Sie an der Optimierung einer dieser Komponenten interessiert sind, Einfluss auf deren Entwicklung ausüben können und detailliertere Angaben dazu benötigen, was MySQL für eine bessere Ausführung benötigt, dann senden Sie eine E-Mail an die MySQL-Mailingliste `internals`. Siehe auch Abschnitt 1.7.1, „Die MySQL-Mailinglisten“.

Bitte beachten Sie, dass es nicht Zweck des obigen Vergleichs ist, festzustellen, dass ein Betriebssystem generell besser oder schlechter ist als ein anderes. Die Rede ist hier ausschließlich von der Auswahl eines Betriebssystems für den ganz speziellen Zweck, MySQL auszuführen. Wenn man andere Schwerpunkte setzen würde, würde das Ergebnis des Vergleichs sicher auch anders ausfallen. In bestimmten Fällen besteht der Grund dafür, dass ein Betriebssystem für die Ausführung von MySQL besser geeignet ist als ein anderes, schlicht und einfach darin, dass wir mehr Aufwand in Tests und Optimierung einer bestimmten Plattform gesteckt haben. Wir geben hier unsere Beobachtungen wieder, um Ihnen bei der Entscheidung zu helfen, eine geeignete Plattform für MySQL auszuwählen.

### 2.1.2. Welche MySQL-Version Sie benutzen sollten

Wenn Sie die Installation von MySQL vorbereiten, sollten Sie entscheiden, welche Version Sie benutzen. Die Entwicklung von MySQL erfolgt in mehreren Release-Serien, von denen Sie sich die für Ihre Zwecke geeignetste auswählen können. Wenn Sie sich für eine Version entschieden haben, können Sie ein Distributionsformat auswählen. Releases sind im Binär- und im Quellformat verfügbar.

#### 2.1.2.1. Auswahl der bestgeeigneten Version von MySQL

Die erste zu treffende Entscheidung ist die, ob Sie einen (stabilen) Produktions-Release oder aber einen Entwicklungs-Release verwenden wollen. Im MySQL-Entwicklungsprozess koexistieren mehrere Release-Serien miteinander, die sich alle durch ihren Grad der Ausgereiftheit voneinander unterscheiden:

- MySQL 5.1 ist die nächste Entwicklungs-Release-Serie. In ihr werden neue Funktionen implementiert. Alpha-Releases sind derzeit verfügbar und erlauben umfassende Tests durch interessierte Benutzer.

- MySQL 5.0 ist die aktuelle Release-Serie für Produktionsumgebungen. Neue Releases erscheinen nur bei Vorhandensein von Bugfixes; neue Funktionalitäten werden nicht ergänzt, da sie die Stabilität beeinträchtigen könnten.

- MySQL 4.1 ist die vorherige Release-Serie für Produktionsumgebungen. Neue Releases erscheinen hier, wenn kritische Bugs und Sicherheitslücken behoben werden. Bei dieser Serie werden keine wesentlichen neuen Funktionen mehr hinzugefügt.

- MySQL 4.0 und 3.23 sind die alten stabilen Release-Serien für Produktionsumgebungen. Diese Versionen sind nun stillgelegt, d. h., neue Releases erscheinen nur, wenn extrem kritische, vorzugsweise sicherheitsrelevante Bugs behoben werden.

Wir halten ein endgültiges Einfrieren von Codes nicht für machbar, da dies Bugfixes und andere Fehlerbereinigungen, die erforderlich sind, unmöglich machen würde. Das von uns bevorzugte „Teileinfrieren“ erlaubt uns das Ergänzen von Kleinigkeiten, die sich nicht auf die Einsatzfähigkeit eines Produktions-Releases auswirken sollten. Natürlich pflanzen sich wesentliche Bugfixes in früheren Serien auch auf ihre jeweiligen Nachfolger fort.

Wenn Sie MySQL zum ersten Mal verwenden oder es auf ein System portieren wollen, für das keine binäre Distribution verfügbar ist, empfehlen wir Ihnen normalerweise, die Produktions-Release-Serie zu verwenden. Derzeit ist dies MySQL 5.0. Alle MySQL-Releases – auch die der Entwicklungsserie – werden vor der Veröffentlichung mit den MySQL-Benchmarks und der umfangreichen Testsuite überprüft.

Wenn Sie ein älteres System verwenden und ein Upgrade durchzuführen beabsichtigen, gleichzeitig aber verhindern wollen, dass es während der Aktualisierung zu Problemen kommt, dann sollten Sie auf die aktuelle Version derselben Release-Serie aktualisieren, die Sie bereits verwenden (hierbei ist nur der letzte Teil der Versionsnummer höher als bei der von Ihnen verwendeten Version). Wir haben lediglich versucht, kritische Bugs zu beheben und kleine, relativ „sichere“ Änderungen an dieser Version vorzunehmen.

Wenn Sie neue Funktionen verwenden wollen, die nicht in der Produktions-Release-Serie vorhanden sind, können Sie sich auch für eine Version aus der Entwicklungsserie entscheiden. Beachten Sie, dass die Entwicklungs-Releases nicht so stabil sind wie die Produktions-Releases.

Wollen Sie die allerneuesten Quellcodes mit allen aktuellen Patches und Bugfixes einsetzen, dann können Sie eines unserer BitKeeper-Repositorys verwenden. Dies sind nicht „Releases“ im eigentlichen Sinne, sondern Vorabversionen des Codes, auf dem zukünftige Releases basieren werden.

Das MySQL-Benennungsschema verwendet Release-Namen, die aus drei Zahlen und einem Suffix bestehen. Dies kann etwa so aussehen: mysql-5.0.12-beta. Die Zahlen im Release-Namen sind wie folgt zu interpretieren:

- Die erste Zahl (5) ist die Hauptversion und beschreibt das Dateiformat. Alle MySQL 5-Releases haben das gleiche Dateiformat.

- Die zweite Zahl (0) ist der Release-Level. Zusammengefasst bilden Hauptversion und Release-Level die Nummer der Release-Serie.

- Die dritte Zahl (12) ist die Versionsnummer innerhalb der Release-Serie. Diese wird bei jedem neuen Release um den Wert 1 erhöht. In der Regel sollten Sie immer die neueste Version in der von Ihnen gewählten Serie verwenden.

Bei kleineren Updates wird jeweils die letzte Zahl im Versions-String hochgezählt. Liegen wesentliche Neuerungen bei den Merkmalen oder kleinere Inkompatibilitäten mit vorherigen Versionen vor, dann wird die zweite Zahl im Versions-String hochgezählt. Ändert sich schließlich das Dateiformat, dann wird die erste Zahl erhöht.

Release-Namen enthalten auch ein Suffix, welches die Stabilitätsstufe für den Release angibt. Releases innerhalb einer Serie durchschritten eine bestimmte Abfolge von Suffixen, die jeweils anzeigen, wie sich die Stabilität erhöht. Mögliche Suffixe sind die folgenden:

- alpha zeigt an, dass der Release neue Funktionen enthält, die noch nicht umfassend getestet wurden. Bekannte Bugs sollten im Abschnitt „News“ dokumentiert sein. Siehe auch Anhang D, MySQL-Änderungsverlauf (Change History). Die meisten Alpha-Releases implementieren neue Befehle und Erweiterungen. Die aktive Entwicklung, die auch umfassende Änderungen am Code beinhalten kann, erfolgt in der Alphaphase. Allerdings werden vor der Veröffentlichung eines Releases Tests durchgeführt.

- beta bedeutet, dass der Release funktionsseitig abgeschlossen ist und der gesamte neue Code getestet wurde. Es werden keine wesentlichen neuen Funktionen und Merkmale mehr hinzugefügt. Es sollten auch keine kritischen Bugs mehr vorhanden sein. Eine Version wechselt vom Alpha- in den Betastatus, wenn mindestens einen Monat lang keine schweren Bugs mehr für die Alphaversion gemeldet wurden und wir nicht beabsichtigen, neue Merkmale hinzuzufügen, die die Zuverlässigkeit der zuvor implementierten Funktionen beeinträchtigen könnten.

  Bei zukünftigen Beta-, Release-Candidate- oder Produktions-Releases erfolgen keine Änderungen mehr an APIs, extern sichtbaren Strukturen und Spalten für SQL-Anweisungen.

- rc ist ein Release-Candidate, d. h. eine Betaversion, die bereits seit einiger Zeit verfügbar ist und offensichtlich stabil arbeitet. Es werden nur noch kleinere Fehlerkorrekturen vorgenommen (deswegen entspricht der Release-Candidate auch dem, was man früher als Gamma-Release bezeichnete).

- Ist kein Suffix vorhanden, dann bedeutet dies, dass die Version bereits seit einiger Zeit an vielen verschiedenen Standorten läuft, ohne dass kritische nachvollziehbare Bugs gemeldet wurden (Ausnahme: plattformspezifische Bugs). Bei solchen Releases werden nur kritische Bugfixes implementiert. Eine solche Version nennen wir Produktions-Release (stabilen Release) oder auch „GA-Release“ (General Availability, allgemeine Verfügbarkeit).

MySQL verwendet ein Benennungsschema, welches sich geringfügig von dem anderer Produkte unterscheidet. In der Regel können Sie problemlos jede Version einsetzen, die bereits seit ein paar Wochen verfügbar ist, ohne durch eine neue Version innerhalb derselben Release-Serie ersetzt worden zu sein.

Alle MySQL-Releases werden mit unseren Standardtests und Benchmarks überprüft, damit gewährleistet ist, dass ihr Einsatz relativ sicher ist. Da die Standardtests im Laufe der Zeit so erweitert werden, dass alle zuvor gefundenen Bugs berücksichtigt werden, wird unsere Testsuite immer besser.

Alle Releases wurden zumindest mit den folgenden Tools getestet:

- Einer internen Testsuite.

  Das Verzeichnis `mysql-test` enthält ein umfangreiches Set mit Testfällen. Wir führen diese Tests an praktisch jeder Serverbinärdatei durch. Weitere Informationen zur Testsuite finden Sie in Abschnitt 26.1.2, „MySQL-Testsystem“.

- MySQL-Benchmarks.

  Diese Reihe führt eine Anzahl gängiger Abfragen aus. Ferner ermöglicht sie zu bestimmen, ob der letzte Optimierungsstapel den Code tatsächlich beschleunigt hat. Siehe auch Abschnitt 7.1.4, „Die MySQL-Benchmark-Reihe“.

- `Crash-Me`-Test.

  Dieser Test versucht zu ermitteln, welche Funktionen die Datenbank unterstützt und welche Fähigkeiten und Einschränkungen vorhanden sind. Siehe auch Abschnitt 7.1.4, „Die MySQL-Benchmark-Reihe“.

Wir testen außerdem die neueste MySQL-Version immer auf zumindest einem System in unserer internen Produktionsumgebung. Dabei stehen uns mehr als 100 Gbyte Daten zum Arbeiten zur Verfügung.

#### 2.1.2.2. Auswahl eines Distributionsformats

Nachdem Sie die zu installierende MySQL-Version gewählt haben, müssen Sie noch festlegen, ob eine binäre oder eine Quelldistribution für die Installation verwendet werden soll. In den meisten Fällen werden Sie sich wahrscheinlich für die Binärdistribution entscheiden, sofern es für Ihre Plattform eine solche gibt. Binärdistributionen sind für viele Plattformen im nativen Format verfügbar, z. B. RPM-Dateien für Linux oder DMG-Pakete für Mac OS X. Distributionen sind außerdem als ZIP-Archive oder komprimierte tar-Dateien erhältlich.

Die folgenden Gründe sprechen für die Verwendung einer Binärdistribution:

- Binärdistributionen sind in der Regel einfacher zu installieren als Quelldistributionen.

- Um unterschiedliche Benutzeranforderungen zu erfüllen, bieten wir zwei verschiedene Binärversionen an: eine kompilierte Fassung mit der Kernfunktionalität und eine weitere (MySQL-Max) mit einem erweiterten Feature-Set. Beide Versionen werden aus derselben Quelldistribution kompiliert. Alle nativen MySQL-Clients können mit Servern aus beiden MySQL-Versionen Verbindungen herstellen.

  Die erweiterte MySQL-Binärdistribution ist am Suffix `-max` zu erkennen und mit den gleichen Optionen konfiguriert wie mysqld-max. Siehe auch Abschnitt 5.3, „mysqld-max, ein erweiterter mysqld-Server“.

  Wenn Sie bei RPM-Distributionen die RPM-Datei `MySQL-Max` verwenden wollen, müssen Sie zuerst das Standard-RPM `MySQL-server` installieren.

Unter bestimmten Umständen kann es auch von Vorteil sein, MySQL aus einer Quelldistribution heraus zu installieren:

- Sie wollen MySQL an einer expliziten Position installieren. Die Standardbinärdistributionen lassen sich an jeder Installationsposition ausführen, aber unter Umständen benötigen Sie noch mehr Flexibilität, um MySQL-Komponenten an jeder beliebigen Stelle abzulegen.

- Sie wollen mysqld konfigurieren, um sicherzustellen, dass Funktionen, die unter Umständen nicht in den Standardbinärdistributionen enthalten sind, in jedem Fall vorhanden sind. Es folgt eine Liste der meistbenötigten Zusatzoptionen, die Sie verwenden können, um die Verfügbarkeit von Funktionen zu gewährleisten:

  - `--with-innodb`

  - `--with-berkeley-db` (nicht auf allen Plattformen verfügbar)

  - `--with-libwrap`

  - `--with-named-z-libs` (erfolgt für einige der Binärdistributionen)

  - `--with-debug[=full]`

- Sie wollen mysqld ohne bestimmte Funktionen konfigurieren, die in den Standardbinärdistributionen enthalten sind. So werden Distributionen beispielsweise mit der Unterstützung für alle Zeichensätze kompiliert. Wenn Sie einen kleineren MySQL Server wünschen, können Sie diesen so kompilieren, dass nur die erforderlichen Zeichensätze unterstützt werden.

- Sie haben einen speziellen Compiler (z. B. `pgcc`) oder wollen Compiler-Optionen nutzen, die für Ihren Prozessor besser optimiert sind. Binärdistributionen werden mit Optionen kompiliert, die auf einer Vielzahl von Prozessoren derselben Prozessorfamilie funktionieren sollten.

- Sie wollen die aktuellsten Quelltexte aus einem der BitKeeper-Repositorys verwenden, um Zugang zu allen aktuellen Bugfixes zu haben. Wenn Sie beispielsweise einen Bug gefunden und diesen dem MySQL-Entwicklerteam gemeldet haben, dann wird der Bugfix in das Quellcode-Repository geschrieben, und Sie können dann dort darauf zugreifen. Der Bugfix erscheint in einem Release erst, wenn dieser tatsächlich veröffentlicht wird.

- Sie wollen den C- oder C++-Code lesen (oder ändern), aus dem MySQL besteht. Zu diesem Zweck sollten Sie sich eine Quelldistribution besorgen, denn der Quellcode ist immer das ultimative Handbuch.

- Quelldistributionen enthalten mehr Tests und Beispiele als Binärdistributionen.

#### 2.1.2.3. Wann und wie Updates veröffentlicht werden

MySQL entwickelt sich ziemlich schnell, und neue Entwicklungen wollen wir anderen MySQL-Benutzern möglichst umgehend bereitstellen. Deswegen erstellen wir immer dann einen neuen Release, wenn wir neue und nützliche Funktionen integriert haben, die auch für andere Benutzer nützlich oder notwendig sein könnten.

Außerdem versuchen wir Benutzern zu helfen, die nach Funktionen fragen, welche leicht zu implementieren sind. Wir achten darauf, was unsere lizenzierten Benutzer – und insbesondere die Kunden unseres Supports – wollen, und versuchen ihnen in dieser Hinsicht zu helfen.

Niemand ist gezwungen, einen neuen Release herunterzuladen. Der Abschnitt „News“ soll Ihnen dabei helfen zu ermitteln, ob im neuen Release etwas dabei ist, was Sie wirklich brauchen. Siehe auch Anhang D, MySQL-Änderungsverlauf (Change History).

Bei der Aktualisierung von MySQL halten wir uns an die folgenden Richtlinien:

- Releases werden innerhalb jeder Serie veröffentlicht. Bei jedem Release ist die letzte Zahl in der Versionsnummer um 1 höher als beim vorherigen Release in der Serie.

- Stabile Produktions-Releases erscheinen in der Regel ein- bis zweimal jährlich. Werden jedoch kleine Bugs gefunden, dann wird ein Release nur mit Bugfixes veröffentlicht.

- Arbeits-Releases und Bugfixes für ältere Releases erscheinen normalerweise alle vier bis acht Wochen.

- Binärdistributionen für bestimmte Plattformen werden von uns für Haupt-Releases erstellt. Binärdistributionen für andere Systeme werden von Dritten angefertigt, dies aber wahrscheinlich weniger häufig.

- Bugfixes werden bereitgestellt, sobald kleine oder unkritische, aber ärgerliche Bugs erkannt und korrigiert wurden. Dieses Fixes sind in den BitKeeper-Repositorys sofort verfügbar und außerdem Bestandteil des nächsten Releases.

- Wird durch Zufall ein schwerwiegender Bug in einem Release gefunden, dann ist es unser Grundsatz, diesen in einem neuen Release schnellstmöglich zu beheben. (Wir wünschten uns, andere Unternehmen würden das auch so handhaben!)

#### 2.1.2.4. Release-Philosophie: keine bekannten Bugs in Releases

Wir verwenden viel Zeit und Mühe darauf, unsere Releases fehlerfrei zu machen. Bislang haben wir nicht eine einzige MySQL-Version veröffentlicht, die einen bekannten nachvollziehbaren schweren Bug aufwies (ein „schwerer“ Bug ist ein Umstand, der dazu führt, dass MySQL bei normaler Verwendung abstürzt, falsche Antworten für normale Abfragen erzeugt oder ein Sicherheitsproblem aufweist).

Wir haben alle offenen Probleme, Bugs und Streitfragen dokumentiert, die von strukturellen Entscheidungen abhängen. Siehe auch Abschnitt A.8, „Bekannte Fehler und konzeptionelle Unzulänglichkeiten in MySQL“.

Unser Ziel ist es, alle Bugs zu beheben, die behebbar sind, ohne eine stabile MySQL-Version weniger stabil machen zu müssen. In bestimmten Fällen bedeutet dies, dass wir ein Problem in den Entwicklungsversionen, nicht aber in der stabilen Produktionsversion beheben können. Natürlich dokumentieren wir solche Probleme, damit sie den Benutzern bekannt sind.

Es folgt eine Beschreibung unserer Vorgehensweise:

- Wir überwachen das Auftreten von Bugs mithilfe unserer Kundensupportliste, der Bugdatenbank unter http://bugs.mysql.com/ und der externen MySQL-Mailinglisten.

- Alle gemeldeten Bugs für die aktiven Versionen werden in die Bugdatenbank eingegeben.

- Wenn wir einen Bug beheben, dann versuchen wir immer, einen Testfall dafür zu erstellen und diesen in unser Testsystem einzufügen, damit gewährleistet ist, dass der Bug nie wieder auftreten kann, ohne sofort erkannt zu werden. (Solche Testfälle gibt es für ca. 90 Prozent aller behobenen Bugs.)

- Wir erstellen Testfälle für alle neuen Funktionen, die wir in MySQL ergänzen.

- Bevor wir mit der Erstellung eines neuen MySQL-Releases beginnen, stellen wir sicher, dass alle gemeldeten nachvollziehbaren Bugs der betreffenden MySQL-Version (3.23.x, 4.0.x, 4.1.x, 5.0.x, 5.1.x usw.) behoben sind. Wenn ein Fehler aufgrund interner Strukturentscheidungen in MySQL nicht behoben werden kann, wird dies im Handbuch dokumentiert. Siehe auch Abschnitt A.8, „Bekannte Fehler und konzeptionelle Unzulänglichkeiten in MySQL“.

- Wir erstellen einen Build für alle Plattformen, für die Binärdistributionen unterstützt werden, und verarbeiten alle mit unserer Testsuite und der Benchmark-Reihe.

- Schlagen Testsuite oder Benchmark-Reihe bei einer Plattform fehl, dann wird hierfür keine Binärdistribution veröffentlicht. Ist das Problem in einem allgemeinen Fehler im Quellcode begründet, dann beheben wir es und erstellen den Build einschließlich aller Tests auf allen Systemen von Grund auf neu.

- Erstellungs- und Testvorgänge benötigen etwa eine Woche. Erhalten wir während dieses Zeitraums eine Meldung zu einem schweren Bug (z. B. einem Bug, der einen Speicherauszug verursacht), dann beheben wir das Problem und starten die Erstellung von Neuem.

- Wenn die Binärdistributionen auf http://dev.mysql.com/ veröffentlicht wurden, senden wir eine Bekanntmachung an die Mailinglisten `mysql` und `announce`. Siehe auch Abschnitt 1.7.1, „Die MySQL-Mailinglisten“. Die Bekanntmachung enthält eine Liste aller Änderungen am und aller bekannten Probleme mit dem Release. Der Abschnitt Known Problems (Bekannte Probleme) in den Versionshinweisen wurde bislang nur bei einer Hand voll Releases benötigt.

- Damit unsere Benutzer möglichst umgehend auf die aktuellsten MySQL-Funktionen zugreifen können, versuchen wir, alle vier bis acht Wochen einen neuen MySQL-Release anzufertigen. Momentaufnahmen des Quellcodes werden täglich erstellt und sind unter http://downloads.mysql.com/snapshots.php verfügbar.

- Wenn wir trotz aller Bemühungen nach der Freigabe eines Releases die Meldung erhalten, dass ein kritisches Problem für den Build einer bestimmten Plattform vorliegt, dann beheben wir dieses sofort und erstellen einen neuen `'a'`-Release für die betreffende Plattform. Weil so viele Leute MySQL benutzen, sind Probleme schnell gefunden und behoben.

- Unsere Leistungen bei der Erstellung stabiler Releases sind recht gut. Unter den letzten 150 Releases waren es weniger als zehn, für die wir einen neuen Build erstellen mussten. In drei dieser Fälle wurde der Bug von einer fehlerhaften `glibc`-Bibliothek auf einem unserer Erstellungssysteme verursacht, die ausfindig zu machen uns recht viel Zeit gekostet hat.

#### 2.1.2.5. MySQL-Binärdistributionen, die von MySQL AB kompiliert wurden

Eine der Dienstleistungen von MySQL AB besteht in der Bereitstellung von MySQL-Binärdistributionen, die entweder auf unseren eigenen Systemen oder aber auf Systemen kompiliert wurden, bei denen uns Unterstützer von MySQL freundlicherweise Zugang zu ihren Computern gewährt haben.

Neben den Binärdateien in den plattformspezifischen Paketformaten bieten wir für eine Anzahl von Plattformen auch Binärdistributionen in Form komprimierter tar-Dateien (`.tar.gz`-Dateien) an. Siehe auch Abschnitt 2.2, „Schnelle Standardinstallation von MySQL“.

Die RPM-Distributionen für MySQL 5.1-Releases, die wir über die Website bereitstellen, werden von MySQL AB angefertigt.

Informationen zu Windows-Distributionen finden Sie in Abschnitt 2.3, „Installation von MySQL unter Windows“.

Diese Distributionen werden mithilfe des Skripts `Build-tools/Do-compile` erzeugt, das den Quellcode kompiliert und das Binärarchiv `tar.gz` mithilfe von scripts/make_binary_distribution erstellt.

Diese Binärdateien werden mit den folgenden Compilern und Optionen konfiguriert und erstellt. Diese Informationen können Sie auch abrufen, indem Sie die Variablen `COMP_ENV_INFO` und `CONFIGURE_LINE` im Skript bin/mysqlbug jeder tar-Binärdistributionsdatei abfragen.

Sollten Sie optimalere Optionen für einen der folgenden `configure`-Befehle haben, dann schicken Sie diese an die MySQL-Mailingliste `internals`. Siehe auch Abschnitt 1.7.1, „Die MySQL-Mailinglisten“.

Wollen Sie eine Debugversion von MySQL kompilieren, dann sollten Sie die Option`--with-debug` oder `--with-debug=full` zu den folgenden configure-Befehlen hinzufügen und ggf. vorhandene `-fomit-frame-pointer`-Optionen entfernen.

Die folgenden Binärdateien werden auf den Entwicklungssystemen von MySQL AB erstellt:

- Linux 2.4.xx x86 mit gcc 2.95.3:

      CFLAGS="-O2 -mcpu=pentiumpro" CXX=gcc CXXFLAGS="-O2 -mcpu=pentiumpro
      -felide-constructors" ./configure --prefix=/usr/local/mysql
      --with-extra-charsets=complex --enable-thread-safe-client
      --enable-local-infile --enable-assembler --disable-shared
      --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static

- Linux 2.4.x x86 mit icc (Intel C++ Compiler 8.1 oder höhere Releases):

      CC=icc CXX=icpc CFLAGS="-O3 -unroll2 -ip -mp -no-gcc -restrict"
      CXXFLAGS="-O3 -unroll2 -ip -mp -no-gcc -restrict" ./configure
      --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data
      --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex
      --enable-thread-safe-client --enable-local-infile --enable-assembler
      --disable-shared --with-client-ldflags=-all-static
      --with-mysqld-ldflags=-all-static --with-embedded-server --with-innodb

  Beachten Sie, dass Version 8.1 und höher des Intel-Compilers separate Treiber für „reines“ C (`icc`) und C++ (`icpc`) aufweisen; wenn Sie icc Version 8.0 oder älter zur Erstellung von MySQL verwenden, müssen Sie die Einstellung `CXX=icc` vornehmen.

- Linux 2.4.xx Intel Itanium 2 mit ecc (Intel C++ Itanium Compiler 7.0):

      CC=ecc CFLAGS="-O2 -tpp2 -ip -nolib_inline" CXX=ecc CXXFLAGS="-O2
      -tpp2 -ip -nolib_inline" ./configure --prefix=/usr/local/mysql
      --with-extra-charsets=complex --enable-thread-safe-client
      --enable-local-infile

- Linux 2.4.xx Intel Itanium mit ecc (Intel C++ Itanium Compiler 7.0):

      CC=ecc CFLAGS=-tpp1 CXX=ecc CXXFLAGS=-tpp1 ./configure
      --prefix=/usr/local/mysql --with-extra-charsets=complex
      --enable-thread-safe-client --enable-local-infile

- Linux 2.4.xx alpha mit `ccc` (Compaq C V6.2-505/Compaq C++ V6.3-006):

      CC=ccc CFLAGS="-fast -arch generic" CXX=cxx CXXFLAGS="-fast -arch
      generic -noexceptions -nortti" ./configure --prefix=/usr/local/mysql
      --with-extra-charsets=complex --enable-thread-safe-client
      --enable-local-infile --with-mysqld-ldflags=-non_shared
      --with-client-ldflags=-non_shared --disable-shared

- Linux 2.x.xx ppc mit gcc 2.95.4:

      CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3
      -fno-omit-frame-pointer -felide-constructors -fno-exceptions
      -fno-rtti" ./configure --prefix=/usr/local/mysql
      --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin
      --with-extra-charsets=complex --enable-thread-safe-client
      --enable-local-infile --disable-shared --with-embedded-server
      --with-innodb

- Linux 2.4.xx s390 mit gcc 2.95.3:

      CFLAGS="-O2" CXX=gcc CXXFLAGS="-O2 -felide-constructors" ./configure
      --prefix=/usr/local/mysql --with-extra-charsets=complex
      --enable-thread-safe-client --enable-local-infile --disable-shared
      --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static

- Linux 2.4.xx x86_64 (AMD64) mit gcc 3.2.1:

      CXX=gcc ./configure --prefix=/usr/local/mysql
      --with-extra-charsets=complex --enable-thread-safe-client
      --enable-local-infile --disable-shared

- Sun Solaris 8 x86 mit gcc 3.2.3:

      CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3
      -fno-omit-frame-pointer -felide-constructors -fno-exceptions
      -fno-rtti" ./configure --prefix=/usr/local/mysql
      --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin
      --with-extra-charsets=complex --enable-thread-safe-client
      --enable-local-infile --disable-shared --with-innodb

- Sun Solaris 8 SPARC mit gcc 3.2:

      CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3
      -fno-omit-frame-pointer -felide-constructors -fno-exceptions
      -fno-rtti" ./configure --prefix=/usr/local/mysql
      --with-extra-charsets=complex --enable-thread-safe-client
      --enable-local-infile --enable-assembler --with-named-z-libs=no
      --with-named-curses-libs=-lcurses --disable-shared

- Sun Solaris 8 SPARC (64-Bit) mit gcc 3.2:

      CC=gcc CFLAGS="-O3 -m64 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3
      -m64 -fno-omit-frame-pointer -felide-constructors -fno-exceptions
      -fno-rtti" ./configure --prefix=/usr/local/mysql
      --with-extra-charsets=complex --enable-thread-safe-client
      --enable-local-infile --with-named-z-libs=no
      --with-named-curses-libs=-lcurses --disable-shared

- Sun Solaris 9 SPARC mit gcc 2.95.3:

      CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3
      -fno-omit-frame-pointer -felide-constructors -fno-exceptions
      -fno-rtti" ./configure --prefix=/usr/local/mysql
      --with-extra-charsets=complex --enable-thread-safe-client
      --enable-local-infile --enable-assembler --with-named-curses-libs=-lcurses
      --disable-shared

- Sun Solaris 9 SPARC mit `cc-5.0` (Sun Forte 5.0):

      CC=cc-5.0 CXX=CC ASFLAGS="-xarch=v9" CFLAGS="-Xa -xstrconst -mt
      -D_FORTEC_ -xarch=v9" CXXFLAGS="-noex -mt -D_FORTEC_ -xarch=v9"
      ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex
      --enable-thread-safe-client --enable-local-infile --enable-assembler
      --with-named-z-libs=no --enable-thread-safe-client --disable-shared

- IBM AIX 4.3.2 ppc mit gcc 3.2.3:

      CFLAGS="-O2 -mcpu=powerpc -Wa,-many " CXX=gcc CXXFLAGS="-O2
      -mcpu=powerpc -Wa,-many -felide-constructors -fno-exceptions
      -fno-rtti" ./configure --prefix=/usr/local/mysql
      --with-extra-charsets=complex --enable-thread-safe-client
      --enable-local-infile --with-named-z-libs=no --disable-shared

- IBM AIX 4.3.3 ppc mit `xlC_r` (IBM Visual Age C/C++ 6.0):

      CC=xlc_r CFLAGS="-ma -O2 -qstrict -qoptimize=2 -qmaxmem=8192"
      CXX=xlC_r CXXFLAGS ="-ma -O2 -qstrict -qoptimize=2 -qmaxmem=8192"
      ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data
      --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex
      --enable-thread-safe-client --enable-local-infile --with-named-z-libs=no
      --disable-shared --with-innodb

- IBM AIX 5.1.0 ppc mit gcc 3.3:

      CFLAGS="-O2 -mcpu=powerpc -Wa,-many" CXX=gcc CXXFLAGS="-O2 -mcpu=powerpc
      -Wa,-many -felide-constructors -fno-exceptions -fno-rtti" ./configure
      --prefix=/usr/local/mysql --with-extra-charsets=complex
      --enable-thread-safe-client --enable-local-infile --with-named-z-libs=no
      --disable-shared

- IBM AIX 5.2.0 ppc mit `xlC_r` (IBM Visual Age C/C++ 6.0):

      CC=xlc_r CFLAGS="-ma -O2 -qstrict -qoptimize=2 -qmaxmem=8192"
      CXX=xlC_r CXXFLAGS="-ma -O2 -qstrict -qoptimize=2 -qmaxmem=8192"
      ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data
      --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex
      --enable-thread-safe-client --enable-local-infile --with-named-z-libs=no
      --disable-shared --with-embedded-server --with-innodb

- HP-UX 10.20 pa-risc1.1 mit gcc 3.1:

      CFLAGS="-DHPUX -I/opt/dce/include -O3 -fPIC" CXX=gcc CXXFLAGS="-DHPUX
      -I/opt/dce /include -felide-constructors -fno-exceptions -fno-rtti
      -O3 -fPIC" ./configure --prefix=/usr/local/mysql
      --with-extra-charsets=complex --enable-thread-safe-client
      --enable-local-infile --with-pthread --with-named-thread-libs=-ldce
      --with-lib-ccflags=-fPIC --disable-shared

- HP-UX 11.00 pa-risc mit `aCC` (HP ANSI C++ B3910B A.03.50):

      CC=cc CXX=aCC CFLAGS=+DAportable CXXFLAGS=+DAportable ./configure
      --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data
      --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex
      --enable-thread-safe-client --enable-local-infile --disable-shared
      --with-embedded-server --with-innodb

- HP-UX 11.11 pa-risc2.0 64-Bit mit `aCC` (HP ANSI C++ B3910B A.03.33):

      CC=cc CXX=aCC CFLAGS=+DD64 CXXFLAGS=+DD64 ./configure
      --prefix=/usr/local/mysql --with-extra-charsets=complex
      --enable-thread-safe-client --enable-local-infile --disable-shared

- HP-UX 11.11 pa-risc2.0 32-Bit mit `aCC` (HP ANSI C++ B3910B A.03.33):

      CC=cc CXX=aCC CFLAGS="+DAportable" CXXFLAGS="+DAportable" ./configure
      --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data
      --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex
      --enable-thread-safe-client --enable-local-infile --disable-shared
      --with-innodb

- HP-UX 11.22 ia64 64-Bit mit `aCC` (HP aC++/ANSI C B3910B A.05.50):

      CC=cc CXX=aCC CFLAGS="+DD64 +DSitanium2" CXXFLAGS="+DD64 +DSitanium2"
      ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data
      --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex
      --enable-thread-safe-client --enable-local-infile --disable-shared
      --with-embedded-server --with-innodb

- Apple Mac OS X 10.2 powerpc mit gcc 3.1:

      CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3
      -fno-omit-frame-pointer -felide-constructors -fno-exceptions
      -fno-rtti" ./configure --prefix=/usr/local/mysql
      --with-extra-charsets=complex --enable-thread-safe-client
      --enable-local-infile --disable-shared

- FreeBSD 4.7 i386 mit gcc 2.95.4:

      CFLAGS=-DHAVE_BROKEN_REALPATH ./configure --prefix=/usr/local/mysql
      --with-extra-charsets=complex --enable-thread-safe-client
      --enable-local-infile --enable-assembler --with-named-z-libs=not-used
      --disable-shared

- FreeBSD 4.7 i386 mit LinuxThreads mit gcc 2.95.4:

      CFLAGS="-DHAVE_BROKEN_REALPATH -D__USE_UNIX98 -D_REENTRANT
      -D_THREAD_SAFE -I/usr/local/include/pthread/linuxthreads"
      CXXFLAGS="-DHAVE_BROKEN_REALPATH -D__USE_UNIX98 -D_REENTRANT
      -D_THREAD_SAFE -I/usr/local/include/pthread/linuxthreads" ./configure
      --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data
      --libexecdir=/usr/local/mysql/bin --enable-thread-safe-client
      --enable-local-infile --enable-assembler
      --with-named-thread-libs="-DHAVE_GLIBC2_STYLE_GETHOSTBYNAME_R
      -D_THREAD_SAFE -I /usr/local/include/pthread/linuxthreads
      -L/usr/local/lib -llthread -llgcc_r" --disable-shared
      --with-embedded-server --with-innodb

- QNX Neutrino 6.2.1 i386 mit gcc 2.95.3qnx-nto 20010315:

      CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3
      -fno-omit-frame-pointer -felide-constructors -fno-exceptions
      -fno-rtti" ./configure --prefix=/usr/local/mysql
      --with-extra-charsets=complex --enable-thread-safe-client
      --enable-local-infile --disable-shared

Die folgenden Binärdistributionen wurden auf Systemen von Dritten erstellt, die MySQL AB freundlicherweise von anderen Benutzern zur Verfügung gestellt wurden. Diese werden aus Gefälligkeit bereitgestellt; MySQL AB hat keine vollständige Kontrolle über diese Systeme, weswegen wir für Binärdistributionen, die auf ihnen erstellt wurden, nur eingeschränkten Support bieten können.

- SCO Unix 3.2v5.0.7 i386 mit gcc 2.95.3:

      CFLAGS="-O3 -mpentium" LDFLAGS=-static CXX=gcc CXXFLAGS="-O3 -mpentium
      -felide-constructors" ./configure --prefix=/usr/local/mysql
      --with-extra-charsets=complex --enable-thread-safe-client
      --enable-local-infile --with-named-z-libs=no --enable-thread-safe-client
      --disable-shared

- SCO UnixWare 7.1.4 i386 mit CC 3.2:

      CC=cc CFLAGS="-O" CXX=CC ./configure --prefix=/usr/local/mysql
      --with-extra-charsets=complex --enable-thread-safe-client
      --enable-local-infile --with-named-z-libs=no --enable-thread-safe-client
      --disable-shared --with-readline

- SCO OpenServer 6.0.0 i386 mit CC 3.2:

      CC=cc CFLAGS="-O" CXX=CC ./configure --prefix=/usr/local/mysql
      --with-extra-charsets=complex --enable-thread-safe-client
      --enable-local-infile --with-named-z-libs=no --enable-thread-safe-client
      --disable-shared --with-readline

- Compaq Tru64 OSF/1 V5.1 732 alpha mit `cc/cxx` (Compaq C V6.3-029i/DIGITAL C++ V6.1-027):

      CC="cc -pthread" CFLAGS="-O4 -ansi_alias -ansi_args -fast -inline
      speed -speculate all" CXX="cxx -pthread" CXXFLAGS="-O4 -ansi_alias
      -fast -inline speed -speculate all -noexceptions -nortti" ./configure
      --prefix=/usr/local/mysql --with-extra-charsets=complex
      --enable-thread-safe-client --enable-local-infile
      --with-named-thread-libs="-lpthread -lmach -lexc -lc" --disable-shared
      --with-mysqld-ldflags=-all-static

- SGI Irix 6.5 IP32 mit gcc 3.0.1:

      CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXXFLAGS="-O3
      -fno-omit-frame-pointer -felide-constructors -fno-exceptions
      -fno-rtti" ./configure --prefix=/usr/local/mysql
      --with-extra-charsets=complex --enable-thread-safe-client
      --enable-local-infile --disable-shared

- FreeBSD/sparc64 5.0 mit gcc 3.2.1:

      CFLAGS=-DHAVE_BROKEN_REALPATH ./configure --prefix=/usr/local/mysql
      --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin
      --with-extra-charsets=complex --enable-thread-safe-client
      --enable-local-infile --disable-shared --with-innodb

Die folgenden Kompilierungsoptionen wurden für Binärpakete verwendet, die MySQL AB in der Vergangenheit bereitgestellt hat. Diese Binärdistributionen werden nicht mehr aktualisiert. Die Kompilierungsoptionen werden zu Referenzzwecken an diese Stelle aufgelistet.

- Linux 2.2.xx SPARC mit egcs 1.1.2:

      CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3
      -fno-omit-frame-pointer -felide-constructors -fno-exceptions
      -fno-rtti" ./configure --prefix=/usr/local/mysql
      --with-extra-charsets=complex --enable-thread-safe-client
      --enable-local-infile --enable-assembler --disable-shared

- Linux 2.2.x mit x686 mit gcc 2.95.2:

      CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro
      -felide-constructors -fno-exceptions -fno-rtti" ./configure
      --prefix=/usr/local/mysql --enable-assembler
      --with-mysqld-ldflags=-all-static --disable-shared
      --with-extra-charsets=complex

- SunOS 4.1.4 2 sun4c mit gcc 2.7.2.1:

      CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors" ./configure
      --prefix=/usr/local/mysql --disable-shared --with-extra-charsets=complex
      --enable-assembler

- SunOS 5.5.1 (und höher) sun4u mit egcs 1.0.3a oder 2.90.27 oder gcc 2.95.2 und höher:

      CC=gcc CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors
      -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql
      --with-low-memory --with-extra-charsets=complex --enable-assembler

- SunOS 5.6 i86pc mit gcc 2.8.1:

      CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql
      --with-low-memory --with-extra-charsets=complex

- BSDI BSD/OS 3.1 i386 mit gcc 2.7.2.1:

      CC=gcc CXX=gcc CXXFLAGS=-O ./configure --prefix=/usr/local/mysql
      --with-extra-charsets=complex

- BSDI BSD/OS 2.1 i386 mit gcc 2.7.2:

      CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql
      --with-extra-charsets=complex

- AIX 4.2 mit gcc 2.7.2.2:

      CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql
      --with-extra-charsets=complex

### 2.1.3. Woher man MySQL bekommt

Informationen zur aktuellen MySQL-Version und Hinweise zum Download finden Sie auf unserer Downloadseite unter http://dev.mysql.com/downloads/. Eine vollständige und aktuelle Liste der Spiegelserver für den MySQL-Download finden Sie unter http://dev.mysql.com/downloads/mirrors.html. Dort erhalten Sie auch Hinweise dazu, wie Sie selbst einen MySQL-Spiegelserver anbieten können und wie Sie ausgefallene oder veraltete Spiegelserver melden.

Der Hauptspiegelserver ist über http://mirrors.sunsite.dk/mysql/ erreichbar.

### 2.1.4. Bestätigen der Paketintegrität mittels MD5-Prüfsummen oder `GnuPG`

Wenn Sie das für Ihre Zwecke geeignete MySQL-Paket heruntergeladen haben, sollten Sie, bevor Sie die Installation starten, sicherstellen, dass es intakt ist und nicht verändert wurde. Für diese Integritätsprüfung bietet MySQL drei Methoden an:

- MD5-Prüfsummen

- Kryptografiesignaturen unter Verwendung von `GnuPG` (GNU Privacy Guard)

- die eingebaute RPM-Integritätsprüfmethode für RPM-Pakete

Die folgenden Abschnitte beschreiben, wie diese Methoden verwendet werden.

Wenn Sie feststellen, dass MD5-Prüfsumme oder GPG-Signaturen nicht übereinstimmen, probieren Sie zunächst, das betreffende Paket noch einmal von einem anderen Spiegelserver herunterzuladen. Wenn Sie die Integrität des Pakets mehrfach nicht erfolgreich verifizieren können, teilen Sie uns dies unter Angabe des vollständigen Paketnamens und des verwendeten Downloadservers via E-Mail an die Adresse `<webmaster@mysql.com>` oder `<build@mysql.com>` mit. Bitte melden Sie Probleme mit dem Download nicht über das Bugmeldesystem.

#### 2.1.4.1. Verifizieren der MD5-Prüfsumme

Wenn Sie ein MySQL-Paket heruntergeladen haben, sollten Sie sicherstellen, dass die zugehörige MD5-Prüfsumme mit der auf den MySQL-Downloadseiten angegebenen Prüfsumme übereinstimmt. Jedes Paket weist eine individuelle Prüfsumme auf, die Sie mithilfe des folgenden Befehls abfragen können (hierbei ist `package_name` der Name des heruntergeladenen Pakets):

    shell> md5sum package_name

Beispiel:

    shell> md5sum mysql-standard-5.1.5-alpha-linux-i686.tar.gz
    aaab65abbec64d5e907dcd41b8699945  mysql-standard-5.1.5-alpha-linux-i686.tar.gz

Vergewissern Sie sich, dass die resultierende Prüfsumme (der angezeigte Hexadezimal-String) mit der Angabe übereinstimmt, die auf der Downloadseite unmittelbar unter dem betreffenden Paket angegeben ist.

Hinweis: Sie müssen die Prüfsumme der Archivdatei (d. h. der `.zip`- oder `.tar.gz`-Datei) verifizieren, nicht die Prüfsumme der Dateien, die im Archiv gespeichert sind.

Beachten Sie, dass nicht alle Betriebssysteme den Befehl md5sum unterstützen. Bei manchen heißt er einfach md5, bei anderen ist er überhaupt nicht enthalten. Bei Linux ist er Teil des Pakets GNU Text Utilities, das für eine Vielzahl von Plattformen verfügbar ist. Sie können den Quellcode auch unter http://www.gnu.org/software/textutils/ herunterladen. Wenn Sie OpenSSL installiert haben, können Sie stattdessen den Befehl openssl md5 `package_name` verwenden. Eine Windows-Implementierung des Befehls md5 ist unter http://www.fourmilab.ch/md5/ verfügbar. winMd5Sum ist ein grafisches MD5-Prüfwerkzeug, das Sie sich unter http://www.nullriver.com/index/products/winmd5sum beschaffen können.

#### 2.1.4.2. Signaturüberprüfung mit `GnuPG`

Eine andere Methode zur Überprüfung der Integrität und Authentizität eines Pakets besteht in der Verwendung kryptografischer Signaturen. Diese sind zuverlässiger, aber arbeitsaufwändiger als MD5-Prüfsummen.

Wir von MySQL AB signieren MySQL-Pakete für den Download mit GnuPG (GNU Privacy Guard). GnuPG ist eine Open-Source-Alternative zum bekannten Pretty Good Privacy (PGP) von Phil Zimmermann. Weitere Informationen zu GnuPG sowie zu dessen Download und Installation auf Ihrem System finden Sie unter http://www.gnupg.org/. Die meisten Linux-Distributionen werden mit standardmäßig installiertem GnuPG ausgeliefert. Weitere Informationen zu GnuPG finden Sie unter http://www.openpgp.org/.

Um die Signatur für ein bestimmtes Paket zu überprüfen, müssen Sie sich zunächst eine Kopie des GPG-Build-Schlüssels von MySQL AB beschaffen. Diese können Sie unter http://www.keyserver.net/ herunterladen. Der erforderliche Schlüssel heißt `build@mysql.com`. Alternativ können Sie den Schlüssel aus dem folgenden Text kopieren und direkt einfügen:

    Key ID:
    pub  1024D/5072E1F5 2003-02-03
         MySQL Package signing key (www.mysql.com) <build@mysql.com>
    Fingerprint: A4A9 4068 76FC BD3C 4567  70C8 8C71 8D3B 5072 E1F5

    Public Key (ASCII-armored):

    -----BEGIN PGP PUBLIC KEY BLOCK-----
    Version: GnuPG v1.0.6 (GNU/Linux)
    Comment: For info see http://www.gnupg.org

    mQGiBD4+owwRBAC14GIfUfCyEDSIePvEW3SAFUdJBtoQHH/nJKZyQT7h9bPlUWC3
    RODjQReyCITRrdwyrKUGku2FmeVGwn2u2WmDMNABLnpprWPkBdCk96+OmSLN9brZ
    fw2vOUgCmYv2hW0hyDHuvYlQA/BThQoADgj8AW6/0Lo7V1W9/8VuHP0gQwCgvzV3
    BqOxRznNCRCRxAuAuVztHRcEAJooQK1+iSiunZMYD1WufeXfshc57S/+yeJkegNW
    hxwR9pRWVArNYJdDRT+rf2RUe3vpquKNQU/hnEIUHJRQqYHo8gTxvxXNQc7fJYLV
    K2HtkrPbP72vwsEKMYhhr0eKCbtLGfls9krjJ6sBgACyP/Vb7hiPwxh6rDZ7ITnE
    kYpXBACmWpP8NJTkamEnPCia2ZoOHODANwpUkP43I7jsDmgtobZX9qnrAXw+uNDI
    QJEXM6FSbi0LLtZciNlYsafwAPEOMDKpMqAK6IyisNtPvaLd8lH0bPAnWqcyefep
    rv0sxxqUEMcM3o7wwgfN83POkDasDbs3pjwPhxvhz6//62zQJ7Q7TXlTUUwgUGFj
    a2FnZSBzaWduaW5nIGtleSAod3d3Lm15c3FsLmNvbSkgPGJ1aWxkQG15c3FsLmNv
    bT6IXQQTEQIAHQUCPj6jDAUJCWYBgAULBwoDBAMVAwIDFgIBAheAAAoJEIxxjTtQ
    cuH1cY4AnilUwTXn8MatQOiG0a/bPxrvK/gCAJ4oinSNZRYTnblChwFaazt7PF3q
    zIhMBBMRAgAMBQI+PqPRBYMJZgC7AAoJEElQ4SqycpHyJOEAn1mxHijft00bKXvu
    cSo/pECUmppiAJ41M9MRVj5VcdH/KN/KjRtW6tHFPYhMBBMRAgAMBQI+QoIDBYMJ
    YiKJAAoJELb1zU3GuiQ/lpEAoIhpp6BozKI8p6eaabzF5MlJH58pAKCu/ROofK8J
    Eg2aLos+5zEYrB/LsrkCDQQ+PqMdEAgA7+GJfxbMdY4wslPnjH9rF4N2qfWsEN/l
    xaZoJYc3a6M02WCnHl6ahT2/tBK2w1QI4YFteR47gCvtgb6O1JHffOo2HfLmRDRi
    Rjd1DTCHqeyX7CHhcghj/dNRlW2Z0l5QFEcmV9U0Vhp3aFfWC4Ujfs3LU+hkAWzE
    7zaD5cH9J7yv/6xuZVw411x0h4UqsTcWMu0iM1BzELqX1DY7LwoPEb/O9Rkbf4fm
    Le11EzIaCa4PqARXQZc4dhSinMt6K3X4BrRsKTfozBu74F47D8Ilbf5vSYHbuE5p
    /1oIDznkg/p8kW+3FxuWrycciqFTcNz215yyX39LXFnlLzKUb/F5GwADBQf+Lwqq
    a8CGrRfsOAJxim63CHfty5mUc5rUSnTslGYEIOCR1BeQauyPZbPDsDD9MZ1ZaSaf
    anFvwFG6Llx9xkU7tzq+vKLoWkm4u5xf3vn55VjnSd1aQ9eQnUcXiL4cnBGoTbOW
    I39EcyzgslzBdC++MPjcQTcA7p6JUVsP6oAB3FQWg54tuUo0Ec8bsM8b3Ev42Lmu
    QT5NdKHGwHsXTPtl0klk4bQk4OajHsiy1BMahpT27jWjJlMiJc+IWJ0mghkKHt92
    6s/ymfdf5HkdQ1cyvsz5tryVI3Fx78XeSYfQvuuwqp2H139pXGEkg0n6KdUOetdZ
    Whe70YGNPw1yjWJT1IhMBBgRAgAMBQI+PqMdBQkJZgGAAAoJEIxxjTtQcuH17p4A
    n3r1QpVC9yhnW2cSAjq+kr72GX0eAJ4295kl6NxYEuFApmr1+0uUq/SlsQ==
    =YJkx
    -----END PGP PUBLIC KEY BLOCK-----

Um den Schlüssel in Ihren eigenen öffentlichen GPG-Schlüsselbund zu importieren, verwenden Sie gpg --import. Haben Sie den Schlüssel beispielsweise unter dem Dateinamen `mysql_pubkey.asc` gespeichert, dann sieht der Importbefehl wie folgt aus:

    shell> gpg --import mysql_pubkey.asc

Nachdem Sie den öffentlichen Schlüssel heruntergeladen und importiert haben, laden Sie das gewünschte MySQL-Paket und die entsprechende Signatur herunter (diese steht ebenfalls auf der Downloadseite zur Verfügung). Die Signaturdatei hat den gleichen Namen wie die Distributionsdatei und trägt die Erweiterung `.asc`. Ein Beispiel:

Distributionsdatei | `mysql-standard-5.1.5-alpha-linux-i686.tar.gz`
Signaturdatei | `mysql-standard-5.1.5-alpha-linux-i686.tar.gz.asc`

Stellen Sie sicher, dass beide Dateien im gleichen Verzeichnis gespeichert sind, und führen Sie dann den folgenden Befehl aus, um die Signatur der Distributionsdatei zu verifizieren:

    shell> gpg --verify package_name.asc

Beispiel:

    shell> gpg --verify mysql-standard-5.1.5-alpha-linux-i686.tar.gz.asc
    gpg: Signature made Tue 12 Jul 2005 23:35:41 EST using DSA key ID 5072E1F5
    gpg: Good signature from "MySQL Package signing key (www.mysql.com) <build@mysql.com>"

Die Meldung `Good signature` (Signatur korrekt) zeigt an, dass alles in Ordnung ist. Sie können alle Warnungen vom Typ `insecure memory` ignorieren, die unter Umständen angezeigt werden.

Weitere Informationen zum Umgang mit öffentlichen Schlüsseln finden Sie in der GPG-Dokumentation.

#### 2.1.4.3. Signaturüberprüfung mit `RPM`

Bei RPM-Paketen ist keine separate Signatur vorhanden. RPM-Pakete enthalten vielmehr eine integrierte GPG-Signatur und eine MD5-Prüfsumme. Sie können ein Paket durch Ausführen des folgenden Befehls verifizieren:

    shell> rpm --checksig package_name.rpm

Beispiel:

    shell> rpm --checksig MySQL-server-5.1.5-alpha-0.i386.rpm
    MySQL-server-5.1.5-alpha-0.i386.rpm: md5 gpg OK

Hinweis: Wenn Sie RPM 4.1 verwenden und die Meldung `(GPG) NOT OK (MISSING KEYS: GPG#5072e1f5)` erhalten, obwohl Sie den öffentlichen MySQL-Schlüssel zuerst in Ihren eigenen GPG-Schlüsselbund importiert haben, dann müssen Sie den Schlüssel zuerst in Ihren RPM-Schlüsselbund importieren. RPM 4.1 verwendet nicht länger den GPG-Schlüsselbund (oder GPG selbst). Stattdessen arbeitet es mit einem eigenen Schlüsselbund, da es eine systemweite Anwendung ist, während der öffentliche GPG-Schlüsselbund eine benutzerspezifische Datei ist. Um den öffentlichen MySQL-Schlüssel in den RPM-Schlüsselbund zu importieren, besorgen Sie sich den Schlüssel zunächst wie in Abschnitt 2.1.4.2, „Signaturüberprüfung mit `GnuPG`“, beschrieben. Nachfolgend verwenden Sie den Befehl rpm --import für den Schlüsselimport. Haben Sie den öffentlichen Schlüssel beispielsweise unter dem Dateinamen `mysql_pubkey.asc` gespeichert, dann sieht der Importbefehl wie folgt aus:

    shell> rpm --import mysql_pubkey.asc

Wie Sie sich den öffentlichen MySQL-Schlüssel beschaffen, lesen Sie in Abschnitt 2.1.4.2, „Signaturüberprüfung mit `GnuPG`“.

### 2.1.5. Installationslayouts

Dieser Abschnitt beschreibt die standardmäßige Struktur der Verzeichnisse, die bei der Installation der von MySQL AB bereitgestellten Binär- oder Quelldistributionen erstellt werden. Distributionen anderer Anbieter verwenden unter Umständen andere Strukturen als die hier beschriebenen.

Bei MySQL 5.1 unter Windows heißt das Standardinstallationsverzeichnis `C:\Programme\MySQL\MySQL Server 5.1`. (Manche Windows-Benutzer ziehen eine Installation in `C:\mysql` vor, da dieses Verzeichnis früher einmal der Standardpfad war. Allerdings bleibt auch in diesem Fall die Struktur der Unterverzeichnisse dieselbe.) Das Installationsverzeichnis hat die folgenden Unterverzeichnisse:

Verzeichnis | Verzeichnisinhalt
`bin` | Clientprogramme und der mysqld-Server
`data` | Logdateien, Datenbanken
`Docs` | Dokumentation
`examples` | Beispielprogramme und -skripten
`include` | Include-Dateien (Header-Dateien)
`lib` | Bibliotheken
`scripts` | Hilfsprogrammskripten
`share` | Fehlermeldungsdateien

Installationen, die mit den Linux-RPM-Dateien von MySQL AB erstellt werden, erzeugen Dateien in den folgenden Systemverzeichnissen:

Verzeichnis | Verzeichnisinhalt
`/usr/bin` | Clientprogramme und -skripten
`/usr/sbin` | Der mysqld-Server
`/var/lib/mysql` | Logdateien, Datenbanken
`/usr/share/doc/packages` | Dokumentation
`/usr/include/mysql` | Include-Dateien (Header-Dateien)
`/usr/lib/mysql` | Bibliotheken
`/usr/share/mysql` | Fehlermeldungs- und Zeichensatzdateien
`/usr/share/sql-bench` | Benchmarks

Unter Unix wird eine tar-Binärdistributionsdatei installiert, indem sie an der gewählten Installationsposition (meist `/usr/local/mysql`) entpackt wird. Dabei werden die folgenden Unterverzeichnisse erstellt:

Verzeichnis | Verzeichnisinhalt
`bin` | Clientprogramme und der mysqld-Server
`data` | Logdateien, Datenbanken
`docs` | Dokumentation, ChangeLog
`include` | Include-Dateien (Header-Dateien)
`lib` | Bibliotheken
`scripts` | mysql_install_db
`share/mysql` | Fehlermeldungsdateien
`sql-bench` | Benchmarks

Eine Quelldistribution wird installiert, nachdem Sie sie konfiguriert und kompiliert haben. Standardmäßig werden bei der Installation Dateien in den folgenden Unterverzeichnissen von `/usr/local` erstellt:

Verzeichnis | Verzeichnisinhalt
`bin` | Clientprogramme und -skripten
`include/mysql` | Include-Dateien (Header-Dateien)
`info` | Dokumentation im Info-Format
`lib/mysql` | Bibliotheken
`libexec` | Der mysqld-Server
`share/mysql` | Fehlermeldungsdateien
`sql-bench` | Benchmarks und der `Crash-Me`-Test
`var` | Datenbanken und Logdateien

Innerhalb des Installationsverzeichnisses unterscheidet sich die Struktur einer Quelldistribution wie folgt von der einer Binärdistribution:

- Der mysqld-Server wird im Verzeichnis `libexec` statt im Verzeichnis `bin` installiert.

- Das Datenverzeichnis ist `var` und nicht `data`.

- mysql_install_db wird im Verzeichnis `bin` installiert, nicht im Verzeichnis `scripts`.

- Die Header-Datei- und Bibliotheksverzeichnisse sind `include/mysql` und `lib/mysql` statt `include` und `lib`.

Sie können Ihre eigene Binärdistribution aus einer kompilierten Quelldistribution erstellen, indem Sie das Skript `scripts/make_binary_distribution` aus dem Stammverzeichnis der Quelldistribution ausführen.

## 2.2. Schnelle Standardinstallation von MySQL

Die nachfolgenden Abschnitte behandeln die Installation von MySQL auf Plattformen, für die wir Pakete im nativen Paketformat der jeweiligen Plattform anbieten. (Dies wird auch als Durchführung einer „Binärinstallation“ bezeichnet.) Binärdistributionen von MySQL sind allerdings auch für viele andere Plattformen verfügbar. In Abschnitt 2.7, „Installation von MySQL auf anderen Unix-ähnlichen Systemen“, finden Sie allgemeine Installationsanweisungen für diese Pakete, die für alle Plattformen gelten.

In Abschnitt 2.1, „Allgemeines zur Installation“, finden Sie weitere Informationen dazu, welche anderen Binärdistributionen verfügbar sind und wie Sie diese erhalten.

## 2.3. Installation von MySQL unter Windows

Eine native Windows-Distribution von MySQL wird von MySQL AB seit Version 3.21 angeboten. Der Anteil dieser Distributionen an den täglichen MySQL-Downloads ist beträchtlich. In diesem Abschnitt beschreiben wir die Vorgehensweise bei der MySQL-Installation unter Windows.

Das Installationsprogramm der Windows-Version von MySQL installiert in Verbindung mit einem grafischen Konfigurations-Assistenten automatisch MySQL, erstellt eine Optionsdatei, startet den Server und sichert die voreingestellten Benutzerkonten ab.

Wenn Sie eine vorhandene Installation von MySQL aktualisieren, die älter als MySQL 4.1.5 ist, dann müssen Sie die folgenden Schritte durchführen:

1. Besorgen Sie sich die Distribution und installieren Sie sie.

2. Konfigurieren Sie, sofern erforderlich, eine Optionsdatei.

3. Wählen Sie den zu verwendenden Server aus.

4. Starten Sie den Server.

5. Konfigurieren Sie Passwörter für die vorgabeseitigen MySQL-Konten.

Diese Vorgehensweise muss auch bei neueren MySQL-Installationen beachtet werden, wenn Sie ein Installationspaket verwenden, das kein Installationsprogramm enthält.

MySQL für Windows ist in verschiedenen Distributionsformaten erhältlich:

- Es sind Binärdistributionen verfügbar, die ein Setup-Programm enthalten, das alles Erforderliche installiert, sodass Sie den Server sofort starten können. Ein anderes Binärdistributionsformat enthält ein Archiv, das Sie einfach an der Installationsposition entpacken und dann selbst konfigurieren. Detaillierte Informationen finden Sie in Abschnitt 2.3.2, „Auswahl eines Installationspakets“.

- Die Quelldistribution enthält den gesamten Code und alle Supportdateien zur Erstellung der ausführbaren Dateien mithilfe des Compiler-Systems Visual Studio 2003.

Im Allgemeinen sollten Sie die Binärdistribution verwenden. Sie ist einfacher zu verwenden als die übrigen, und Sie benötigen keine zusätzlichen Tools, um MySQL zum Laufen zu bringen.

Im folgenden Abschnitt wird beschrieben, wie MySQL unter Windows mithilfe einer Binärdistribution installiert wird. Informationen zur Installation einer Quelldistribution finden Sie in Abschnitt 2.8.6, „Windows-Quelldistribution“.

### 2.3.1. Systemvoraussetzungen für Windows

Um MySQL unter Windows auszuführen, benötigen Sie Folgendes:

- Ein 32-Bit-Windows-Betriebssystem wie Windows 9x, Me, NT, 2000, XP oder Windows Server 2003.

  Windows NT-basierte Betriebssysteme (NT, 2000, XP, 2003) gestatten Ihnen die Ausführung des MySQL Servers als Dienst. Die Verwendung eines Windows NT-basierten Betriebssystems wird dringend empfohlen. Siehe auch Abschnitt 2.3.12, „Starten von MySQL als Windows-Dienst“.

  Sie sollten MySQL unter Windows generell mithilfe eines Kontos erstellen, das über Administratorrechte verfügt. Andernfalls kann es bei bestimmten Operationen wie der Bearbeitung der Umgebungsvariablen `PATH` oder dem Zugriff auf den Service Control Manager zu Problemen kommen.

- TCP/IP-Protokollunterstützung.

- Eine Kopie der MySQL-Binärdistribution für Windows. Diese kann unter http://dev.mysql.com/downloads/ heruntergeladen werden. Siehe auch Abschnitt 2.1.3, „Woher man MySQL bekommt“.

  Hinweis: Wenn Sie die Distribution via FTP herunterladen, empfehlen wir Ihnen die Verwendung eines geeigneten FTP-Clients mit Wiederaufnahmefunktion für den Download, um eine Dateibeschädigung während des Downloads auszuschließen.

- Zum Entpacken der Distributionsdatei ein Programm, das `.zip`-Dateien lesen kann.

- Ausreichend viel Speicherplatz auf Ihrer Festplatte, um MySQL entpacken und installieren und die Datenbanken entsprechend Ihren Anforderungen erstellen zu können (mindestens 200 Mbyte empfohlen).

Je nachdem, wie Sie MySQL einsetzen wollen, können auch weitere Anforderungen vorliegen:

- Wenn Sie die Verbindung zum MySQL Server via ODBC herstellen wollen, benötigen Sie einen Connector/ODBC-Treiber. Siehe auch Abschnitt 25.1, „MySQL Connector/ODBC“.

- Wenn Sie Tabellen benötigen, die größer als 4 Gbyte sind, installieren Sie MySQL auf NTFS oder einem neueren Dateisystem. Vergessen Sie nicht, bei der Erstellung von Tabellen `MAX_ROWS` und `AVG_ROW_LENGTH` zu verwenden. Siehe auch Abschnitt 13.1.5, „`CREATE TABLE`“.

### 2.3.2. Auswahl eines Installationspakets

Bei MySQL 5.1 können Sie zwischen drei Installationspaketen für MySQL unter Windows auswählen. Die folgenden Pakete sind verfügbar:

- Das Essentials-Paket: Dieses Paket erkennen Sie am Dateinamen mit dem Aufbau `mysql-essential-5.1.5-alpha-win32.msi`. Es enthält die für die Installation von MySQL unter Windows mindestens erforderlichen Dateien einschließlich des Konfigurations-Assistenten. Nicht enthalten sind optionale Komponenten wie der eingebettete Server und die Benchmark-Reihe.

- Das Complete-Paket: Dieses Paket erkennen Sie am Dateinamen mit dem Aufbau `mysql-5.1.5-alpha-win32.zip`. Es enthält alle Dateien, die für eine vollständige Windows-Installation erforderlich sind, einschließlich des Konfigurations-Assistenten. Ferner enthalten sind optionale Komponenten wie der eingebettete Server und die Benchmark-Reihe.

- Das Noinstall-Archiv: Dieses Paket erkennen Sie am Dateinamen mit dem Aufbau `mysql-noinstall-5.1.5-alpha-win32.zip`. Es enthält alle im Complete-Paket enthaltenen Dateien mit Ausnahme des Konfigurations-Assistenten. Das Paket umfasst kein automatisiertes Installationsprogramm, muss also manuell installiert und konfiguriert werden.

Für die meisten Benutzer wird das Essentials-Paket empfohlen.

Welches Paket Sie auswählen, wirkt sich auf den nachfolgenden Installationsvorgang aus. Entscheiden Sie sich für das Essentials- oder Complete-Paket, dann finden Sie weitere Informationen in Abschnitt 2.3.3, „Installation von MySQL mit dem automatischen Installer“. Wollen Sie MySQL hingegen aus dem Noinstall-Archiv installieren, dann fahren Sie fort mit Abschnitt 2.3.6, „Installation von MySQL aus einem Noinstall-Zip-Archiv“.

### 2.3.3. Installation von MySQL mit dem automatischen Installer

Neue MySQL-Benutzer können den MySQL-Installations-Assistenten und den MySQL-Konfigurations-Assistenten zur Installation von MySQL unter Windows verwenden. Diese Assistenten sind so aufgebaut, dass die MySQL-Installation und -Konfiguration neuen Benutzern den sofortigen Einsatz von MySQL ermöglicht.

Die MySQL-Installations- und MySQL-Konfigurations-Assistenten sind Bestandteil des Essentials- und des Complete-Pakets von MySQL. Sie werden für die meisten MySQL-Standardinstallationen empfohlen. Ausnahmen betreffen Benutzer, die mehrere MySQL-Instanzen auf demselben Serverhost installieren wollen, und fortgeschrittene Benutzer, die volle Kontrolle über die Serverkonfiguration wünschen.

### 2.3.4. Verwendung des MySQL-Installations-Assistenten

#### 2.3.4.1. Einführung in den Installations-Assistenten

Der MySQL-Installations-Assistent ist ein Installationsprogramm für den MySQL Server, das die aktuellen Installer-Technologien von Microsoft Windows nutzt. In Verbindung mit dem MySQL-Konfigurations-Assistenten ermöglicht der MySQL-Installations-Assistent einem Benutzer die Installation und Konfiguration eines MySQL Servers, der direkt nach der Installation einsatzbereit ist.

Der MySQL-Installations-Assistent ist das Standardinstallationsprogramm für alle MySQL Server-Distributionen ab Version 4.1.5. Benutzer vorheriger MySQL-Versionen müssen ihre vorhandenen MySQL-Installationen manuell herunterfahren und entfernen, bevor sie MySQL mit dem MySQL-Installations-Assistenten installieren. In Abschnitt 2.3.4.7, „Upgrade von MySQL mit dem Installations-Assistenten“, finden Sie weitere Informationen zur Aktualisierung einer früheren Version.

In den aktuellen Windows-Versionen hat Microsoft eine verbesserte Version von MSI (Microsoft Windows Installer) implementiert. In Windows 2000, Windows XP und Windows Server 2003 ist MSI der De-facto-Standard für die Anwendungsinstallation. Der MySQL-Installations-Assistent nutzt diese Technologie, um den Installationsprozess reibungsloser und flexibler zu gestalten.

Die MSI-Engine wurde mit der Veröffentlichung von Windows XP aktualisiert. Wenn Sie eine vorherige Windows-Version einsetzen, finden Sie in dem Microsoft Knowledge Base-Artikel unter der Adresse http://support.microsoft.com/default.aspx?scid=kb;EN-US;292539 Informationen zum Upgrade auf die aktuelle Version der MSI-Engine.

Ferner hat Microsoft kürzlich das WiX-Toolkit (Windows Installer XML) vorgestellt. Hierbei handelt es sich um das erste offizielle Open-Source-Projekt von Microsoft. Wir verwenden WiX nun auch, denn erstens ist es ein Open-Source-Projekt, und zweitens gestattet es die Handhabung des gesamten Windows-Installationsvorgangs auf flexible Weise unter Verwendung von Skripten.

Die Optimierung des MySQL-Installations-Assistenten steht und fällt mit der Unterstützung und dem Feedback solcher Benutzer wie Ihnen. Wenn Sie feststellen, dass im MySQL-Installations-Assistenten etwas fehlt, das für Sie sehr wichtig wäre, oder einen Bug entdecken, melden Sie dies bitte in unserer Bugdatenbank. Hinweise hierzu finden Sie in Abschnitt 1.8, „Wie man Bugs oder Probleme meldet“.

#### 2.3.4.2. Download und Start des MySQL-Installations-Assistenten

Die MySQL-Installationspakete können unter http://dev.mysql.com/downloads/ heruntergeladen werden. Wenn das von Ihnen heruntergeladene Paket in einem ZIP-Archiv gespeichert ist, müssen Sie dieses zunächst entpacken.

Der Vorgang zum Starten des Assistenten hängt vom Inhalt des heruntergeladenen Installationspakets ab. Enthält dieses eine Datei namens `setup.exe`, dann doppelklicken Sie darauf, um den Installationsvorgang zu starten. Enthält das Paket hingegen eine `.msi`-Datei, dann doppelklicken Sie darauf, um den Installationsvorgang zu starten.

#### 2.3.4.3. Auswahl eines Installationstyps

Es sind drei Installationstypen vorhanden: Typical (Standard), Complete (Vollständig) und Custom (Benutzerdefiniert).

Bei der Installationsmethode Typical werden der MySQL Server, der Befehlszeilenclient mysql und die befehlszeilenbasierten Hilfsprogramme installiert. Zu den Befehlszeilenclients und Hilfsprogrammen gehören mysqldump, myisamchk und verschiedene weitere Programme zur Verwaltung des MySQL Servers.

Die Installationsmethode Complete installiert alle Komponenten, die im Installationspaket enthalten sind. Das vollständige Installationspaket umfasst Komponenten wie die eingebettete Serverbibliothek, die Benchmark-Reihe, Support-Skripten und die Dokumentation.

Bei der Installationsmethode Custom haben Sie vollständige Kontrolle darüber, welche Pakete installiert werden und wie der Installationspfad aussieht. Weitere Informationen zur benutzerdefinierten Installation finden Sie unter Abschnitt 2.3.4.4, „Der Dialog zur benutzerspezifischen Installation“.

Wenn Sie sich für die Installationsmethode Typical oder Complete entschieden haben und auf die Schaltfläche Next klicken, wird ein Fenster angezeigt, in dem Sie die gewählten Optionen überprüfen und die Installation dann starten können. Wenn Sie hingegen die Methode Custom auswählen und dann auf die Schaltfläche Next klicken, wird nachfolgend das Dialogfeld für die benutzerdefinierte Installation aufgerufen, welches in Abschnitt 2.3.4.4, „Der Dialog zur benutzerspezifischen Installation“, beschrieben wird.

#### 2.3.4.4. Der Dialog zur benutzerspezifischen Installation

Wenn Sie den Installationspfad oder bestimmte Komponenten ändern wollen, die vom MySQL-Installations-Assistenten installiert werden, wählen Sie die Installationsmethode Custom.

Alle verfügbaren Komponenten werden dann in einer Baumstruktur links im Installationsdialog angezeigt. Komponenten, die nicht installiert werden, sind durch ein rotes X gekennzeichnet, während für die Installation gewählten Komponenten ein graues Symbol aufweisen. Um den Installationsstatus einer Komponente umzuschalten, klicken Sie auf das Symbol der betreffenden Komponente und wählen die gewünschte Option aus der erscheinenden Dropdown-Liste.

Sie können den vorgegebenen Installationspfad ändern, indem Sie auf die Schaltfläche Change... rechts neben dem angezeigten Installationspfad klicken.

Wenn Sie die zu installierenden Komponenten und den Pfad gewählt haben, klicken Sie auf die Schaltfläche Next, um den Bestätigungsdialog anzuzeigen.

#### 2.3.4.5. Der Bestätigungsdialog

Wenn Sie eine Installationsmethode und ggf. die zu installierenden Komponenten gewählt haben, schreiten Sie fort zum Bestätigungsdialog. Installationsmethode und Pfad werden nun zur Bestätigung angezeigt.

Wenn die angezeigten Einstellungen korrekt sind, klicken Sie auf die Schaltfläche Install, um MySQL zu installieren. Wenn Sie Ihre Einstellungen noch einmal ändern wollen, klicken Sie auf die Schaltfläche Back. Um den MySQL-Installations-Assistenten zu verlassen, ohne MySQL zu installieren, klicken Sie auf die Schaltfläche Cancel.

Wenn die Installation abgeschlossen ist, können Sie sich auf der MySQL-Website registrieren. Wenn Sie registriert sind, können Sie Mitteilungen an die MySQL-Foren unter forums.mysql.com schicken, Bugs unter bugs.mysql.com melden und unseren Newsletter abonnieren. Der Abschlussbildschirm des Installationsprogramms zeigt eine Zusammenfassung der Installation und erlaubt Ihnen den Aufruf des MySQL-Konfigurations-Assistenten, mit dem Sie eine Konfigurationsdatei erstellen, den MySQL-Dienst installieren und die Sicherheitseinstellungen konfigurieren können.

#### 2.3.4.6. Änderungen, die der MySQL-Installations-Assistent durchführt

Wenn Sie auf die Schaltfläche Install klicken, startet der MySQL-Installations-Assistent den Installationsvorgang und nimmt bestimmte Änderungen an Ihrem System vor, die in den nachfolgenden Abschnitten beschrieben sind.

Änderungen in der Registrierung

Der MySQL-Installations-Assistent erstellt bei Auswahl der Standardinstallation einen Schlüssel in der Windows-Registrierung. Dieser befindet sich unter `HKEY_LOCAL_MACHINE\SOFTWARE\MySQL AB`.

Der MySQL-Installations-Assistent richtet einen Schlüssel ein, der nach der Hauptversion des installierten Servers benannt ist (z. B. `MySQL Server 5.1`). Dieser enthält zwei Zeichenfolgenwerte namens `Location` und `Version`. Die Zeichenfolge `Location` enthält den Pfad zum Installationsverzeichnis. Bei einer Standardinstallation heißt der Wert `C:\Programme\MySQL\MySQL Server 5.1\`. Die Zeichenfolge `Version` enthält die Release-Nummer. Wird etwa MySQL Server 5.1.5-alpha installiert, dann enthält der Schlüssel den Wert `5.1.5-alpha`.

Diese Registrierungsschlüssel ermöglichen es externen Programmen, das Installationsverzeichnis des MySQL Servers zu ermitteln; hierdurch wird eine zeitaufwändige vollständige Durchsuchung der Festplatte zur Ermittlung des Installationspfads des MySQL Servers unnötig. Die Registrierungsschlüssel sind für die Ausführung des Servers nicht erforderlich und werden, wenn Sie MySQL aus dem Noinstall-Archiv installieren, auch nicht erstellt.

Änderungen im Startmenü

Der MySQL-Installations-Assistent erstellt im Windows-Menü Start einen neuen Eintrag in einem MySQL-Menü, welches nach der installierten MySQL-Hauptversion benannt ist. Installieren Sie beispielsweise MySQL 5.1, dann erstellt der Installations-Assistent einen Abschnitt namens MySQL Server 5.1 im Menü Start.

In diesem neuen Abschnitt im Menü Start werden die folgenden Einträge eingerichtet:

- MySQL Command Line Client: Dies ist eine Verknüpfung mit dem Befehlszeilenclient mysql, die so konfiguriert ist, dass eine Verbindung als Benutzer `root` hergestellt wird. Beim Aufruf fordert die Verknüpfung die Eingabe eines `root`-Benutzerpassworts an, wenn Sie eine Verbindung herstellen.

- MySQL Server Instance Config Wizard: Dies ist eine Verknüpfung zum MySQL-Konfigurations-Assistenten. Verwenden Sie diese Verknüpfung zur Konfiguration eines neu installierten oder zur Neukonfiguration eines vorhandenen Servers.

- MySQL Documentation: Dies ist eine Verknüpfung zur Dokumentation zum MySQL Server, die lokal im Installationsverzeichnis des MySQL Servers gespeichert ist. Die Option ist nicht verfügbar, wenn der MySQL Server aus dem Essentials-Paket installiert wurde.

Änderungen am Dateisystem

Der MySQL-Installations-Assistent installiert den MySQL 5.1 Server standardmäßig im Verzeichnis `C:\`Programme`\MySQL\MySQL Server `5.1``. Hierbei ist `Programme` das Standardverzeichnis für Anwendungen auf Ihrem System und `5.1` die Hauptversion Ihres MySQL Servers. Dies ist das empfohlene Verzeichnis für den MySQL Server. Es ersetzt die vormalige Standardposition `C:\mysql`.

Standardmäßig werden alle MySQL-Anwendungen in einem gemeinsamen Verzeichnis in `C:\`Programme`\MySQL` gespeichert. Hierbei ist `Programme` in Ihrer Windows-Installation das Standardverzeichnis für Anwendungen. Bei einer typischen MySQL-Installation auf einem Entwicklersystem könnte dies wie folgt aussehen:

    C:\Programme\MySQL\MySQL Server 5.1
    C:\Programme\MySQL\MySQL Administrator 1.0
    C:\Programme\MySQL\MySQL Query Browser 1.0

Dieser Ansatz erleichtert Verwaltung und Pflege aller auf einem System installierten MySQL-Anwendungen.

#### 2.3.4.7. Upgrade von MySQL mit dem Installations-Assistenten

Der MySQL-Installations-Assistent kann Server-Upgrades automatisch mithilfe der MSI-Aktualisierungsfunktionen durchführen. Das bedeutet, dass Sie eine vorhandene Installation nicht mehr manuell entfernen müssen, bevor Sie einen neuen Release installieren. Das Installationsprogramm beendet und entfernt den vorhandenen MySQL-Dienst selbsttätig, bevor die neue Version installiert wird.

Automatische Upgrades sind nur dann verfügbar, wenn Sie Aktualisierungen zwischen Installationen durchführen, die die gleiche Haupt- und Unterversionsnummern aufweisen. So kann etwa ein automatisches Upgrade von MySQL 4.1.5 auf MySQL 4.1.6 erfolgen, nicht jedoch von MySQL 5.0 auf MySQL 5.1.

Siehe auch Abschnitt 2.3.15, „Upgrade von MySQL unter Windows“.

### 2.3.5. Verwendung des Konfigurations-Assistenten

#### 2.3.5.1. Einführung in den Konfigurations-Assistenten

Der MySQL-Konfigurations-Assistent hilft Ihnen bei der Automatisierung der Serverkonfiguration unter Windows. Der Konfigurations-Assistent erstellt eine benutzerdefinierte Datei `my.ini`. Hierzu stellt er Ihnen eine Reihe von Fragen und verknüpft Ihre Antworten dann mit einer Vorlage, um eine Datei `my.ini` zu erzeugen, die für Ihre Installation maßgeschneidert ist.

Der MySQL-Konfigurations-Assistent ist Bestandteil des MySQL 5.1-Servers und derzeit nur für Windows-Benutzer verfügbar.

Der MySQL-Konfigurations-Assistent ist zu einem Großteil Ergebnis des Feedbacks, das MySQL AB über viele Jahre hinweg von Benutzern erhalten hat. Sollten Sie feststellen, dass eine für Sie wesentliche Funktionalität fehlt, dann melden Sie dies bitte in unserer Bugdatenbank. Hinweise zur Vorgehensweise finden Sie in Abschnitt 1.8, „Wie man Bugs oder Probleme meldet“.

#### 2.3.5.2. Start des MySQL-Konfigurations-Assistenten

Der MySQL-Konfigurations-Assistent wird normalerweise über den MySQL-Installations-Assistenten gestartet, wenn dieser beendet wird. Sie können den Konfigurations-Assistenten aber auch durch Auswahl des Eintrags MySQL Server Instance Config Wizard im Abschnitt MySQL des Windows-Menüs Start aufrufen.

Alternativ navigieren Sie zum Verzeichnis `bin` Ihrer MySQL-Installation und rufen die Datei `MySQLInstanceConfig.exe` direkt auf.

#### 2.3.5.3. Auswahl einer Wartungsoption

Wenn der MySQL-Konfigurations-Assistent eine vorhandene Datei `my.ini` erkennt, können Sie wahlweise den vorhandenen Server umkonfigurieren oder die Serverinstanz durch Löschen von `my.ini` entfernen und den MySQL-Dienst beenden und entfernen.

Wenn Sie den vorhandenen Server umkonfigurieren wollen, wählen Sie die Option Re-configure Instance und klicken dann auf die Schaltfläche Next. Ihre vorhandene Datei `my.ini` wird nun in `my`timestamp`.ini.bak` umbenannt, wobei `timestamp` ein Zeitstempel mit dem Datum und der Uhrzeit des Zeitpunkts ist, an dem die vorhandene `my.ini` erstellt worden ist. Wenn Sie die vorhandene Serverinstanz entfernen wollen, wählen Sie die Option Remove Instance und klicken dann auf die Schaltfläche Next.

Wählen Sie die Option Remove Instance, dann wird ein Bestätigungsfenster aufgerufen. Klicken Sie auf die Schaltfläche Execute. Der MySQL-Konfigurations-Assistent beendet und entfernt nun den MySQL-Dienst. Nachfolgend löscht er die Datei `my.ini`. Die Serverinstallation und ihr Ordner `data` werden nicht entfernt.

Wenn Sie die Option Re-configure Instance auswählen, wird das Dialogfeld Configuration Type angezeigt. Hier können Sie den Installationstyp auswählen, den Sie konfigurieren wollen.

#### 2.3.5.4. Auswahl eines Konfigurationstyps

Wenn Sie den MySQL-Konfigurations-Assistenten für eine neue MySQL-Installation aufrufen oder die Option Re-configure Instance für eine vorhandene Installation auswählen, wird das Dialogfeld Configuration Type aufgerufen.

Es stehen zwei Konfigurationsmethoden zur Verfügung: Detailed Configuration und Standard Configuration. Die Option Standard Configuration ist für Neubenutzer vorgesehen, die direkt mit MySQL arbeiten wollen, ohne sich vorher Gedanken zur Serverkonfiguration machen zu müssen. Die Option Detailed Configuration ist hingegen für fortgeschrittene Benutzer gedacht, die eine exaktere Kontrolle über die Serverkonfiguration wünschen.

Wenn Sie noch nicht mit MySQL gearbeitet haben und einen Server benötigen, der als Entwicklersystem für genau einen Benutzer vorgesehen ist, dann ist Standard Configuration die richtige Wahl für Ihre Bedürfnisse. Wenn Sie die Option Standard Configuration wählen, stellt der MySQL-Konfigurations-Assistent alle Konfigurationsoptionen mit Ausnahme von Service Options (Dienstoptionen) und Security Options (Sicherheitsoptionen) automatisch ein.

Unter Umständen werden bei Auswahl von Standard Configuration Optionseinstellungen vorgenommen, die mit Systemen, auf denen bereits MySQL-Installationen vorhanden sind, nicht kompatibel sind. Ist auf dem System, auf dem Sie eine MySQL-Installation konfigurieren wollen, bereits eine andere MySQL-Installation vorhanden, dann wird die Auswahl Detailed Configuration empfohlen.

Um die Auswahl Standard Configuration fertig zu stellen, lesen Sie bitte die Abschnitte zu Service Options und Security Options in Abschnitt 2.3.5.11, „Der Dialog zu Dienstoptionen“, bzw. Abschnitt 2.3.5.12, „Der Dialog zu Sicherheitsoptionen“.

#### 2.3.5.5. Der Dialog zum Servertyp

Sie können zwischen drei verschiedenen Servertypen wählen. Welchen Servertyp Sie wählen, wirkt sich auf die Entscheidungen aus, die der MySQL-Konfigurations-Assistent in den Bereichen Speicher-, Festplatten- und Prozessornutzung trifft.

- Developer Machine: Diese Option ist die beste Wahl für eine normale Desktop-Workstation, auf der MySQL nur für den privaten Einsatz vorgesehen ist. Es wird vorausgesetzt, dass viele andere Desktopanwendungen ausgeführt werden. Der MySQL Server wird deswegen für eine minimale Nutzung der Systemressourcen konfiguriert.

- Server Machine: Wählen Sie diese Option für ein Serversystem, bei dem der MySQL Server gemeinsam mit anderen Serveranwendungen wie FTP-, Mail- oder Webservern ausgeführt wird. Der MySQL Server wird in diesem Fall für eine moderate Nutzung der Systemressourcen konfiguriert.

- Dedicated MySQL Server Machine: Die Option wählen Sie bei einem Serversystem, auf dem ausschließlich der MySQL Server läuft. Es wird vorausgesetzt, dass keine anderen Anwendungen ausgeführt werden. Der MySQL Server wird deswegen für die Nutzung aller Systemressourcen konfiguriert.

#### 2.3.5.6. Der Dialog zur Datenbankverwendung

Das Dialogfeld Database Usage erlaubt Ihnen die Angabe von Speicher-Engines, die Sie bei der Erstellung von MySQL-Tabellen voraussichtlich verwenden werden. Die hier gewählte Option bestimmt, ob die `InnoDB`-Speicher-Engine verfügbar ist und welcher Anteil der Serverressourcen für `InnoDB` bereitgestellt wird.

- Multifunctional Database: Diese Option aktiviert sowohl die `InnoDB`- als auch die `MyISAM`-Speicher-Engine und teilt die verfügbaren Ressourcen gleichmäßig zwischen diesen beiden auf. Die Option ist für Benutzer empfehlenswert, die beide Speicher-Engines regelmäßig verwenden.

- Transactional Database Only: Diese Option aktiviert sowohl die `InnoDB`- als auch die `MyISAM`-Speicher-Engine, reserviert den überwiegenden Teil der Serverressourcen jedoch für die `InnoDB`-Engine. Diese Option ist für Benutzer gedacht, die `InnoDB` fast ausschließlich verwenden und `MyISAM` nur in sehr seltenen Fällen einsetzen.

- Non-Transactional Database Only: Diese Option deaktiviert die `InnoDB`-Speicher-Engine vollständig und weist die gesamten Serverressourcen der `MyISAM`-Engine zu. Sie wird Benutzern empfohlen, die `InnoDB` überhaupt nicht verwenden.

#### 2.3.5.7. Der InnoDB-Tablespace-Dialog

Manche Benutzer wollen die `InnoDB`-Tablespace-Dateien an einer anderen Position als im MySQL Serverdatenverzeichnis speichern. Dies kann wünschenswert sein, wenn Ihr System über ein Speichergerät mit höherer Kapazität oder mehr Leistung verfügt (z. B. ein RAID-Speichersystem).

Um die Standardposition der `InnoDB`-Tablespace-Dateien zu ändern, wählen Sie ein anderes Laufwerk aus der Dropdown-Liste mit den Laufwerksbuchstaben aus und stellen dann in der Dropdown-Liste mit den Pfaden einen anderen Pfad ein. Um einen benutzerdefinierten Pfad zu erstellen, klicken Sie auf die Schaltfläche ....

Wenn Sie die Konfiguration eines vorhandenen Servers modifizieren, müssen Sie auf die Schaltfläche Modify klicken, bevor Sie den Pfad ändern. In dieser Situation müssen Sie die vorhandenen Tablespace-Dateien manuell an die neue Position verschieben, bevor Sie den Server starten.

#### 2.3.5.8. Der Dialog zu gleichzeitigen Verbindungen

Um zu verhindern, dass der Server keine Ressourcen mehr zugewiesen bekommt, ist es wichtig, die Anzahl gleichzeitiger Verbindungen zum MySQL Server zu begrenzen. Das Dialogfeld Concurrent Connections ermöglicht Ihnen die Angabe der erwarteten Auslastung Ihres Servers und stellt die Anzahl gleichzeitiger Verbindungen entsprechend ein. Es ist ferner möglich, die Anzahl gleichzeitiger Verbindungen manuell zu ändern.

- Decision Support (DSS)/OLAP: Wählen Sie diese Option, wenn Ihr Server keine hohe Anzahl gleichzeitiger Verbindungen unterstützen muss. Die maximale Anzahl von Verbindungen wird in diesem Fall auf 100 gesetzt, wobei ein Durchschnitt von 20 Verbindungen erwartet wird.

- Online Transaction Processing (OLTP): Wählen Sie diese Option, wenn Ihr Server eine große Zahl gleichzeitiger Verbindungen unterstützen muss. Die maximale Anzahl der Verbindungen wird hier auf 500 festgelegt.

- Manual Setting: Wählen Sie diese Option, wenn Sie die maximale Anzahl gleichzeitiger Verbindungen zum Server manuell einstellen wollen. Wählen Sie die Anzahl gleichzeitiger Verbindungen über die Dropdown-Liste aus oder geben Sie den gewünschten Wert direkt in das Dropdown-Feld ein, sofern er nicht in der Liste enthalten ist.

#### 2.3.5.9. Der Dialog zu Netzwerk- und Strict-Modus-Optionen

Im Dialogfeld Networking Options aktivieren oder deaktivieren Sie die TCP/IP-Netzwerkunterstützung und konfigurieren die Portnummer, die zur Verbindung mit dem MySQL Server verwendet wird.

Standardmäßig ist die TCP/IP-Netzwerkunterstützung aktiviert. Um sie zu deaktivieren, entfernen Sie die Markierung des Kontrollkästchen Enable TCP/IP Networking.

Standardmäßig ist Port 3306 gewählt. Um den für den MySQL-Zugriff verwendeten Port zu ändern, wählen Sie im Dropdown-Feld eine neue Portnummer aus und geben die gewünschte Nummer direkt in das Dropdown-Feld ein. Wird die eingetragene Portnummer bereits verwendet, dann werden Sie aufgefordert, Ihre Eingabe zu bestätigen.

Über Server SQL Mode können Sie den strikten SQL-Servermodus aktivieren oder deaktivieren. Bei aktiviertem striktem Modus (Standard) verhält sich MySQL ähnlich wie andere Datenbankmanagementsysteme. Wenn Sie Anwendungen ausführen, die auf das vorherige „nachsichtige“ Verhalten von MySQL angewiesen sind, müssen Sie diese Anwendungen entweder anpassen oder den strikten Modus deaktivieren. Weitere Informationen finden Sie in Abschnitt 5.2.5, „Der SQL-Modus des Servers“.

#### 2.3.5.10. Der Zeichensatzdialog

Der MySQL Server unterstützt mehrere Zeichensätze. In diesem Zusammenhang ist es möglich, einen Standardzeichensatz einzustellen, der für alle Tabellen, Spalten und Datenbanken verwendet wird, soweit nichts anderes explizit festgelegt ist. Im Dialogfeld Character Set können Sie den Standardzeichensatz des MySQL Servers ändern.

- Standard Character Set: Wählen Sie diese Option, wenn Sie `latin1` als Standardzeichensatz verwenden wollen. `latin1` wird für Englisch und viele westeuropäische Sprachen verwendet.

- Best Support For Multilingualism: Wählen Sie diese Option, wenn Sie `utf8` als Standardzeichensatz verwenden wollen. Dies ist ein Unicode-Zeichensatz, der Zeichen vieler verschiedener Sprachen enthält.

- Manual Selected Default Character Set/ Collation: Wählen Sie diese Option, wenn Sie den Standardzeichensatz des Servers manuell einstellen wollen. Wählen Sie den gewünschten Zeichensatz aus der angezeigten Dropdown-Liste.

#### 2.3.5.11. Der Dialog zu Dienstoptionen

Auf Windows NT-basierten Plattformen kann der MySQL Server als Windows-Dienst installiert werden. Wenn der Server auf diese Weise installiert wird, kann er beim Systemstart automatisch gestartet werden. Zudem ist auch ein automatischer Neustart des Dienstes durch Windows nach einem Ausfall möglich.

Der MySQL-Konfigurations-Assistent installiert den MySQL Server standardmäßig als Dienst mit dem Dienstnamen `MySQL`. Wollen Sie den Dienst nicht installieren, dann deaktivieren Sie das Kontrollkästchen Install As Windows Service . Sie können den Namen des Dienstes ändern, indem Sie einen anderen Namen im vorhandenen Dropdown-Feld auswählen oder einen neuen Dienstnamen direkt in das Feld eintragen.

Um den MySQL Server als Dienst zu installieren, der aber beim Systemstart nicht automatisch gestartet wird, deaktivieren Sie das Kontrollkästchen Launch the MySQL Server Automatically .

#### 2.3.5.12. Der Dialog zu Sicherheitsoptionen

Es wird dringend empfohlen, ein `root`-Passwort für Ihren MySQL Server einzurichten. Der MySQL-Konfigurations-Assistent fordert Sie standardmäßig dazu auf. Wollen Sie kein `root`-Passwort erstellen, dann deaktivieren Sie das Kontrollkästchen Modify Security Settings .

Um das `root`-Passwort einzurichten, geben Sie das gewünschte Passwort in die Felder New root password und Confirm ein. Wenn Sie einen vorhandenen Server umkonfigurieren, müssen Sie das vorhandene `root`-Passwort in das Feld Current root password eingeben.

Um `root`-Anmeldungen über das Netzwerk zu verhindern, markieren Sie das Kontrollkästchen Root may only connect from localhost. Dies erhöht die Sicherheit Ihres `root`-Kontos.

Um ein anonymes Benutzerkonto einzurichten, markieren Sie das Kontrollkästchen Create An Anonymous Account . Die Erstellung eines solchen Kontos kann die Serversicherheit verringern und Probleme mit der Anmeldung und mit Berechtigungen verursachen. Aus diesem Grund wird davon abgeraten.

#### 2.3.5.13. Der Bestätigungsdialog

Das letzte Dialogfeld im MySQL-Konfigurations-Assistent ist Confirmation Dialog. Um den Konfigurationsvorgang zu starten, klicken Sie auf die Schaltfläche Execute. Wenn Sie zu einem der vorherigen Dialogfelder zurückkehren wollen, klicken Sie auf die Schaltfläche Back. Um den MySQL-Konfigurations-Assistenten zu verlassen, ohne MySQL zu konfigurieren, klicken Sie auf die Schaltfläche Cancel.

Wenn Sie auf die Schaltfläche Execute geklickt haben, führt der MySQL-Konfigurations-Assistent eine Reihe von Aufgaben aus, deren Fortschritt auf dem Bildschirm angezeigt wird.

Der MySQL-Konfigurations-Assistent ermittelt zunächst die Konfigurationsdateioptionen basierend auf Ihren Einstellungen. Hierzu verwendet er eine Vorlage, die von Entwicklern und Technikern bei MySQL AB erstellt wurde. Diese Vorlage heißt `my-template.ini` und befindet sich in Ihrem Serverinstallationsverzeichnis.

Der Konfigurations-Assistent schreibt diese Optionen dann in eine Datei namens `my.ini`. Die endgültige Position von `my.ini` wird neben der Aufgabe Write configuration file angezeigt.

Wenn Sie angegeben haben, dass ein Dienst für den MySQL Server eingerichtet werden soll, erstellt und startet der MySQL-Konfigurations-Assistent diesen Dienst. Konfigurieren Sie einen vorhandenen Dienst um, dann startet der MySQL-Konfigurations-Assistent den Dienst neu, um Ihre Konfigurationsänderungen anzuwenden.

Haben Sie angegeben, dass ein `root`-Passwort eingerichtet werden soll, dann stellt der MySQL-Konfigurations-Assistent eine Verbindung mit dem Server her, richtet Ihr neues `root`-Passwort ein und übernimmt ggf. weitere von Ihnen gewählte Sicherheitseinstellungen.

Wenn der MySQL-Konfigurations-Assistent seine Aufgaben abgeschlossen hat, wird eine Zusammenfassung angezeigt. Klicken Sie auf die Schaltfläche Finish, um den MySQL-Konfigurations-Assistenten zu beenden.

#### 2.3.5.14. Speicherort der Datei `my.ini`

Der MySQL-Konfigurations-Assistent legt die Datei `my.ini` im Installationsverzeichnis des MySQL Servers ab. Dies erleichtert die Zuordnung von Konfigurationsdateien zu bestimmten Serverinstanzen.

Um sicherzustellen, dass der MySQL Server weiß, wo er nach der Datei `my.ini` suchen muss, wird im Zuge der Dienstinstallation ein Argument ähnlich dem folgenden an den MySQL Server übergeben: `--defaults-file="`C:\Programme\MySQL\MySQL Server 5.1`\my.ini"`. Hierbei wird `C:\Programme\MySQL\MySQL Server 5.1` durch den Installationspfad des MySQL Servers ersetzt.

Die Option `--defaults-file` weist den MySQL Server an, beim Start die Konfigurationsoptionen aus der angegebenen Datei auszulesen.

#### 2.3.5.15. Editieren der Datei `my.ini`

Um die Datei `my.ini` zu ändern, öffnen Sie sie mit einem Texteditor und nehmen die erforderlichen Änderungen vor. Sie können die Serverkonfiguration auch mit dem Hilfsprogramm MySQL Administrator bearbeiten.

MySQL-Clients und Hilfsprogramme wie die Befehlszeilenclients mysql und mysqldump können die Datei `my.ini` im Serverinstallationsverzeichnis nicht lokalisieren. Um die Client- und Hilfsanwendungen zu konfigurieren, erstellen Sie eine neue Datei `my.ini` im Verzeichnis `C:\WINDOWS` bzw. `C:\WINNT` (je nachdem, welches Verzeichnis für Ihre Windows-Version gültig ist).

### 2.3.6. Installation von MySQL aus einem Noinstall-Zip-Archiv

Benutzer, die eine Installation aus dem Noinstall-Paket vornehmen, können die Anweisungen in diesem Abschnitt zur manuellen Installation von MySQL verwenden. Die Installation von MySQL aus einem ZIP-Archiv erfolgt mit den nachfolgenden Schritten:

1. Extrahieren Sie das Archiv in das gewünschte Installationsverzeichnis.

2. Erstellen Sie die Optionsdatei.

3. Wählen Sie den MySQL Server-Typ aus.

4. Starten Sie den MySQL Server.

5. Schützen Sie die standardmäßig eingerichteten Benutzerkonten.

Die Abläufe werden in den nachfolgenden Abschnitten beschrieben.

### 2.3.7. Entpacken des Installationsarchivs

So installieren Sie MySQL manuell:

1. Wenn Sie ein Upgrade von einer vorherigen Version durchführen wollen, lesen Sie bitte Abschnitt 2.3.15, „Upgrade von MySQL unter Windows“, bevor Sie den Upgradevorgang beginnen.

2. Verwenden Sie ein Windows NT-basiertes Betriebssystem (z. B. Windows NT, Windows 2000, Windows XP oder Windows Server 2003), dann stellen Sie sicher, dass Sie als Benutzer mit Administratorrechten angemeldet sind.

3. Wählen Sie ein Installationsverzeichnis aus. Traditionell wird der MySQL Server im Verzeichnis `C:\mysql` installiert. Der MySQL-Installations-Assistent installiert MySQL hingegen in `C:\Programme\MySQL`. Wenn Sie MySQL nicht in `C:\mysql` installieren, müssen Sie den Pfad zum Installationsverzeichnis während des Systemstarts oder in einer Optionsdatei angeben. Siehe auch Abschnitt 2.3.8, „Anlegen einer Optionsdatei“.

4. Verwenden Sie ein ZIP-kompatibles Programm, um das Installationsarchiv in das gewählte Verzeichnis zu extrahieren. Bei Verwendung bestimmter Programme wird das Archiv in einen Ordner im Installationsverzeichnis extrahiert. Sollte dies bei Ihrem Programm der Fall sein, dann verschieben Sie den gesamten Inhalt des Unterordners in das gewählte Installationsverzeichnis.

### 2.3.8. Anlegen einer Optionsdatei

Wenn Sie für die Ausführung des Servers bestimmte Startoptionen angeben wollen, können Sie dies über die Befehlszeile tun oder sie in einer Optionsdatei ablegen. Sollen die Optionen bei jedem Serverstart verwendet werden, dann ist die Verwendung einer Optionsdatei zur Angabe Ihrer MySQL-Konfiguration praktischer. Dies gilt insbesondere unter den folgenden Umständen:

- Die Positionen von Installations- oder Datenverzeichnis unterscheiden sich von den Standardvorgaben (`C:\Programme\MySQL\MySQL Server 5.1` und `C:\Programme\MySQL\MySQL Server 5.1\data`).

- Sie müssen die Servereinstellungen optimieren.

Wenn der MySQL Server unter Windows gestartet wird, sucht er in zwei Dateien nach Optionseinstellungen: in der Datei `my.ini` im Windows-Verzeichnis und der Datei `C:\my.cnf`. Das Windows-Verzeichnis heißt normalerweise `C:\WINDOWS`, `C:\WINNT` o. ä. Sie können die exakte Position der Umgebungsvariable `WINDIR` entnehmen. Hierzu geben Sie den folgenden Befehl ein:

    C:\> echo %WINDIR%

MySQL sucht zunächst in der Datei `my.ini` und nachfolgend in `my.cnf` nach Optionseinstellungen. Allerdings sollten Sie, um Verwirrung zu vermeiden, am besten nur eine Datei verwenden. Verwendet Ihr PC einen Boot-Loader, bei dem `C:` nicht das Startlaufwerk ist, dann können Sie ohnehin nur die Datei `my.ini` benutzen. Unabhängig von der gewählten Option muss es sich in jedem Fall um eine unverschlüsselte Textdatei handeln.

Sie können auch die Beispieloptionsdateien verwenden, die zum Umfang Ihrer MySQL-Distribution gehören. Suchen Sie im Installationsverzeichnis nach Dateien wie `my-small.cnf`, `my-medium.cnf`, `my-large.cnf` und `my-huge.cnf`, die Sie umbenennen und als Grundlage für Ihre Konfigurationsdatei in das passende Verzeichnis kopieren können.

Eine Optionsdatei kann mit jedem Texteditor (z. B. dem Windows-Editor) erstellt und bearbeitet werden. Ist MySQL beispielsweise in `E:\mysql` installiert und befindet sich das Datenverzeichnis in `E:\mydata\data`, dann können Sie eine Optionsdatei erstellen, die einen Abschnitt `[mysqld]` enthält. In diesem geben Sie die folgenden Werte für die Parameter `basedir` und `datadir` an:

    [mysqld]
    # set basedir to your installation path
    basedir=E:/mysql
    # set datadir to the location of your data directory
    datadir=E:/mydata/data

Beachten Sie, dass Windows-Pfadnamen in Optionsdateien nicht mit Backslashs, sondern mit normalen Schrägstrichen angegeben werden. Wenn Sie Backslashs (umgekehrte Schrägstriche) verwenden, müssen Sie sie doppelt angeben:

    [mysqld]
    # set basedir to your installation path
    basedir=E:\\mysql
    # set datadir to the location of your data directory
    datadir=E:\\mydata\\data

Unter Windows legt das MySQL-Installationsprogramm das Datenverzeichnis direkt im Installationsverzeichnis von MySQL ab. Wenn Sie das Datenverzeichnis an eine andere Position verschieben wollen, sollten Sie den gesamten Inhalt des Verzeichnisses `data` an die neue Position kopieren. Befindet sich MySQL etwa in `C:\Programme\MySQL\MySQL Server 5.1`, dann ist das Datenverzeichnis standardmäßig `C:\Programme\MySQL\MySQL Server 5.1\data`. Wollen Sie stattdessen `E:\mydata` als Datenverzeichnis verwenden, dann müssen Sie zweierlei tun:

1. Sie verschieben das gesamte Verzeichnis `data` und alle darin enthaltenen Daten von `C:\Programme\MySQL\MySQL Server 5.1\data` nach `E:\mydata`.

2. Sie verwenden die Option `--datadir`, um die neue Position des Datenverzeichnisses bei jedem Serverstart anzugeben.

### 2.3.9. Auswahl des MySQL Server-Typs

Die folgende Tabelle zeigt die in MySQL 5.1 für Windows verfügbaren Server:

Binärdatei | Beschreibung
mysqld-debug | Mit allen Debugging-Funktionen und automatischer Überprüfung der Speicherzuordnung kompiliert. Unterstützt auch `InnoDB`- und `BDB`-Tabellen.
mysqld | Optimierte Binärdatei mit `InnoDB`-Unterstützung.
mysqld-nt | Optimierte Binärdatei für Windows NT/2000/XP mit Unterstützung von Named Pipes.
mysqld-max | Optimierte Binärdatei mit Unterstützung für `InnoDB`- und `BDB`-Tabellen.
mysqld-max-nt | Wie mysqld-max, aber mit Unterstützung für Named Pipes kompiliert.

Alle genannten Binärdateien sind für moderne Intel-Prozessoren optimiert, sollten aber auf allen Intel i386-Prozessoren oder höher funktionieren.

Alle Windows-MySQL 5.1 Server unterstützen symbolische Verknüpfungen von Datenbankverzeichnissen.

MySQL unterstützt TCP/IP auf allen Windows-Plattformen. Die Server mysqld-nt und `mysql-max-nt` unterstützen Named Pipes unter Windows NT, 2000, XP und 2003. Allerdings wird TCP/IP standardmäßig unabhängig von der Plattform verwendet. (Named Pipes sind in vielen Windows-Konfigurationen langsamer als TCP/IP.)

Die Verwendung von Named Pipes hängt von folgenden Bedingungen ab:

- Named Pipes werden nur aktiviert, wenn Sie den Server mit der Option `--enable-named-pipe` starten. Diese Option muss explizit angegeben werden, da einige Benutzer Schwierigkeiten mit dem Herunterfahren des MySQL Servers hatten, wenn Named Pipes verwendet wurden.

- Named-Pipe-Verbindungen sind nur bei den Servern mysqld-nt und mysqld-max-nt und nur dann zulässig, wenn der Server unter einer Windows-Version läuft, die Named Pipes auch unterstützt (NT, 2000, XP, 2003).

- Diese Server können auch auf Computern unter Windows 98 oder ME laufen, aber dann muss TCP/IP installiert sein; Named-Pipe-Verbindungen sind in diesem Fall nicht möglich.

- Unter Windows 95 laufen die Server nicht.

Hinweis: Die meisten Beispiele in diesem Handbuch verwenden mysqld als Servername. Wenn Sie einen anderen Server (z. B. mysqld-nt) auswählen, nehmen Sie bei den in den Beispielen gezeigten Befehlen die erforderlichen Änderungen vor.

### 2.3.10. Erstmaliges Starten des Servers

In diesem Abschnitt finden Sie einen allgemeinen Überblick zum Start des MySQL Servers. Die nachfolgenden Abschnitte enthalten spezielle Informationen zum Starten des MySQL Servers von der Befehlszeile oder als Windows-Dienst.

Die hier enthaltenen Informationen gelten in erster Linie, wenn Sie MySQL aus dem `Noinstall`-Paket heraus installiert haben oder MySQL manuell (statt unter Verwendung der grafischen Oberflächen) konfigurieren und testen wollen.

Die Beispiele in diesem und den folgenden Abschnitten setzen voraus, dass MySQL im Standardverzeichnis `C:\Programme\MySQL\MySQL Server 5.1` installiert wurde. Haben Sie MySQL an anderer Stelle installiert, dann müssen Sie die in den Beispielen gezeigten Pfadnamen entsprechend abändern.

Auf NT-basierten Systemen wie Windows NT, 2000, XP oder 2003 haben Clients zwei Optionen: Sie können entweder TCP/IP verwenden oder eine Named Pipe nutzen, sofern der Server Named-Pipe-Verbindungen unterstützt. Damit MySQL TCP/IP unter Windows NT 4.0 nutzen kann, muss das Service Pack 3 (oder höher) installiert sein.

Unter Windows 95/98/ME müssen MySQL-Clients die Serververbindung immer über TCP/IP herstellen. (Auf diese Weise kann jeder Rechner in Ihrem Netzwerk eine Verbindung zum MySQL Server herstellen.) Aus diesem Grund müssen Sie sicherstellen, dass die TCP/IP-Unterstützung auf Ihrem Computer installiert ist, bevor Sie MySQL starten. Sie finden TCP/IP auf Ihrer Windows-CD-ROM.

Beachten Sie, dass Sie, wenn Sie einen frühen Windows 95-Release (z. B. OSR2) verwenden, wahrscheinlich ein veraltetes Winsock-Paket verwenden; MySQL erfordert jedoch Winsock 2. Sie finden die aktuelle Winsock-Version auf der Website http://www.microsoft.com/. Windows 98 enthält die neue Winsock 2-Bibliothek bereits, d. h., diese muss nicht aktualisiert werden.

MySQL für Windows unterstützt auch Verbindungen mit gemeinsam genutztem Speicher, sofern beim Start die Option `--shared-memory` angegeben wurde. Clients können durch Verwendung der Option `--protocol=memory` eine Verbindung über gemeinsamen Speicher herstellen.

Informationen zur zu startenden Serverbinärdatei finden Sie in Abschnitt 2.3.9, „Auswahl des MySQL Server-Typs“.

Tests führen Sie am besten über die Eingabeaufforderung in einem Konsolenfenster (oder „DOS-Fenster“) aus. So kann der Server Statusmeldungen im Fenster anzeigen, wo sie leicht zu sehen sind. Funktioniert bei der Konfiguration etwas nicht einwandfrei, dann können Sie Probleme mithilfe dieser Meldungen erkennen und beheben.

Um den Server zu starten, geben Sie folgenden Befehl ein:

    C:\> "C:\Programme\MySQL\MySQL Server 5.1\bin\mysqld" --console

Bei Servern, die die `InnoDB`-Unterstützung enthalten, sollten Sie folgende Mitteilungen beim Serverstart sehen:

    InnoDB: The first specified datafile c:\ibdata\ibdata1 did not exist:
    InnoDB: a new database to be created!
    InnoDB: Setting file c:\ibdata\ibdata1 size to 209715200
    InnoDB: Database physically writes the file full: wait...
    InnoDB: Log file c:\iblogs\ib_logfile0 did not exist: new to be created
    InnoDB: Setting log file c:\iblogs\ib_logfile0 size to 31457280
    InnoDB: Log file c:\iblogs\ib_logfile1 did not exist: new to be created
    InnoDB: Setting log file c:\iblogs\ib_logfile1 size to 31457280
    InnoDB: Log file c:\iblogs\ib_logfile2 did not exist: new to be created
    InnoDB: Setting log file c:\iblogs\ib_logfile2 size to 31457280
    InnoDB: Doublewrite buffer not found: creating new
    InnoDB: Doublewrite buffer created
    InnoDB: creating foreign key constraint system tables
    InnoDB: foreign key constraint system tables created
    011024 10:58:25  InnoDB: Started

Wenn der Server seine Startsequenz beendet, sollten Sie eine Meldung in der Art der folgenden sehen (hierdurch wird angezeigt, dass der Server nun zur Annahme von Clientverbindungen bereit ist):

    mysqld: ready for connections
    Version: '5.1.5-alpha'  socket: ''  port: 3306

Nachfolgend schreibt der Server weiterhin alle erzeugten Diagnoseausgaben in die Konsole. Sie können ein neues Konsolenfenster öffnen, in dem Clientprogramme ausgeführt werden.

Wenn Sie die Option `--console` weglassen, schreibt der Server die gesamte Diagnoseausgabe in das Fehlerlog im Datenverzeichnis (standardmäßig `C:\Programme\MySQL\MySQL Server 5.1\data`). Das Fehlerlog ist die Datei mit der Erweiterung `.err`.

Hinweis: Für die in den MySQL-Grant-Tabellen aufgeführten Konten gibt es zunächst noch keine Passwörter. Wenn Sie den Server gestartet haben, sollten Sie entsprechend der in Abschnitt 2.9, „Einstellungen und Tests nach der Installation“, beschriebenen Verfahrensweise Passwörter für diese Konten einrichten.

### 2.3.11. Starten von MySQL von der Windows-Befehlszeile

Der MySQL Server kann manuell über die Befehlszeile gestartet werden. Dies ist bei jeder Windows-Version möglich.

Um dem Server mysqld von der Befehlszeile zu starten, öffnen Sie ein Konsolenfenster („Eingabeaufforderung“) und geben folgenden Befehl ein:

    C:\> "C:\Programme\MySQL\MySQL Server 5.1\bin\mysqld"

Der in obigem Beispiel verwendete Pfad kann abhängig vom MySQL-Installationsverzeichnis auf Ihrem System anders aussehen.

Bei Nicht-NT-Versionen von Windows wird hierdurch mysqld im Hintergrund gestartet. Das bedeutet, dass nach dem Serverstart eine andere Eingabeaufforderung angezeigt wird. Wenn Sie den Server auf diese Weise unter Windows NT, 2000, XP oder 2003 starten, läuft der Server im Vordergrund; bis zur Beendigung des Servers erscheint keine Eingabeaufforderung. Aus diesem Grund müssen Sie ein anderes Konsolenfenster öffnen, um Clientprogramme ausführen zu können, während der Server läuft.

Sie können den MySQL Server mit folgendem Befehl beenden:

    C:\> "C:\Programme\MySQL\MySQL Server 5.1\bin\mysqladmin" -u root shutdown

Hinweis: Wenn das MySQL-Benutzerkonto `root` ein Passwort aufweist, müssen Sie mysqladmin mit der Option `-p` aufrufen und das Passwort auf Aufforderung angeben.

Mit diesem Befehl rufen Sie das MySQL-Administrationshilfsprogramm mysqladmin auf, welches eine Verbindung zum Server herstellt und das Herunterfahren auslöst. Der Befehl stellt die Verbindung als MySQL-Benutzer `root` her. Dies ist das standardmäßige Administratorenkonto im MySQL-Grant-System. Beachten Sie, dass Benutzer im MySQL-Grant-System nichts mit den Benutzerkonten zu tun haben, über die man sich am Windows-System anmeldet.

Wenn mysqld nicht startet, kontrollieren Sie, ob der Server im Fehlerlog Meldungen eingetragen hat, die auf die Ursache des Problems schließen lassen. Das Fehlerlog befindet sich im Verzeichnis `C:\Programme\MySQL\MySQL Server 5.1\data`. Es handelt sich um die Datei mit der Erweiterung `.err`. Sie können auch versuchen, den Server als mysqld --console zu starten; in diesem Fall erhalten Sie unter Umständen über den Bildschirm einige nützliche Informationen, die bei der Beseitigung des Problems helfen können.

Die letzte Option ist der Start von mysqld mit den Optionen `--standalone` und `--debug`. In diesem Fall schreibt mysqld eine Logdatei namens `C:\mysqld.trace`, die die Ursache dafür angeben sollte, dass mysqld nicht gestartet wird. Siehe auch Abschnitt E.1.2, „Trace-Dateien erzeugen“.

Verwenden Sie mysqld --verbose --help, um alle Optionen anzuzeigen, die mysqld versteht.

### 2.3.12. Starten von MySQL als Windows-Dienst

Bei der Windows NT-Familie (Windows NT, 2000, XP, 2003) besteht die empfohlene Methode zur Ausführung von MySQL in der Installation als Dienst, wobei MySQL automatisch mit Windows gestartet und beendet wird. Ein MySQL Server, der als Dienst installiert ist, lässt sich mithilfe von NET über die Befehlszeile oder über das grafische Hilfsprogramm Dienste steuern.

Das Hilfsprogramm Dienste (der Service Control Manager von Windows) lässt sich über die Windows-Systemsteuerung aufrufen (Abschnitt Verwaltung bei Windows 2000, XP und Server 2003). Um Konflikte zu vermeiden, ist es ratsam, das Hilfsprogramm Dienste während der Serverinstallation oder Löschaktionen über die Befehlszeile zu schließen.

Bevor Sie MySQL als Windows-Dienst installieren, sollten Sie zunächst mit dem folgenden Befehl den aktuellen Server beenden, sofern dieser ausgeführt wird:

    C:\> "C:\Programme\MySQL\MySQL Server 5.1\bin\mysqladmin" -u root shutdown

Hinweis: Wenn das MySQL-Benutzerkonto `root` ein Passwort aufweist, müssen Sie mysqladmin mit der Option `-p` aufrufen und das Passwort auf Aufforderung angeben.

Mit diesem Befehl rufen Sie das MySQL-Administrationshilfsprogramm mysqladmin auf, welches eine Verbindung zum Server herstellt und das Herunterfahren auslöst. Der Befehl stellt die Verbindung als MySQL-Benutzer `root` her. Dies ist das standardmäßige Administratorenkonto im MySQL-Grant-System. Beachten Sie, dass Benutzer im MySQL-Grant-System nichts mit den Benutzerkonten zu tun haben, über die man sich am Windows-System anmeldet.

Installieren Sie den Server mit dem folgenden Befehl als Dienst:

    C:\> "C:\Programme\MySQL\MySQL Server 5.1\bin\mysqld" --install

Mit dem Befehl zur Dienstinstallation wird der Server nicht gestartet. Hinweise zum Start finden Sie in einem späteren Abschnitt.

Um den Aufruf von MySQL-Programmen zu erleichtern, können Sie den Pfadnamen des MySQL-Verzeichnisses `bin` zur Umgebungsvariable `PATH` Ihres Windows-Systems hinzufügen:

- Klicken Sie auf dem Windows-Desktop mit der rechten Maustaste auf das Symbol Arbeitsplatz und wählen Sie Eigenschaften.

- Wählen Sie nun im angezeigten Fenster Systemeigenschaften die Registerkarte Erweitert und klicken Sie auf die Schaltfläche Umgebungsvariablen.

- Unter Systemvariablen wählen Sie Path und klicken dann auf die Schaltfläche Bearbeiten. Das Dialogfeld Systemvariable bearbeiten erscheint.

- Setzen Sie den Cursor an das Ende des im Feld Wert der Variablen gezeigten Texts (betätigen Sie die Taste Ende, um sicherzustellen, dass der Cursor tatsächlich ans Ende des Textes in diesem Textfeld gesetzt wird). Geben Sie nun den vollständigen Pfadnamen Ihres MySQL-Verzeichnisses `bin` ein (beispielsweise `C:\Programme\MySQL\MySQL Server 5.1\bin`). Achten Sie dabei darauf, dass dieser Pfad durch ein Semikolon von den übrigen Werten in diesem Feld abgetrennt ist. Bestätigen Sie nun alle angezeigten Dialogfelder nacheinander durch Anklicken der jeweiligen Schaltflächen OK, bis keine offenen Dialogfelder mehr angezeigt werden. Sie sollten jetzt aus jedem beliebigen Verzeichnis heraus jedes ausführbare MySQL-Programm durch Eingabe seines Namens an der DOS-Eingabeaufforderung starten können, ohne den vollständigen Pfad angeben zu müssen. Dies betrifft die Server, den mysql-Client und alle befehlszeilenbasierten MySQL-Hilfsprogramme wie mysqladmin und mysqldump.

  Wenn Sie mehrere MySQL Server auf Ihrem System betreiben, sollten Sie das MySQL-Verzeichnis `bin` nicht der Windows-Umgebungsvariablen `PATH` hinzufügen.

Warnung: Bei der manuellen Editierung der Umgebungsvariablen `PATH` müssen Sie größte Vorsicht walten lassen: Wenn Sie einen Teil des Werts von `PATH` versehentlich löschen oder ändern, kann das System instabil oder sogar unbrauchbar werden.

Bei der Installation des Dienstes können die folgenden zusätzlichen Argumente in MySQL 5.1 verwendet werden:

- Sie können unmittelbar auf die Option `--install` einen Dienstnamen angeben. Der Standardname für den Dienst lautet `MySQL`.

- Wird ein Name für den Dienst angegeben, so kann genau eine weitere Option folgen. Konventionsgemäß ist dies `--defaults-file=`file_name``; hierdurch wird der Name einer Optionsdatei angegeben, die der Server beim Start auslesen soll.

  Sie können statt `--defaults-file` auch eine beliebige andere Option angeben, doch dies wird nicht empfohlen. `--defaults-file` ist flexibler, da es Ihnen die Festlegung einer Vielzahl von Startoptionen für den Server gestattet, die einfach in der spezifizierten Optionsdatei abgelegt werden.

- Sie können auch eine Option `--local-service` gefolgt vom Dienstnamen angeben. In diesem Fall wird der Server über das Windows-Konto `LocalService` ausgeführt, welches über eingeschränkte Systemberechtigungen verfügt. Dieses Konto ist nur unter Windows XP oder höher vorhanden. Werden beide Optionen `--defaults-file` und `--local-service` auf den Dienstnamen folgend angegeben, dann ist die Reihenfolge unerheblich.

Bei einem MySQL Server, der als Windows-Dienst installiert ist, bestimmen die folgenden Grundsätze den Dienstnamen und die vom Server verwendeten Optionsdateien:

- Wenn der Dienstinstallationsbefehl keinen Dienstnamen oder den Vorgabenamen (`MySQL`) gefolgt von der Option `--install` angibt, dann verwendet der Server den Dienstnamen `MySQL` und liest seine Optionen aus dem Abschnitt `[mysqld]` der Standardoptionsdateien aus.

- Wurde im Dienstinstallationsbefehl ein anderer Dienstname als `MySQL` gefolgt von der Option `--install` angegeben, dann verwendet der Server diesen anderen Namen. Die Optionen werden dann aus dem Abschnitt in den Standardoptionsdateien ausgelesen, der den gleichen Namen hat wie der Dienst selbst.

  Außerdem liest der Server auch den Abschnitt `[mysqld]` in den Standardoptionsdateien aus. Sie können den Abschnitt `[mysqld]` also für diejenigen Optionen verwenden, die allen MySQL-Diensten gemeinsam sind, und zusätzlich einen Abschnitt mit dem Namen eines bestimmten Dienstes konfigurieren, der dann von dem Server benutzt wird, der mit diesem Dienstnamen installiert wurde.

- Wenn im Dienstinstallationsbefehl die Option `--defaults-file` auf den Dienstnamen folgend angegeben wird, liest der Server nur die Optionen im Abschnitt `[mysqld]` der angegebenen Datei aus und ignoriert die Standardoptionsdateien.

Nehmen wir einmal den folgenden Befehl als ein etwas komplexeres Beispiel:

    C:\> "C:\Programme\MySQL\MySQL Server 5.1\bin\mysqld"
              --install MySQL --defaults-file=C:\my-opts.cnf

Hier wird der Standarddienstname (`MySQL`) auf die Option `--install` folgend angegeben. Wäre keine Option `--defaults-file` vorhanden, dann würde dieser Befehl dafür sorgen, dass der Server den Abschnitt `[mysqld]` in den Standardoptionsdateien ausliest. Da allerdings die Option `--defaults-file` angegeben ist, liest der Server die Optionen im Abschnitt `[mysqld]` der spezifizierten Datei.

Sie können Optionen auch als Startparameter im Windows-Hilfsprogramm Dienste festlegen, bevor Sie den MySQL-Dienst starten.

Wurde ein MySQL Server als Dienst installiert, dann startet Windows den Dienst automatisch beim Systemstart. Der Dienst lässt sich auch direkt aus dem Hilfsprogramm Dienste oder mithilfe des Befehls NET START MySQL starten. Der NET-Befehl unterscheidet hierbei keine Groß-/Kleinschreibung.

Wenn mysqld als Dienst ausgeführt wird, hat es keinen Zugriff auf ein Konsolenfenster; insofern werden keine Meldungen angezeigt. Wenn mysqld nicht startet, kontrollieren Sie, ob der Server im Fehlerlog Meldungen eingetragen hat, die auf die Ursache des Problems schließen lassen. Das Fehlerlog befindet sich im MySQL-Datenverzeichnis (z. B. `C:\Programme\MySQL\MySQL Server 5.1\data`). Es handelt sich um die Datei mit der Erweiterung `.err`.

Wenn ein MySQL Server als Dienst installiert wurde und dieser Dienst ausgeführt wird, beendet Windows ihn automatisch beim Herunterfahren. Der Server kann auch manuell im Hilfsprogramm `Dienste`, mit dem Befehl NET STOP MySQL oder dem Befehl mysqladmin shutdown beendet werden.

Außerdem haben Sie die Möglichkeit, den Server als manuellen Dienst zu installieren, wenn Sie nicht wollen, dass der Dienst beim Hochfahren automatisch gestartet wird. Verwenden Sie zu diesem Zweck die Option `--install-manual` statt `--install`:

    C:\> "C:\Programme\MySQL\MySQL Server 5.1\bin\mysqld" --install-manual

Um einen Server zu entfernen, der als Dienst installiert ist, beenden Sie ihn zunächst, sofern er noch ausgeführt wird; hierzu verwenden Sie den Befehl NET STOP MYSQL. Danach entfernen Sie ihn mit der Option `--remove`:

    C:\> "C:\Programme\MySQL\MySQL Server 5.1\bin\mysqld" --remove

Wenn mysqld nicht als Dienst ausgeführt wird, können Sie ihn über die Befehlszeile starten. Informationen zur Vorgehensweise finden Sie in Abschnitt 2.3.11, „Starten von MySQL von der Windows-Befehlszeile“.

Bitte schlagen Sie in Abschnitt 2.3.14, „Troubleshooting einer MySQL-Installation unter Windows“, nach, wenn Sie bei der Installation Probleme haben sollten.

### 2.3.13. Test der MySQL-Installation

Ob der MySQL Server funktioniert, können Sie durch Ausführen eines der folgenden Befehle leicht überprüfen:

    C:\> "C:\Programme\MySQL\MySQL Server 5.1\bin\mysqlshow"
    C:\> "C:\Programme\MySQL\MySQL Server 5.1\bin\mysqlshow" -u root mysql
    C:\> "C:\Programme\MySQL\MySQL Server 5.1\bin\mysqladmin" version status proc
    C:\> "C:\Programme\MySQL\MySQL Server 5.1\bin\mysql" test

Wenn mysqld nur langsam auf TCP/IP-Verbindungen von Clientprogrammen reagiert, liegt wahrscheinlich ein DNS-Problem vor. Starten Sie in einem solchen Fall mysqld mit der Option `--skip-name-resolve` und verwenden Sie nur `localhost` und IP-Nummern in der Spalte `Host` der MySQL-Grant-Tabellen.

Sie können die Verwendung einer Named-Pipe-Verbindung (statt einer TCP/IP-Verbindung) erzwingen, indem Sie die Optionen `--pipe` oder `--protocol=PIPE` verwenden oder den Punkt `.` als Hostnamen angeben. Verwenden Sie die Option `--socket`, um den Namen der Pipe anzugeben, sofern Sie nicht den Namen der Standard-Pipe verwenden wollen.

### 2.3.14. Troubleshooting einer MySQL-Installation unter Windows

Wenn Sie MySQL zum ersten Mal installieren und ausführen, können bestimmte Fehler auftreten, die verhindern, dass der MySQL Server gestartet wird. Dieser Abschnitt soll Ihnen dabei helfen, einige dieser Fehler zu diagnostizieren und zu beheben.

Ihre erste Ressource bei der Fehlersuche ist das Fehlerlog. Der MySQL Server verwendet das Fehlerlog zur Aufzeichnung von Daten zu dem Fehler, der verhindert, dass der Server gestartet werden kann. Das Fehlerlog befindet sich im Datenverzeichnis, das in Ihrer Datei `my.ini` angegeben ist. Die Standardposition des Datenverzeichnisses ist `C:\Programme\MySQL\MySQL Server 5.1\data`. Siehe auch Abschnitt 5.12.1, „Die Fehler-Logdatei“.

Eine andere Informationsquelle zu möglichen Fehlern sind die Konsolenmeldungen, die beim Starten des MySQL-Dienstes angezeigt werden. Verwenden Sie den Befehl NET START mysql an der Befehlszeile, nachdem Sie mysqld als Dienst installiert haben, um Fehlermeldungen anzuzeigen, die beim Start des MySQL Servers als Dienst erzeugt werden. Siehe auch Abschnitt 2.3.12, „Starten von MySQL als Windows-Dienst“.

Die folgenden Beispiele zeigen weitere häufig auftretende Fehlermeldungen, die bei der Installation von MySQL und dem ersten Start des Servers angezeigt werden können:

- Wenn der MySQL Server die `mysql`-Berechtigungsdatenbank oder andere kritische Dateien nicht finden kann, erscheinen Meldungen folgenden Typs:

      System error 1067 has occurred.
      Fatal error: Can't open privilege tables: Table 'mysql.host' doesn't exist

  Solche Meldungen treten häufig auf, wenn das MySQL-Datenbank- oder das MySQL-Datenverzeichnis nicht an der Standardposition (`C:\Programme\MySQL\MySQL Server 5.1` bzw. `C:\Programme\MySQL\MySQL Server 5.1\data`) installiert wurde.

  Die Situation entsteht, wenn MySQL aktualisiert und in einem neuen Verzeichnis installiert, aber die Konfigurationsdatei nicht an die geänderte Umgebung angepasst wurde. Außerdem kann es zu Konflikten zwischen alten und neuen Konfigurationsdateien kommen. Benennen Sie alte Konfigurationsdateien in jedem Fall um oder löschen Sie sie, bevor Sie MySQL aktualisieren.

  Wenn Sie MySQL in ein anderes Verzeichnis als `C:\Programme\MySQL\MySQL Server 5.1` installiert haben, müssen Sie sicherstellen, dass dies dem MySQL Server bekannt ist. Hierzu verwenden Sie die Konfigurationsdatei `my.ini`. Die Datei mit dem Namen `my.ini` muss in Ihrem Windows-Verzeichnis gespeichert sein (normalerweise `C:\WINDOWS` oder `C:\WINNT`). Sie können die exakte Position der Umgebungsvariable `WINDIR` entnehmen. Hierzu geben Sie den folgenden Befehl an der Befehlszeile ein:

      C:\> echo %WINDIR%

  Eine Optionsdatei kann mit jedem Texteditor (z. B. dem Windows-Editor) erstellt und bearbeitet werden. Ist MySQL beispielsweise in `E:\mysql` installiert und befindet sich das Datenverzeichnis in `D:\MySQLdata`, dann können Sie eine Optionsdatei erstellen, die einen Abschnitt `[mysqld]` enthält. In diesem geben Sie die folgenden Werte für die Parameter `basedir` und `datadir` an:

      [mysqld]
      # set basedir to your installation path
      basedir=E:/mysql
      # set datadir to the location of your data directory
      datadir=D:/MySQLdata

  Beachten Sie, dass Windows-Pfadnamen in Optionsdateien nicht mit Backslashs, sondern mit normalen Schrägstrichen angegeben werden. Wenn Sie Backslashs (umgekehrte Schrägstriche) verwenden, müssen Sie sie doppelt angeben:

      [mysqld]
      # set basedir to your installation path
      basedir=C:\\Program Files\\MySQL\\MySQL Server 5.1
      # set datadir to the location of your data directory
      datadir=D:\\MySQLdata

  Wenn Sie den Wert `datadir` in Ihrer MySQL-Konfigurationsdatei ändern, müssen Sie den Inhalt des vorhandenen MySQL-Datenverzeichnisses verschieben, bevor Sie den MySQL Server neu starten.

  Siehe auch Abschnitt 2.3.8, „Anlegen einer Optionsdatei“.

- Wenn Sie MySQL neu installieren oder aktualisieren, ohne den vorhandenen MySQL-Dienst zu beenden und zu entfernen, und zur Installation den MySQL-Konfigurations-Assistenten verwenden, dann wird unter Umständen folgende Fehlermeldung angezeigt:

      Error: Cannot create Windows service for MySql. Error: 0

  Dies passiert, wenn der Konfigurations-Assistent einen Dienst zu installieren versucht und einen anderen Dienst gleichen Namens vorfindet.

  Eine Lösung dieses Problems besteht darin, bei Verwendung des Konfigurations-Assistenten einen anderen Dienstnamen als `mysql` auszuwählen. Hierdurch wird der neue Dienst korrekt installiert. Allerdings bleibt dann ein veralteter Dienst zurück. Dies ist an sich zwar unproblematisch, aber trotzdem sollten alte Dienste, die nicht mehr erforderlich sind, korrekt entfernt werden.

  Um den alten `mysql`-Dienst permanent zu entfernen, führen Sie den folgenden Befehl als Benutzer mit Administratorrechten an der Befehlszeile aus:

      C:\> sc delete mysql
      [SC] DeleteService SUCCESS

  Wenn das Hilfsprogramm `sc` bei Ihrer Windows-Version nicht vorhanden ist, laden Sie das Hilfsprogramm `delsrv` unter http://www.microsoft.com/windows2000/techinfo/reskit/tools/existing/delsrv-o.asp herunter und verwenden Sie die Syntax `delsrv mysql`.

### 2.3.15. Upgrade von MySQL unter Windows

Dieser Abschnitt listet einige der Schritte auf, die bei der Aktualisierung von MySQL unter Windows erforderlich sind.

1. Lesen Sie Abschnitt 2.10, „MySQL aktualisieren (Upgrade/Downgrade)“. Sie finden dort weitere, nicht Windows-spezifische Informationen zum Upgrade von MySQL.

2. Fertigen Sie immer eine Sicherung Ihrer aktuellen MySQL-Installation an, bevor Sie ein Upgrade durchführen. Siehe auch Abschnitt 5.10.1, „Datenbank-Datensicherungen“.

3. Laden Sie die aktuelle Windows-Distribution von MySQL unter http://dev.mysql.com/downloads/ herunter.

4. Vor Durchführung des Upgrades müssen Sie den Server beenden. Ist der Server als Dienst installiert, dann beenden Sie ihn durch Eingabe des folgenden Befehls an der Befehlszeile:

       C:\> NET STOP MYSQL

   Wird der MySQL Server nicht als Dienst ausgeführt, dann beenden Sie ihn mit dem folgenden Befehl:

       C:\> "C:\Programme\MySQL\MySQL Server 5.1\bin\mysqladmin" -u root shutdown

   Hinweis: Wenn das MySQL-Benutzerkonto `root` ein Passwort aufweist, müssen Sie mysqladmin mit der Option `-p` aufrufen und das Passwort auf Aufforderung angeben.

5. Wenn Sie von einer MySQL-Version vor 4.1.5 auf MySQL 5.1 aktualisieren oder ein Upgrade von einer MySQL-Version, die aus einem ZIP-Archiv installiert wurde, auf eine mit dem MySQL-Installations-Assistenten zu installierende Version durchführen, dann müssen Sie die vorherige Installation und den MySQL-Dienst (sofern der Server als Dienst installiert ist) manuell entfernen.

   Verwenden Sie den folgenden Befehl, um den MySQL-Dienst zu entfernen:

       C:\> C:\mysql\bin\mysqld --remove

   Wenn Sie den vorhandenen Dienst nicht entfernen, kann der MySQL-Installations-Assistent den neuen MySQL-Dienst unter Umständen nicht korrekt installieren.

6. Wenn Sie den MySQL-Installations-Assistenten verwenden, starten Sie den Assistenten wie in Abschnitt 2.3.4, „Verwendung des MySQL-Installations-Assistenten“, beschrieben.

7. Wenn Sie MySQL aus einem ZIP-Archiv installieren, extrahieren Sie das Archiv. Sie können die vorhandene MySQL-Installation entweder überschreiben (diese befindet sich normalerweise im Verzeichnis `C:\mysql`) oder es in ein anderes Verzeichnis (z. B. `C:\mysql4`) installieren. Wir empfehlen das Überschreiben der vorhandenen Installation.

8. Wenn Sie MySQL als Windows-Dienst ausführen und Sie den Dienst zu einem früheren Zeitpunkt dieses Vorgangs deinstallieren mussten, installieren Sie ihn jetzt neu. (Siehe auch Abschnitt 2.3.12, „Starten von MySQL als Windows-Dienst“.)

9. Starten Sie den Server neu. Verwenden Sie beispielsweise NET START MySQL, wenn Sie MySQL als Dienst ausführen, oder rufen Sie mysqld auf andere Weise direkt auf.

10. Wenn Fehler auftreten, finden Sie weitere Informationen in Abschnitt 2.3.14, „Troubleshooting einer MySQL-Installation unter Windows“.

### 2.3.16. MySQL unter Windows im Vergleich zu MySQL unter Unix

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 binary_log_file --result-file=/tmp/bin.sql
      C:\> mysql --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

## 2.4. MySQL unter Linux installieren

Die empfohlene Vorgehensweise zur Installation von MySQL unter Linux besteht in der Verwendung von RPM-Paketen. Die MySQL-RPMs werden derzeit auf einem SuSE Linux 7.3-System erstellt, sollten aber unter den meisten Linux-Versionen funktionieren, die rpm unterstützen und `glibc` verwenden. Wie Sie sich die RPM-Pakete beschaffen, lesen Sie in Abschnitt 2.1.3, „Woher man MySQL bekommt“.

MySQL AB bietet eine Reihe plattformspezifischer RPMs an. Der Unterschied zwischen einem plattformspezifischen und einem generischen RPM besteht darin, dass ein plattformspezifisches RPM auf der Zielplattform erstellt und dynamisch verknüpft wurde, wohingegen ein generisches RPM statisch mit LinuxThreads verknüpft ist.

Hinweis: RPM-Distributionen von MySQL werden häufig von anderen Anbietern bereitgestellt. Beachten Sie, dass Merkmale und Funktionsumfang sich von den Versionen unterscheiden können, die von MySQL AB angeboten werden, und dass die Angaben in diesem Handbuch nicht unbedingt für deren Installation gelten. Ziehen Sie im Zweifelsfall die Dokumentation des Anbieters zu Rate.

Wenn Sie Probleme mit einer RPM-Datei haben (also etwa, wenn die Fehlermeldung `Sorry, the host '`xxxx`' could not be looked up` angezeigt wird), finden Sie weitere Informationen in Abschnitt 2.12.1.2, „Anmerkungen zur Binärdistribution (Linux)“.

In den meisten Fällen müssen Sie nur die Pakete `MySQL-server` und `MySQL-client` installieren, um eine lauffähige MySQL-Installation zu erhalten. Die übrigen Pakete sind für eine Standardinstallation nicht erforderlich. Wenn Sie einen MySQL-Max-Server mit Zusatzfunktionen verwenden wollen, sollten Sie auch das RPM `MySQL-Max` installieren. Allerdings sollten Sie dies erst nach der Installation des `MySQL-server`-RPM durchführen. Siehe auch Abschnitt 5.3, „mysqld-max, ein erweiterter mysqld-Server“.

Wenn Sie bei dem Versuch, MySQL-Pakete zu installieren, einen Abhängigkeitsfehler erhalten (z. B. `error: removing these packages would break dependencies: libmysqlclient.so.10 is needed by ...`), dann sollten Sie auch das Paket `MySQL-shared-compat` installieren, denn dieses enthält die beiden gemeinsamen Bibliotheken für die Abwärtskompatibilität (`libmysqlclient.so.12` für MySQL 4.0 und `libmysqlclient.so.10` für MySQL 3.23) .

Einige Linux-Distributionen werden immer noch mit MySQL 3.23 ausgeliefert und verknüpfen Anwendungen gewöhnlich dynamisch, um Festplattenkapazität zu sparen. Befinden sich diese gemeinsamen Bibliotheken in einem separaten Paket (z. B. `MySQL-shared`), dann reicht es aus, dieses Paket einfach installiert zu lassen und nur die MySQL Server- und -Clientpakete zu aktualisieren (diese sind statisch verknüpft und hängen nicht von den gemeinsamen Bibliotheken ab). Bei Distributionen, in denen die gemeinsamen Bibliotheken im selben Paket enthalten sind wie der MySQL Server (z. B. Red Hat Linux), können Sie entweder unser `MySQL-shared`-RPM für Version 3.23 installieren oder stattdessen das Paket `MySQL-shared-compat` verwenden.

Die folgenden RPM-Pakete sind verfügbar:

- `MySQL-server-`VERSION`.i386.rpm`

  Das ist der MySQL Server. Sie benötigen ihn in jedem Fall, sofern Sie nicht lediglich eine Verbindung mit einem MySQL Server herstellen wollen, der auf einem anderen Computer ausgeführt wird. Hinweis: Server-RPM-Dateien hießen vor MySQL 4.0.10 `MySQL-`VERSION`.i386.rpm` (d. h., der Zusatz `-server` war im Namen nicht enthalten).

- `MySQL-Max-`VERSION`.i386.rpm`

  Das ist der MySQL Max-Server. Dieser Server verfügt über zusätzliche Fähigkeiten, die der Server im RPM `MySQL-server` nicht aufweist. Sie müssen das RPM `MySQL-server` jedoch zuerst installieren, da es für `MySQL-Max` erforderlich ist.

- `MySQL-client-`VERSION`.i386.rpm`

  Die MySQL-Standardclientprogramme. Dieses Paket sollten Sie immer installieren.

- `MySQL-bench-`VERSION`.i386.rpm`

  Tests und Benchmarks. Erfordert Perl und das Modul `DBD::mysql`.

- `MySQL-devel-`VERSION`.i386.rpm`

  Die Bibliotheken und Include-Dateien, die erforderlich sind, wenn Sie andere MySQL-Clients (z. B. die Perl-Module) kompilieren wollen.

- `MySQL-shared-`VERSION`.i386.rpm`

  Dieses Paket enthält die gemeinsamen Bibliotheken (`libmysqlclient.so*`), die bestimmte Sprachen und Anwendungen benötigen, um MySQL dynamisch laden und verwenden zu können.

- `MySQL-shared-compat-`VERSION`.i386.rpm`

  Dieses Paket enthält die gemeinsamen Bibliotheken für MySQL 3.23 und MySQL 4.0. Installieren Sie es statt `MySQL-shared`, wenn Sie Anwendungen haben, die dynamisch mit MySQL 3.23 verknüpft sind, Sie aber auf MySQL 4.0 aktualisieren wollen, ohne die Bibliotheksabhängigkeiten zu durchbrechen. Das Paket ist ab MySQL 4.0.13 verfügbar.

- `MySQL-embedded-`VERSION`.i386.rpm`

  Dies ist die eingebettete MySQL Server-Bibliothek (verfügbar ab MySQL 4.0).

- `MySQL-`VERSION`.src.rpm`

  Dieses Paket enthält den Quellcode aller zuvor aufgeführten Pakete. Es kann auch zur Neuerstellung der RPMs auf anderen Architekturen (z. B. Alpha oder SPARC) verwendet werden.

Um alle in einem RPM-Paket (z. B. einem `MySQL-server`-RPM) enthaltenen Dateien anzuzeigen, führen Sie den folgenden Befehl aus:

    shell> rpm -qpl MySQL-server-VERSION.i386.rpm

Wollen Sie eine minimale Standardinstallation durchführen, dann installieren Sie die Server- und Client-RPMs:

    shell> rpm -i MySQL-server-VERSION.i386.rpm
    shell> rpm -i MySQL-client-VERSION.i386.rpm

Wenn Sie nur die Clientprogramme benötigen, dann installieren Sie lediglich das Client-RPM:

    shell> rpm -i MySQL-client-VERSION.i386.rpm

Das RPM-Format bietet eine Funktion zur Überprüfung der Integrität und Authentifizierung von Paketen vor der Installation. Wenn Sie mehr zu dieser Funktion erfahren wollen, lesen Sie Abschnitt 2.1.4, „Bestätigen der Paketintegrität mittels MD5-Prüfsummen oder `GnuPG`“.

Das Server-RPM legt Daten im Verzeichnis `/var/lib/mysql` ab. Außerdem richtet das RPM ein Anmeldekonto für einen Benutzer namens `mysql` (sofern nicht bereits vorhanden) ein, über das der MySQL Server ausgeführt wird, und erstellt die entsprechenden Einträge in `/etc/init.d/`, um den Server automatisch mit dem System zu starten. (Dies bedeutet, dass Sie, wenn Sie zuvor bereits eine Installation durchgeführt und Änderungen an deren Startskript vorgenommen haben, eine Kopie des Skripts erstellen sollten, damit es bei der Installation eines neueren RPM nicht verloren geht.) Weitere Informationen dazu, wie MySQL automatisch mit dem System gestartet werden kann, finden Sie in Abschnitt 2.9.2.2, „MySQL automatisch starten und anhalten“.

Wenn Sie das MySQL-RPM auf älteren Linux-Distributionen installieren wollen, die Initialisierungsskripten in `/etc/init.d` noch nicht (direkt oder über eine symbolische Verknüpfung) unterstützen, dann sollten Sie eine symbolische Verknüpfung erstellen, die auf die Position verweist, an der Ihre Initialisierungsskripten tatsächlich installiert sind. Heißt die Position etwa `/etc/rc.d/init.d`, dann geben Sie vor der Installation des RPM die folgenden Befehle ein, um `/etc/init.d` als symbolische Verknüpfung zu erstellen, die darauf verweist:

    shell> cd /etc
    shell> ln -s rc.d/init.d .

Allerdings sollten die aktuellen Versionen aller wichtigen Linux-Distributionen das neue Verzeichnislayout unterstützen, das `/etc/init.d` verwendet, da es für die LSB-Kompatibilität (Linux Standard Base) erforderlich ist.

Wenn zu den RPM-Dateien, die Sie installieren, `MySQL-server` gehört, dann sollte der Server mysqld nach der Installation einwandfrei funktionieren. Sie sollten ihn mithilfe von MySQL starten können.

Klappt etwas nicht, dann erhalten Sie weitere Informationen im Abschnitt zur Installation von Binärdistributionen. Siehe auch Abschnitt 2.7, „Installation von MySQL auf anderen Unix-ähnlichen Systemen“.

Hinweis: Für die in den MySQL-Grant-Tabellen aufgeführten Konten gibt es zunächst noch keine Passwörter. Wenn Sie den Server gestartet haben, sollten Sie entsprechend der in Abschnitt 2.9, „Einstellungen und Tests nach der Installation“, beschriebenen Verfahrensweise Passwörter für diese Konten einrichten.

## 2.5. Installation von MySQL unter Mac OS X

Sie können MySQL unter Mac OS X 10.2.x („Jaguar“) oder höher mithilfe eines Mac OS X-Binärpakets im PKG-Format anstelle der binären Tar-Distribution installieren. Bitte beachten Sie, dass ältere Mac OS X-Versionen (z. B. 10.1.x) nicht durch dieses Paket unterstützt werden.

Das Paket befindet sich in einer Festplattenimagedatei (`.dmg`), die Sie zunächst einbinden müssen. Doppelklicken Sie im Finder auf das zugehörige Symbol. Danach binden Sie das Image ein und zeigen seinen Inhalt an.

Wie Sie sich MySQL beschaffen, lesen Sie in Abschnitt 2.1.3, „Woher man MySQL bekommt“.

Hinweis: Bevor Sie mit der Installation fortfahren, müssen Sie alle laufenden MySQL Server-Instanzen herunterfahren. Dies tun Sie entweder mit der MySQL-Manager-Anwendung (unter Mac OS X Server) oder mithilfe von mysqladmin shutdown an der Befehlszeile.

Um nun die MySQL-PGK-Datei zu installieren, doppelklicken Sie auf das Paketsymbol. Nun wird das Installationsprogramm für das Mac OS X-Paket gestartet. Dieses Programm geleitet Sie durch die Installation von MySQL.

Aufgrund eines Bugs im Mac OS X-Paketinstallationsprogramm wird bei Anzeige des Dialogfelds zur Auswahl des Ziellaufwerks unter Umständen die folgende Fehlermeldung angezeigt:

    You cannot install this software on this disk. (null)

Klicken Sie in diesem Fall einmal auf die Schaltfläche `Go Back`, um zum vorherigen Bildschirm zurückzukehren. Klicken Sie dann auf `Continue`, um das Dialogfeld zur Auswahl des Ziellaufwerks erneut aufzurufen. Nun sollten Sie das Ziellaufwerk problemlos auswählen können. Wir haben diesen Bug Apple bereits gemeldet. Das Problem wird dort untersucht.

Das Mac OS X-PKG von MySQL installiert sich im Verzeichnis `/usr/local/mysql-`VERSION``. Ferner wird eine symbolische Verknüpfung `/usr/local/mysql` eingerichtet, die ebenfalls auf die neue Position verweist. Ist ein Verzeichnis namens `/usr/local/mysql` bereits vorhanden, dann wird dieses zunächst in `/usr/local/mysql.bak` umbenannt. Außerdem erstellt das Installationsprogramm die Grant-Tabellen in der `mysql`-Datenbank. Hierzu führt es den Befehl mysql_install_db aus.

Das Installationslayout ähnelt dem einer tar-Binärdistribution: Alle MySQL-Binärdateien befinden sich im Verzeichnis `/usr/local/mysql/bin`. Die MySQL-Socketdatei wird standardmäßig als `/tmp/mysql.sock` erstellt. Siehe auch Abschnitt 2.1.5, „Installationslayouts“.

Für die MySQL-Installation ist ein Mac OS X-Benutzerkonto mit dem Namen `mysql` erforderlich. Unter Mac OS X 10.2 und höher sollte ein solches Konto standardmäßig vorhanden sein.

Wenn Sie Mac OS X Server ausführen, sollte eine MySQL-Version bereits installiert sein. Die folgende Tabelle zeigt die MySQL-Versionen, die mit den verschiedenen Versionen von Mac OS X Server ausgeliefert werden.

Mac OS X Server-Version | MySQL-Version
10.2–10.2.2 | 3.23.51
10.2.3–10.2.6 | 3.23.53
10.3 | 4.0.14
10.3.2 | 4.0.16
10.4.0 | 4.1.10a

Dieses Handbuch behandelt nur die Installation des offiziellen MySQL-PKG für Mac OS X. Lesen Sie in jedem Fall Apples Hilfeinformationen zur Installation von MySQL: Starten Sie die Anwendung „Hilfeanzeige“ und wählen Sie die Hilfe für „Mac OS X-Server“. Suchen Sie dann nach dem Begriff „MySQL“ und lesen Sie das Thema „MySQL installieren“.

Beachten Sie bei vorinstallierten MySQL-Versionen auf Mac OS X Server insbesondere, dass Sie mysqld mit dem Befehl safe_mysqld statt mysqld_safe starten müssen, wenn die betreffende MySQL-Version älter ist als 4.0.

Haben Sie zuvor MySQL-Pakete für Mac OS X von Marc Liyanage verwendet (http://www.entropy.ch), dann können Sie die auf den dortigen Seiten beschriebenen Aktualisierungsanweisungen für Pakete einfach unter Verwendung der dort bezeichneten Installationsstruktur für Binärdistributionen befolgen.

Aktualisieren Sie von Marcs Versionen 3.23.xx oder von der Mac OS X Server-Version von MySQL auf das offizielle MySQL-PKG, dann müssen Sie die vorhandenen MySQL-Berechtigungstabellen ebenfalls in das aktuelle Format konvertieren, da einige neue Sicherheitsberechtigungen hinzugefügt worden sind. Siehe auch Abschnitt 5.6, „mysql_fix_privilege_tables — Upgrade von MySQL-Systemtabellen“.

Wenn Sie wollen, dass MySQL während des Systemstarts automatisch gestartet wird, müssen Sie auch das MySQL-Startobjekt installieren. Es ist auf dem Mac OS X-Installationsmedium als separates Installationspaket enthalten. Doppelklicken Sie einfach auf das Symbol MySQLStartupItem.pkg und folgen Sie dann den Anweisungen am Bildschirm.

Beachten Sie, dass das Startobjekt nur einmal installiert werden darf! Es ist nicht notwendig, das Startobjekt bei jeder späteren Aktualisierung des MySQL-Pakets vorzunehmen.

Das Startobjekt für MySQL wird in `/Library/Startobjekte/MySQLCOM` installiert. (Vor MySQL 4.1.2 hieß das Verzeichnis `/Library/StartupItems/MySQL`, aber dies führt zu einem Konflikt mit dem MySQL-Startobjekt, das von Mac OS X Server installiert wurde.) Bei der Startobjektinstallation wird eine Variable `MYSQLCOM=-YES-` in der Systemkonfigurationsdatei `/etc/hostconfig` ergänzt. Wenn Sie den automatischen Start von MySQL deaktivieren wollen, ändern Sie einfach den Wert der Variablen wie folgt: `MYSQLCOM=-NO-`.

Unter Mac OS X Server verwendet die MySQL-Standardinstallation die Variable `MYSQL` in der Datei `/etc/hostconfig`. Das Startobjekt-Installationsprogramm von MySQL AB deaktiviert diese Variable (`MYSQL=-NO-`). Hierdurch werden beim Systemstart Konflikte mit der Variablen `MYSQLCOM` vermieden, die vom MySQL AB-Startobjekt verwendet wird. Allerdings wird dabei ein laufender MySQL Server nicht heruntergefahren. Dies müssen Sie selbst erledigen.

Nach der Installation können Sie MySQL mithilfe der folgenden Befehle in einem Terminal-Fenster ausführen. Um diesen Vorgang durchzuführen, benötigen Sie Administratorrechte.

Wenn Sie das Startobjekt installiert haben, verwenden Sie folgenden Befehl:

    shell> sudo /Library/StartupItems/MySQLCOM/MySQLCOM start
    (Enter your password, if necessary)
    (Press Control-D or enter "exit" to exit the shell)

Wenn Sie das Startobjekt hingegen nicht installiert haben, geben Sie diese Befehlsfolge ein:

    shell> cd /usr/local/mysql
    shell> sudo ./bin/mysqld_safe
    (Enter your password, if necessary)
    (Press Control-Z)
    shell> bg
    (Press Control-D or enter "exit" to exit the shell)

Sie sollten nun in der Lage sein, eine Verbindung zum MySQL Server herzustellen. Hierzu können Sie etwa `/usr/local/mysql/bin/mysql` ausführen.

Hinweis: Für die in den MySQL-Grant-Tabellen aufgeführten Konten gibt es zunächst noch keine Passwörter. Wenn Sie den Server gestartet haben, sollten Sie entsprechend der in Abschnitt 2.9, „Einstellungen und Tests nach der Installation“, beschriebenen Verfahrensweise Passwörter für diese Konten einrichten.

Sie sollten in der Ressourcendatei Ihrer Shell Aliase ergänzen, um den Zugriff auf häufig verwendete Programme wie mysql und mysqladmin über die Befehlszeile zu erleichtern. Die Syntax für bash lautet:

    alias mysql=/usr/local/mysql/bin/mysql
    alias mysqladmin=/usr/local/mysql/bin/mysqladmin

Für tcsh verwenden Sie Folgendes:

    alias mysql /usr/local/mysql/bin/mysql
    alias mysqladmin /usr/local/mysql/bin/mysqladmin

Noch vorteilhafter ist es, `/usr/local/mysql/bin` zur Umgebungsvariablen `PATH` hinzuzufügen. Fügen Sie beispielsweise die folgende Zeile zu Ihrer Datei `$HOME/.bashrc` hinzu, wenn Sie bash als Shell verwenden:

    PATH=${PATH}:/usr/local/mysql/bin

Fügen Sie folgende Zeile zu Ihrer Datei `$HOME/.tcshrc` hinzu, wenn Sie tcsh als Shell verwenden:

    setenv PATH ${PATH}:/usr/local/mysql/bin

Wenn weder `.bashrc` noch `.tcshrc` in Ihrem Homeverzeichnis vorhanden sind, erstellen Sie die Datei mit einem Texteditor.

Aktualisieren Sie eine vorhandene Installation, dann beachten Sie, dass, wenn Sie ein neues MySQL-PKG installieren, das Verzeichnis der alten Installation nicht entfernt wird. Leider bietet das Mac OS X-Installationsprogramm noch nicht die Funktionalität, die zur korrekten Aktualisierung zuvor installierter Pakete erforderlich ist.

Um Ihre vorhandenen Datenbanken mit der neuen Installation verwenden zu können, müssen Sie den Inhalt des alten Datenverzeichnisses in das neue Datenverzeichnis kopieren. Stellen Sie sicher, dass weder der alte noch der neue Server laufen, während Sie diesen Kopiervorgang durchführen. Haben Sie die MySQL-Datenbankdateien der alten Installation kopiert und den neuen Server erfolgreich gestartet, dann können Sie die alten Installationsdateien entfernen, um Festplattenspeicher zu sparen. Ebenfalls entfernen sollten Sie ältere Versionen der Package-Receipt-Verzeichnisse in `/Library/Receipts/mysql-`VERSION`.pkg`.

## 2.6. Installation von MySQL unter NetWare

Die Portierung von MySQL auf NetWare wurde von Novell gezielt unterstützt. Kunden von Novell werden erfreut sein zu erfahren, dass NetWare 6.5 im Bündel mit MySQL-Binärdateien ausgeliefert wird – komplett mit einer automatischen Lizenz zur kommerziellen Nutzung, gültig für alle Server, auf denen diese NetWare-Version läuft.

MySQL für NetWare wird mithilfe einer Kombination aus Metrowerks CodeWarrior for NetWare und speziellen Versionen der GNU-Autotools zur Cross-Kompilierung kompiliert.

Die aktuellen Binärpakete für NetWare erhalten Sie unter http://dev.mysql.com/downloads/. Siehe auch Abschnitt 2.1.3, „Woher man MySQL bekommt“.

Ein NetWare-Server, auf dem MySQL laufen soll, muss die folgenden Anforderungen erfüllen:

- Das aktuelle Support Pack für NetWare 6.5 muss installiert sein.

- Das System muss die Mindestanforderungen erfüllen, die Novell für die Ausführung der betreffenden NetWare-Version stellt.

- MySQL-Daten und die Programmbinärdateien müssen auf einem NSS-Volume installiert sein (traditionelle Volumes werden nicht unterstützt).

Gehen Sie wie folgt vor, um MySQL für NetWare zu installieren:

1. Wenn Sie eine vorhandene Installation aktualisieren, beenden Sie den MySQL Server. Hierzu geben Sie den folgenden Befehl an der Serverkonsole ein:

       SERVER:  mysqladmin -u root shutdown

   Hinweis: Wenn das MySQL-Benutzerkonto `root` ein Passwort aufweist, müssen Sie mysqladmin mit der Option `-p` aufrufen und das Passwort auf Aufforderung angeben.

2. Melden Sie sich am Zielserver über einen Clientcomputer an, der Zugriff auf das Verzeichnis hat, in dem Sie MySQL installieren wollen.

3. Extrahieren Sie die ZIP-Datei mit dem Binärpaket auf den Server. Stellen Sie dabei sicher, dass die in der ZIP-Datei gespeicherten Pfade verwendet werden. Am sichersten ist das einfache Entpacken nach `SYS:\`.

   Wenn Sie eine vorhandene Installation aktualisieren, müssen Sie unter Umständen das Datenverzeichnis (beispielsweise `SYS:MYSQL\DATA`) kopieren. Gleiches gilt für die Datei `my.cnf`, sofern Sie diese an Ihre Bedürfnisse angepasst haben. Danach können Sie die alte Kopie von MySQL löschen.

4. Sie sollten dem Verzeichnis einen anderen, konsistenteren und einfacher zu handhabenden Namen geben. In den Beispielen dieses Handbuchs verwenden wir `SYS:MYSQL` als Bezeichnung für das Installationsverzeichnis.

   Beachten Sie, dass die MySQL-Installation unter NetWare nicht erkennt, ob eine MySQL-Version außerhalb des NetWare-Releases bereits vorhanden ist. Haben Sie also etwa die aktuelle MySQL-Version (ab MySQL 4.1 oder höher) aus dem Web in `SYS:\MYSQL` installiert, dann müssen Sie den Ordner umbenennen, bevor Sie den NetWare-Server aktualisieren; andernfalls werden in `SYS:\MySQL` vorhandene Dateien, die im NetWare Support Pack abgelegt sind, mit der MySQL-Version überschrieben.

5. Fügen Sie an der Serverkonsole einen Suchpfad für das Verzeichnis hinzu, welches die MySQL-NLMs enthält. Ein Beispiel:

       SERVER:  SEARCH ADD SYS:MYSQL\BIN

6. Initialisieren Sie ggf. das Datenverzeichnis und die Grant-Tabellen, indem Sie mysql_install_db an der Serverkonsole ausführen.

7. Starten Sie den MySQL Server mit mysqld_safe an der Serverkonsole.

8. Um die Installation abzuschließen, sollten Sie auch die folgenden Befehle in der Datei `autoexec.ncf` ergänzen. Wenn Ihre MySQL-Installation beispielsweise in `SYS:MYSQL` abgelegt ist und Sie MySQL automatisch starten wollen, fügen Sie folgende Befehle hinzu:

       #Starts the MySQL 5.1.x database server
       SEARCH ADD SYS:MYSQL\BIN
       MYSQLD_SAFE

   Führen Sie MySQL unter NetWare 6.0 aus, dann empfehlen wir Ihnen dringend die Verwendung der Option `--skip-external-locking` in der Befehlszeile:

       #Starts the MySQL 5.1.x database server
       SEARCH ADD SYS:MYSQL\BIN
       MYSQLD_SAFE --skip-external-locking

   Ferner ist es notwendig, `CHECK TABLE` und `REPAIR TABLE` anstelle von myisamchk zu verwenden, da myisamchk externe Sperren verwendet. Die externe Sperrung bereitet bei NetWare 6.0 bekanntermaßen Probleme. Diese wurden jedoch in NetWare 6.5 beseitigt.

   mysqld_safe stellt unter NetWare eine Bildschirmpräsenz bereit. Wenn Sie das NLM mysqld_safe entladen (herunterfahren), verschwindet der Bildschirm standardmäßig nicht. Stattdessen wird eine Benutzereingabe angefordert:

       *<NLM has terminated; Press any key to close the screen>*

   Wenn Sie hingegen wollen, dass NetWare den Bildschirm automatisch schließt, dann verwenden Sie die Option `--autoclose` für mysqld_safe. Ein Beispiel:

       #Starts the MySQL 5.1.x database server
       SEARCH ADD SYS:MYSQL\BIN
       MYSQLD_SAFE --autoclose

9. Wenn Sie MySQL installieren – sei es zum ersten Mal oder im Zuge der Aktualisierung von einer vorherigen Version –, dann müssen Sie das aktuellste passende Perl-Modul und die geeigneten PHP-Erweiterungen für NetWare herunterladen:

   - Perl: http://forge.novell.com/modules/xfcontent/downloads.php/perl/Modules/

   - PHP: http://forge.novell.com/modules/xfcontent/downloads.php/php/Modules/

     (Die PHP 5-Erweiterung für MySQL 4.1 sollte auch mit MySQL 5.1 funktionieren.)

Das Verhalten von mysqld_safe unter NetWare wird in Abschnitt 5.4.1, „mysqld_safe — Startskript für den MySQL-Server“, detailliert beschrieben.

War auf dem NetWare-Server bereits eine MySQL-Installation vorhanden, dann müssen Sie in jedem Fall in der Datei `autoexec.ncf` nach MySQL-Startbefehlen suchen und diese nach Bedarf bearbeiten oder löschen.

Hinweis: Für die in den MySQL-Grant-Tabellen aufgeführten Konten gibt es zunächst noch keine Passwörter. Wenn Sie den Server gestartet haben, sollten Sie entsprechend der in Abschnitt 2.9, „Einstellungen und Tests nach der Installation“, beschriebenen Verfahrensweise Passwörter für diese Konten einrichten.

## 2.7. Installation von MySQL auf anderen Unix-ähnlichen Systemen

Dieser Abschnitt behandelt die Installation der MySQL-Binärdistributionen, die für die verschiedenen Plattformen in Form komprimierter tar-Dateien (d. h. Dateien mit der Erweiterung `.tar.gz`) vorliegen. Eine detaillierte Liste finden Sie in Abschnitt 2.1.2.5, „MySQL-Binärdistributionen, die von MySQL AB kompiliert wurden“.

Wie Sie sich MySQL beschaffen, lesen Sie in Abschnitt 2.1.3, „Woher man MySQL bekommt“.

Eine tar-Datei mit einer Binärdistribution weist einen Namen mit dem Aufbau `mysql-`VERSION`-`OS`.tar.gz` auf. Hierbei ist ``VERSION`` eine Zahl (z. B. `5.1.5-alpha`), während `OS` das Betriebssystem bezeichnet, für das die Distribution vorgesehen ist (beispielsweise `pc-linux-i686`).

Neben diesen Universalpaketen bieten wir für ausgewählte Plattformen auch Binärdateien in plattformspezifischen Paketformaten an. Weitere Informationen zur Installation dieser Pakete finden Sie in Abschnitt 2.2, „Schnelle Standardinstallation von MySQL“.

Um eine MySQL-Binärdistribution in einer tar-Datei zu installieren, benötigen Sie die folgenden Tools:

- GNU `gunzip` zum Dekomprimieren der Distribution.

- Ein anständiges tar zum Entpacken der Distribution. GNU tar funktioniert bekanntermaßen. Bestimmte Betriebssysteme enthalten eine vorinstallierte Version von tar, die aber offenbar problematisch ist. Beispielsweise haben die tar-Varianten von Mac OS X und Sun Probleme mit langen Dateinamen. Unter Mac OS X können Sie das vorinstallierte Programm gnutar verwenden. Auf anderen Systemen mit fehlerhaften tar-Anwendungen sollten Sie zunächst GNU tar installieren.

Sollten Sie auf Probleme stoßen und einen Fehlerbericht speichern wollen, dann gehen Sie vor wie in Abschnitt 1.8, „Wie man Bugs oder Probleme meldet“, beschrieben.

Die wichtigsten Befehle, die bei der Installation und Verwendung einer MySQL-Binärdistribution ausgeführt werden müssen, sind die folgenden:

    shell> groupadd mysql
    shell> useradd -g mysql mysql
    shell> cd /usr/local
    shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf -
    shell> ln -s full-path-to-mysql-VERSION-OS mysql
    shell> cd mysql
    shell> scripts/mysql_install_db --user=mysql
    shell> chown -R root  .
    shell> chown -R mysql data
    shell> chgrp -R mysql .
    shell> bin/mysqld_safe --user=mysql &

Hinweis: Beim folgenden Vorgang werden keine Passwörter für MySQL-Konten eingerichtet. Wenn Sie den Vorgang abgeschlossen haben, fahren Sie fort bei Abschnitt 2.9, „Einstellungen und Tests nach der Installation“.

Hier nun eine detailliertere Version der vorangegangenen Beschreibung zur Installation einer Binärdistribution:

1. Fügen Sie einen Anmeldebenutzer und eine Gruppe hinzu, unter denen mysqld ausgeführt wird:

       shell> groupadd mysql
       shell> useradd -g mysql mysql

   Diese Befehle fügen die Gruppe `mysql` und den Benutzer `mysql` hinzu. Die Syntax für useradd und groupadd kann bei den verschiedenen Unix-Varianten etwas anders aussehen. Auch können die Befehlsnamen selbst variieren (z. B. adduser und addgroup).

   Unter Umständen wollen Sie dem Benutzer und der Gruppe einen anderen Namen als `mysql` zuweisen. In diesem Fall müssen Sie in den folgenden Schritten den entsprechenden Namen einsetzen.

2. Wählen Sie das Verzeichnis aus, in das Sie die Distribution entpacken wollen, und rufen Sie dieses auf. Im folgenden Beispiel entpacken wir die Distribution in `/usr/local`. (Die folgenden Anweisungen setzen deswegen auch voraus, dass Sie Berechtigungen zum Erstellen von Dateien und Verzeichnissen in `/usr/local` haben. Ist das Verzeichnis geschützt, dann müssen Sie die Installation als `root` durchführen.)

       shell> cd /usr/local

3. Beschaffen Sie sich wie in Abschnitt 2.1.3, „Woher man MySQL bekommt“, beschrieben eine Distributionsdatei. Die Binärdistributionen für alle Plattformen werden innerhalb eines Releases aus derselben MySQL-Quelldistribution erstellt.

4. Entpacken Sie die Distribution. Hierdurch wird das Installationsverzeichnis erstellt. Erstellen Sie dann eine symbolische Verknüpfung zu diesem Verzeichnis:

       shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf -
       shell> ln -s full-path-to-mysql-VERSION-OS mysql

   Der Befehl tar erstellt ein Verzeichnis namens `mysql-`VERSION`-`OS``. Der Befehl `ln` legt eine symbolische Verknüpfung zu diesem Verzeichnis an. Auf diese Weise können Sie das Installationsverzeichnis einfacher aufrufen als über `/usr/local/mysql`.

   Bei GNU tar ist kein separater Aufruf von `gunzip` erforderlich. Sie können die erste Zeile mit dem folgenden Alternativbefehl ersetzen, um die Distribution zu dekomprimieren und zu entpacken:

       shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz

5. Wechseln Sie nun in das Installationsverzeichnis:

       shell> cd mysql

   Sie werden im Verzeichnis `mysql` verschiedene Dateien und Unterverzeichnisse vorfinden. Die für die Installation wichtigsten Elemente sind die Unterverzeichnisse `bin` und `scripts`:

   - Das Verzeichnis `bin` enthält Clientprogramme und den Server. Sie sollten den vollständigen Pfadnamen dieses Verzeichnisses zu Ihrer Umgebungsvariablen `PATH` hinzufügen, damit Ihre Shell die MySQL-Programme korrekt findet. Siehe auch Anhang F, Umgebungsvariablen.

   - Das Verzeichnis `scripts` enthält das Skript mysql_install_db, welches zur Initialisierung der `mysql`-Datenbank mit den Grant-Tabellen verwendet wird, in denen die Serverzugriffsberechtigungen gespeichert sind.

6. Wenn Sie MySQL vorher noch nicht installiert hatten, müssen Sie die MySQL-Grant-Tabellen erstellen:

       shell> scripts/mysql_install_db --user=mysql

   Wenn Sie den Befehl als `root` ausführen, müssen Sie wie gezeigt die Option `--user` verwenden. Als Wert der Option sollte der Name des Anmeldekontos eingetragen werden, das Sie im ersten Schritt zur Verwendung für die Ausführung des Servers angegeben haben. Wenn Sie den Befehl ausführen, während Sie als dieser Benutzer angemeldet sind, können Sie die Option `--user` weglassen.

   Nach Erstellung oder Aktualisierung der Grant-Tabellen müssen Sie den Server manuell neu starten.

7. Weisen Sie als neuen Besitzer der Programmbinärdateien `root` und als neuen Besitzer des Datenverzeichnisses den Benutzer zu, unter dessen Konto Sie mysqld ausführen. Wenn Sie sich etwa im Installationsverzeichnis (`/usr/local/mysql`) befinden, sieht der Befehl wie folgt aus:

       shell> chown -R root  .
       shell> chown -R mysql data
       shell> chgrp -R mysql .

   Der erste Befehl setzt das Besitzerattribut der Dateien auf den Benutzer `root`. Der zweite setzt das Besitzerattribut des Datenverzeichnisses auf den Benutzer `mysql`. Der dritte schließlich setzt das Gruppenattribut auf die Gruppe `mysql`.

8. Wenn Sie wollen, dass MySQL beim Starten des Computers automatisch startet, können Sie `support-files/mysql.server` in das Verzeichnis kopieren, in dem sich die Startdateien Ihres Systems befinden. Weitere Informationen finden Sie im Skript `support-files/mysql.server` selbst und in Abschnitt 2.9.2.2, „MySQL automatisch starten und anhalten“.

9. Neue Konten können Sie mit dem Skript bin/mysql_setpermission einrichten, wenn Sie die Perl-Module `DBI` und `DBD::mysql` installieren. Informationen zur Vorgehensweise finden Sie in Abschnitt 2.13, „Anmerkungen zur Perl-Installation“.

10. Wenn Sie mysqlaccess verwenden wollen und Ihre MySQL-Distribution in einem anderen als dem Standardverzeichnis abgelegt ist, müssen Sie die Position ändern, an der mysqlaccess den mysql-Client vorzufinden erwartet. Bearbeiten Sie das Skript `bin/mysqlaccess` im Bereich von Zeile 18. Suchen Sie nach einer Zeile ähnlich der folgenden:

        $MYSQL     = '/usr/local/bin/mysql';    # path to mysql executable

    Ändern Sie den Pfad so ab, dass er die Position wiedergibt, an der mysql tatsächlich auf Ihrem System gespeichert ist. Andernfalls wird die Fehlermeldung `Broken Pipe` angezeigt, wenn Sie mysqlaccess ausführen.

Nachdem alles entpackt und installiert wurde, sollten Sie Ihre Distribution testen. Verwenden Sie den folgenden Befehl, um den MySQL Server zu starten:

    shell> bin/mysqld_safe --user=mysql &

Wenn der Befehl sofort fehlschlägt und die Meldung `mysqld ended` ausgibt, finden Sie unter Umständen hilfreiche Informationen in der Datei ``host_name`.err` im Datenverzeichnis.

Weitere Informationen zu mysqld_safe können Sie Abschnitt 5.4.1, „mysqld_safe — Startskript für den MySQL-Server“, entnehmen.

Hinweis: Für die in den MySQL-Grant-Tabellen aufgeführten Konten gibt es zunächst noch keine Passwörter. Wenn Sie den Server gestartet haben, sollten Sie entsprechend der in Abschnitt 2.9, „Einstellungen und Tests nach der Installation“, beschriebenen Verfahrensweise Passwörter für diese Konten einrichten.

## 2.8. Installation der Quelldistribution

Bevor Sie mit einer Installation aus einer Quelldistribution fortfahren, überprüfen Sie zunächst, ob nicht für Ihre Plattform eine Binärdatei von uns angeboten wird, die für Ihre Belange geeignet sein könnte. Wir haben viel Aufwand betrieben, um zu gewährleisten, dass unsere Binärdateien mit den optimalen Optionen erstellt werden.

Wie Sie sich eine MySQL-Quelldistribution beschaffen, erfahren Sie in Abschnitt 2.1.3, „Woher man MySQL bekommt“.

MySQL-Quelldistributionen werden als komprimierte tar-Archive bereitgestellt. Der Dateiname hat den folgenden Aufbau: `mysql-`VERSION`.tar.gz`. Hierbei ist `VERSION` eine Zahl wie beispielsweise `5.1.5-alpha`.

Zur Installation von MySQL aus einer Quelldistribution benötigen Sie die folgenden Tools:

- GNU `gunzip` zum Dekomprimieren der Distribution.

- Ein anständiges tar zum Entpacken der Distribution. GNU tar funktioniert bekanntermaßen. Bestimmte Betriebssysteme enthalten eine vorinstallierte Version von tar, die aber offenbar problematisch ist. Beispielsweise haben die tar-Varianten von Mac OS X und Sun Probleme mit langen Dateinamen. Unter Mac OS X können Sie das vorinstallierte Programm gnutar verwenden. Auf anderen Systemen mit fehlerhaften tar-Anwendungen sollten Sie zunächst GNU tar installieren.

- Einen funktionsfähigen ANSI C++-Compiler. gcc 2.95.2 oder höher, egcs 1.0.2 oder höher oder egcs 2.91.66, SGI C++ und SunPro C++ sind Compiler, die offensichtlich problemlos funktionieren. `libg++` wird bei der Verwendung von gcc nicht benötigt. gcc 2.7.x weist einen Fehler auf, der die Kompilierung bestimmter, hundertprozentig zulässiger C++-Dateien wie etwa `sql/sql_base.cc` unmöglich macht. Wenn Sie nur gcc 2.7.x haben, müssen Sie Ihr gcc so aktualisieren, dass es MySQL kompilieren kann. Auch gcc 2.8.1 weist bekanntermaßen Probleme auf bestimmten Plattformen auf, sollte also ebenfalls außen vor gelassen werden, sofern auf der betreffenden Plattform ein neuerer Compiler verfügbar ist.

  gcc 2.95.2 oder höher wird zur Kompilierung von MySQL 3.23.x empfohlen.

- Ein gutes make-Programm. GNU make wird immer empfohlen und ist unter Umständen sogar erforderlich. Wenn Sie Probleme haben, dann empfehlen wir GNU make 3.75 oder höher.

Benutzen Sie eine Version von gcc, die neu genug ist, um die Option `-fno-exceptions` zu kennen, dann ist es extrem wichtig, diese Option auch zu verwenden. Andernfalls kompilieren Sie unter Umständen eine Binärdatei, die zu unvorhersagbaren Zeitpunkten abstürzt. Ferner empfehlen wir die Verwendung von `-felide-constructors` und `-fno-rtti` mit `-fno-exceptions`. Im Zweifelsfall tun Sie Folgendes:

    CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors \
           -fno-exceptions -fno-rtti" ./configure \
           --prefix=/usr/local/mysql --enable-assembler \
           --with-mysqld-ldflags=-all-static

Auf den meisten Systemen erhalten Sie so eine schnelle und stabile Binärdatei.

Sollten Sie auf Probleme stoßen und einen Fehlerbericht speichern wollen, dann gehen Sie vor wie in Abschnitt 1.8, „Wie man Bugs oder Probleme meldet“, beschrieben.

### 2.8.1. Schnellinstallation, Überblick

Die wichtigsten Befehle, die bei der Installation und Verwendung einer MySQL-Quelldistribution ausgeführt werden müssen, sind die folgenden:

    shell> groupadd mysql
    shell> useradd -g mysql mysql
    shell> gunzip < mysql-VERSION.tar.gz | tar -xvf -
    shell> cd mysql-VERSION
    shell> ./configure --prefix=/usr/local/mysql
    shell> make
    shell> make install
    shell> cp support-files/my-medium.cnf /etc/my.cnf
    shell> cd /usr/local/mysql
    shell> bin/mysql_install_db --user=mysql
    shell> chown -R root  .
    shell> chown -R mysql var
    shell> chgrp -R mysql .
    shell> bin/mysqld_safe --user=mysql &

Wenn Sie von einem Quell-RPM ausgehen, tun Sie Folgendes:

    shell> rpmbuild --rebuild --clean MySQL-VERSION.src.rpm

Auf diese Weise wird ein Binär-RPM erstellt, das Sie installieren können. Bei älteren RPM-Versionen müssen Sie unter Umständen den Befehl rpmbuild durch rpm ersetzen.

Hinweis: Beim folgenden Vorgang werden keine Passwörter für MySQL-Konten eingerichtet. Wenn Sie den Vorgang abgeschlossen haben, fahren Sie fort mit Abschnitt 2.9, „Einstellungen und Tests nach der Installation“, wo Konfiguration und Tests nach der Installation beschrieben sind.

Hier nun eine detailliertere Version der vorangegangenen Beschreibung zur MySQL-Installation aus einer Quelldistribution:

1. Fügen Sie einen Anmeldebenutzer und eine Gruppe hinzu, unter denen mysqld ausgeführt wird:

       shell> groupadd mysql
       shell> useradd -g mysql mysql

   Diese Befehle fügen die Gruppe `mysql` und den Benutzer `mysql` hinzu. Die Syntax für useradd und groupadd kann bei den verschiedenen Unix-Varianten etwas anders aussehen. Auch können die Befehlsnamen selbst variieren (z. B. adduser und addgroup).

   Unter Umständen wollen Sie dem Benutzer und der Gruppe einen anderen Namen als `mysql` zuweisen. In diesem Fall müssen Sie in den folgenden Schritten den entsprechenden Namen einsetzen.

2. Wählen Sie das Verzeichnis aus, in das Sie die Distribution entpacken wollen, und rufen Sie dieses auf.

3. Beschaffen Sie sich wie in Abschnitt 2.1.3, „Woher man MySQL bekommt“, beschrieben eine Distributionsdatei.

4. Entpacken Sie die Distribution in das aktuelle Verzeichnis:

       shell> gunzip < /path/to/mysql-VERSION.tar.gz | tar xvf -

   Dieser Befehl erstellt ein Verzeichnis namens `mysql-`VERSION``.

   Bei GNU tar ist kein separater Aufruf von `gunzip` erforderlich. Alternativ verwenden Sie den folgenden Befehl zum Dekomprimieren und Entpacken der Distribution:

       shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz

5. Wechseln Sie nun in das Stammverzeichnis der entpackten Distribution:

       shell> cd mysql-VERSION

   Beachten Sie, dass Sie MySQL derzeit nur von diesem Stammverzeichnis aus installieren können. Sie können es nicht in einem anderen Verzeichnis erstellen.

6. Konfigurieren Sie den Release und kompilieren Sie alles:

       shell> ./configure --prefix=/usr/local/mysql
       shell> make

   Wenn Sie configure ausführen, sollten Sie weitere Optionen festlegen. Führen Sie ./configure --help aus, um eine Liste der Optionen anzuzeigen. Abschnitt 2.8.2, „Typische configure-Optionen“, beschreibt einige der nützlicheren Optionen.

   Wenn Sie eine E-Mail an eine MySQL-Mailingliste senden, weil configure fehlgeschlagen ist und Sie Hilfe benötigen, fügen Sie bitte alle ggf. in der Datei `config.log` vorhandenen Zeilen hinzu, von denen Sie annehmen, dass sie zur Problembehebung beitragen können. Ferner sollten Sie die letzten paar Zeilen der Ausgabe von configure aufführen. Verwenden Sie zum Übermitteln eines Fehlerberichts die in Abschnitt 1.8, „Wie man Bugs oder Probleme meldet“, beschriebenen Anweisungen.

   Schlägt die Kompilierung fehl, dann finden Sie hilfreiche Informationen in Abschnitt 2.8.4, „Probleme beim Kompilieren?“.

7. Installieren Sie die Distribution:

       shell> make install

   Wenn Sie eine Optionsdatei konfigurieren wollen, verwenden Sie eine der im Verzeichnis `support-files` vorhandenen Dateien als Vorlage. Ein Beispiel:

       shell> cp support-files/my-medium.cnf /etc/my.cnf

   Sie müssen diese Befehle unter Umständen als `root` ausführen.

   Wenn Sie die Unterstützung für `InnoDB`-Tabellen konfigurieren wollen, sollten Sie die Datei `/etc/my.cnf` bearbeiten, das Zeichen `#` vor den Optionszeilen entfernen, die mit `innodb_...` beginnen, und die Optionswerte nach Bedarf ändern. Siehe auch Abschnitt 4.3.2, „my.cnf-Optionsdateien“, und Abschnitt 14.2.3, „Konfiguration“.

8. Wechseln Sie nun in das Installationsverzeichnis:

       shell> cd /usr/local/mysql

9. Wenn Sie MySQL vorher noch nicht installiert hatten, müssen Sie die MySQL-Grant-Tabellen erstellen:

       shell> bin/mysql_install_db --user=mysql

   Wenn Sie den Befehl als `root` ausführen, sollten Sie wie gezeigt die Option `--user` verwenden. Als Wert der Option sollte der Name des Anmeldekontos eingetragen werden, das Sie im ersten Schritt zur Verwendung für die Ausführung des Servers angegeben haben. Wenn Sie den Befehl ausführen, während Sie als dieser Benutzer angemeldet sind, können Sie die Option `--user` weglassen.

   Wenn Sie die Grant-Tabellen mit mysql_install_db erstellt haben, müssen Sie den Server manuell neu starten. Wie dies mit dem Befehl mysqld_safe geht, wird in einem späteren Schritt erläutert.

10. Weisen Sie als neuen Besitzer der Programmbinärdateien `root` und als neuen Besitzer des Datenverzeichnisses den Benutzer zu, unter dessen Konto Sie mysqld ausführen. Wenn Sie sich etwa im Installationsverzeichnis (`/usr/local/mysql`) befinden, sieht der Befehl wie folgt aus:

        shell> chown -R root  .
        shell> chown -R mysql var
        shell> chgrp -R mysql .

    Der erste Befehl setzt das Besitzerattribut der Dateien auf den Benutzer `root`. Der zweite setzt das Besitzerattribut des Datenverzeichnisses auf den Benutzer `mysql`. Der dritte schließlich setzt das Gruppenattribut auf die Gruppe `mysql`.

11. Wenn Sie wollen, dass MySQL beim Starten des Computers automatisch startet, können Sie `support-files/mysql.server` in das Verzeichnis kopieren, in dem sich die Startdateien Ihres Systems befinden. Weitere Informationen finden Sie im Skript `support-files/mysql.server` selbst und in Abschnitt 2.9.2.2, „MySQL automatisch starten und anhalten“.

12. Neue Konten können Sie mit dem Skript bin/mysql_setpermission einrichten, wenn Sie die Perl-Module `DBI` und `DBD::mysql` installieren. Informationen zur Vorgehensweise finden Sie in Abschnitt 2.13, „Anmerkungen zur Perl-Installation“.

Nachdem alles installiert wurde, sollten Sie Ihre Distribution testen. Verwenden Sie den folgenden Befehl, um den MySQL Server zu starten:

    shell> /usr/local/mysql/bin/mysqld_safe --user=mysql &

Wenn der Befehl sofort fehlschlägt und die Meldung `mysqld ended` ausgibt, finden Sie unter Umständen hilfreiche Informationen in der Datei ``host_name`.err` im Datenverzeichnis.

Weitere Informationen zu mysqld_safe können Sie Abschnitt 5.4.1, „mysqld_safe — Startskript für den MySQL-Server“, entnehmen.

Hinweis: Für die in den MySQL-Grant-Tabellen aufgeführten Konten gibt es zunächst noch keine Passwörter. Wenn Sie den Server gestartet haben, sollten Sie entsprechend der in Abschnitt 2.9, „Einstellungen und Tests nach der Installation“, beschriebenen Verfahrensweise Passwörter für diese Konten einrichten.

### 2.8.2. Typische configure-Optionen

Das Skript configure bietet Ihnen umfassende Kontrolle darüber, wie Sie Ihre MySQL-Quelldistribution konfigurieren. Normalerweise werden Sie dies mithilfe der Optionen von configure an der Befehlszeile tun. Sie können configure auch über bestimmte Umgebungsvariablen beeinflussen. Siehe auch Anhang F, Umgebungsvariablen. Eine Liste der Optionen, die von configure unterstützt werden, erhalten Sie nach Ausführen des folgenden Befehls:

    shell> ./configure --help

In der Folge wollen wir einige der häufiger verwendeten Optionen von configure beschreiben:

- Um nur die Clientbibliotheken und -programme von MySQL (und nicht den Server) zu kompilieren, verwenden Sie die Option `--without-server`:

      shell> ./configure --without-server

  Wenn Sie keinen C++-Compiler haben, kann mysql nicht kompiliert werden (dies ist das einzige Clientprogramm, das C++ erfordert). In diesem Fall können Sie den Code, der das Vorhandensein des C++-Compilers prüft, aus configure entfernen und dann ./configure mit der Option `--without-server` ausführen. In diesem Fall wird bei der Kompilierung zwar versucht, mysql zu erstellen, aber Sie können alle Warnungen bezüglich `mysql.cc` ignorieren. (Wenn make stehen bleibt, geben Sie make -k ein, um das System anzuweisen, die Erstellung auch bei Auftreten von Fehlern abzuschließen.)

- Wenn Sie die eingebettete MySQL-Bibliothek (`libmysqld.a`) erstellen wollen, verwenden Sie die Option `--with-embedded-server`.

- Wenn Sie nicht wollen, dass Ihre Logdateien und die Datenbankverzeichnisse in `/usr/local/var` abgelegt werden, verwenden Sie configure in der Art wie folgt:

      shell> ./configure --prefix=/usr/local/mysql
      shell> ./configure --prefix=/usr/local \
                 --localstatedir=/usr/local/mysql/data

  Der erste Befehl ändert das Installationspräfix, sodass alles in `/usr/local/mysql` (statt wie standardmäßig vorgesehen in `/usr/local`) installiert wird. Der zweite Befehl belässt das Installationsstandardpräfix zwar, ersetzt aber die Standardposition der Datenbankverzeichnisse (normalerweise `/usr/local/var`) durch `/usr/local/mysql/data`.

  Sie können die Positionen auch zum Zeitpunkt des Serverstarts angeben, indem Sie sie in die MySQL-Optionsdatei eintragen. Siehe auch Abschnitt 4.3.2, „my.cnf-Optionsdateien“.

- Wenn Sie Unix verwenden und die MySQL-Socketdatei an einer anderen Position als im Standardverzeichnis (normalerweise `/tmp` oder `/var/run`) ablegen wollen, verwenden Sie den configure-Befehl wie folgt:

      shell> ./configure \
                 --with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock

  Der Socketdateiname muss ein absoluter Pfadname sein. Sie können die Position von `mysql.sock` mithilfe einer Optionsdatei auch zum Zeitpunkt des Serverstarts einstellen. Siehe auch Abschnitt A.4.5, „Wie Sie die MySQL-Socketdatei `/tmp/mysql.sock` schützen oder ändern“.

- Wenn Sie statisch verknüpfte Programme kompilieren wollen, um etwa eine Binärdistribution zu erstellen, die Leistung zu optimieren oder Probleme mit bestimmten Red Hat Linux-Distributionen zu umgehen, dann führen Sie configure wie folgt aus:

      shell> ./configure --with-client-ldflags=-all-static \
                 --with-mysqld-ldflags=-all-static

- Wenn Sie gcc einsetzen und `libg++` oder `libstdc++` nicht installiert haben, können Sie configure anweisen, gcc als C++-Compiler zu verwenden:

      shell> CC=gcc CXX=gcc ./configure

  Verwenden Sie gcc als C++-Compiler, dann wird keine Verknüpfung mit `libg++` oder `libstdc++` probiert. Dies kann auch dann von Vorteil sein, wenn Sie die betreffenden Bibliotheken installiert haben. In Verbindung mit einigen Versionen dieser Bibliotheken sind bei MySQL-Benutzern in der Vergangenheit nicht nachvollziehbare Probleme aufgetreten.

  Die folgende Liste führt einige Compiler auf. Ferner aufgelistet sind die zugehörigen Einstellungen für Umgebungsvariablen.

  - gcc 2.7.2:

        CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors"

  - egcs 1.0.3a:

        CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors \
        -fno-exceptions -fno-rtti"

  - gcc 2.95.2:

        CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro \
        -felide-constructors -fno-exceptions -fno-rtti"

  - `pgcc` 2.90.29 oder höher:

        CFLAGS="-O3 -mpentiumpro -mstack-align-double" CXX=gcc \
        CXXFLAGS="-O3 -mpentiumpro -mstack-align-double \
        -felide-constructors -fno-exceptions -fno-rtti"

  In den meisten Fällen erhalten Sie eine vernünftig optimierte MySQL-Binärdatei, wenn Sie die Optionen der vorangegangenen Tabelle verwenden und die folgenden Optionen in der configure-Befehlszeile hinzufügen:

      --prefix=/usr/local/mysql --enable-assembler \
      --with-mysqld-ldflags=-all-static

  Mit anderen Worten: Die vollständige configure-Zeile würde bei allen aktuellen gcc-Versionen ungefähr wie folgt aussehen:

      CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro \
      -felide-constructors -fno-exceptions -fno-rtti" ./configure \
      --prefix=/usr/local/mysql --enable-assembler \
      --with-mysqld-ldflags=-all-static

  Alle von uns auf der MySQL-Website unter http://dev.mysql.com/downloads/ bereitgestellten Binärdateien wurden mit optimalen Einstellungen kompiliert und sollten für die meisten Benutzer perfekt geeignet sein. Siehe auch Abschnitt 2.1.2.5, „MySQL-Binärdistributionen, die von MySQL AB kompiliert wurden“. Es gibt einige Konfigurationseinstellungen, durch deren Optimierung Sie eine noch schnellere Binärdatei erstellen können. Diese Einstellungen sind jedoch nur für fortgeschrittene Benutzer geeignet. Siehe auch Abschnitt 7.5.4, „Wie Kompilieren und Linken die Geschwindigkeit von MySQL beeinflusst“.

  Schlägt die Erstellung fehl und werden Fehlermeldungen erzeugt, weil Ihr Compiler oder Linker die gemeinsame Bibliothek `libmysqlclient.so.`N`` nicht erstellen konnte (wobei `N` eine Versionsnummer ist), dann können Sie dieses Problem umgehen, indem Sie die Option `--disable-shared` für configure ergänzen. In diesem Fall erstellt configure die gemeinsame Bibliothek `libmysqlclient.so.`N`` nicht.

- Standardmäßig verwendet MySQL den Zeichensatz `latin1` (cp1252 West European). Um den Standardzeichensatz zu ändern, verwenden Sie die Option `--with-charset`:

      shell> ./configure --with-charset=CHARSET

  `CHARSET` kann einen der folgenden Werte annehmen: `big5`, `cp1251`, `cp1257`, `czech`, `danish`, `dec8`, `dos`, `euc_kr`, `gb2312`, `gbk`, `german1`, `hebrew`, `hp8`, `hungarian`, `koi8_ru`, `koi8_ukr`, `latin1`, `latin2`, `sjis`, `swe7`, `tis620`, `ujis`, `usa7` oder `win1251ukr`. Siehe auch Abschnitt 5.11.1, „Der für Daten und zum Sortieren benutzte Zeichensatz“.

  Die Standardsortierung kann ebenfalls angegeben werden. Standardmäßig verwendet MySQL die Sortierung `latin1_swedish_ci`. Um diese Sortierung zu ändern, verwenden Sie die Option `--with-collation`:

      shell> ./configure --with-collation=COLLATION

  Wollen Sie Zeichensatz und Sortierung gleichzeitig ändern, dann verwenden Sie einfach beide Optionen `--with-charset` und `--with-collation`. Die Sortierung muss für den gewählten Zeichensatz zulässig sein. (Mit der Anweisung `SHOW COLLATION` können Sie die für den jeweiligen Zeichensatz zulässige Sortierung ermitteln.)

  Wenn Sie Zeichen zwischen Server und Client konvertieren wollen, dann sollten Sie einen Blick auf die Anweisung `SET NAMES` werfen. Siehe auch Abschnitt 13.5.3, „`SET`“, und Abschnitt 10.4, „Verbindungszeichensatz und -sortierfolge“.

  Warnung: Wenn Sie den Zeichensatz ändern, nachdem Sie bereits Tabellen erstellt haben, müssen Sie myisamchk -r -q --set-collation=`collation_name` für jede Tabelle ausführen. Andernfalls werden Ihre Indizes unter Umständen falsch sortiert. Dies kann passieren, wenn Sie MySQL installieren, einige Tabellen erstellen und nachfolgend MySQL so umkonfigurieren, dass ein anderer Zeichensatz verwendet wird, und dann neu installieren.

  Mit der configure-Option `--with-extra-charsets=`LIST`` können Sie definieren, welche zusätzlichen Zeichensätze in den Server einkompiliert werden sollen. `LIST` hat dabei einen der folgenden Werte:

  - eine Liste von Zeichensatznamen, die durch Leerzeichen getrennt sind

  - `complex`, wenn alle Zeichensätze enthalten sein sollen, die sich nicht dynamisch laden lassen

  - `all`, wenn grundsätzlich alle Zeichensätze in den Binärdateien enthalten sein sollen

- Um MySQL mit Debugging-Code zu konfigurieren, verwenden Sie die Option `--with-debug`:

      shell> ./configure --with-debug

  Auf diese Weise wird eine sichere Speicherzuweisung in die Konfiguration integriert, die in der Lage ist, bestimmte Fehler zu finden und Informationen zu den Abläufen zu vermitteln. Siehe auch Abschnitt E.1, „Einen MySQL-Server debuggen“.

- Wenn Ihre Clientprogramme Threads verwenden, müssen Sie eine Thread-sichere Version der MySQL-Clientbibliothek mit der Konfigurationsoption `--enable-thread-safe-client` erstellen. Auf diese Weise wird eine Bibliothek `libmysqlclient_r` angelegt, mit der Sie Ihre Thread-basierten Anwendungen verknüpfen sollten. Siehe auch Abschnitt 24.2.15, „Wie man einen Thread-Client herstellt“.

- Es ist möglich, MySQL mit Unterstützung für große Tabellen zu erstellen. Hierzu verwenden Sie die Option `--with-big-tables`.

  Diese Option sorgt dafür, dass die Variablen, die die Ergebnisse der Datensatzzählungen enthalten, als `unsigned long long` statt als `unsigned long` gespeichert werden. Sie erlaubt Tabellen die Aufnahme von ca. 1,844E+19 ((232)2) Datensätzen statt 232 (ca. 4,295E+09) Datensätzen. Zuvor war es notwendig gewesen, `-DBIG_TABLES` manuell an den Compiler zu übergeben, um diese Funktion zu aktivieren.

- Optionen, die spezifisch für bestimmte Betriebssysteme sind, finden Sie in den jeweiligen Abschnitten dieses Handbuchs. Siehe auch Abschnitt 2.12, „Betriebssystemspezifische Anmerkungen“.

### 2.8.3. Installation vom Entwicklungs-Source-Tree

Vorsicht: Sie sollten diesen Abschnitt nur lesen, wenn Sie Interesse daran haben, uns beim Testen unseres neuen Codes behilflich zu sein. Wenn Sie MySQL lediglich in funktionsfähiger Form auf Ihrem System einrichten wollen, sollten Sie einen Standard-Release (entweder als Binär- oder als Quelldistribution) verwenden.

Um unseren aktuellsten Entwicklungs-Source-Tree zu bekommen, laden Sie zunächst den kostenlosen BitKeeper-Client herunter, sofern Sie ihn noch nicht haben, und installieren ihn. Sie erhalten den Client unter http://www.bitmover.com/bk-client.shar.

Zur Installation des BitKeeper-Clients unter Unix verwenden Sie die folgenden Befehle:

    shell> sh bk-client.shar
    shell> cd bk_client-1.1
    shell> make all
    shell> PATH=$PWD:$PATH

Zur Installation des BitKeeper-Clients unter Windows gehen Sie wie folgt vor:

1. Laden Sie Cygwin von http://cygwin.com herunter und installieren Sie es.

2. Vergewissern Sie sich, dass gcc und make unter Cygwin installiert wurden. Sie können dies überprüfen, indem Sie die Befehle which gcc und which make absetzen. Ist eines der Programme nicht installiert, dann führen Sie den Paket-Manager von Cygwin aus, wählen gcc und/oder make und führen die Installation aus.

3. Führen Sie dann unter Cygwin die folgenden Befehle aus:

       shell> sh bk-client.shar
       shell> cd bk_client-1.1

   Nachfolgend bearbeiten Sie das `Makefile` und ändern die Zeile `$(CC) $(CFLAGS) -o sfio -lz sfio.c` wie folgt:

       $(CC) $(CFLAGS) -o sfio sfio.c -lz

   Nun führen Sie den Befehl make aus und stellen den Pfad ein:

       shell> make all
       shell> PATH=$PWD:$PATH

Der kostenlose BitKeeper-Client wird mit seinem Quellcode ausgeliefert. Dieser Quellcode ist auch die einzige Dokumentation, die für den kostenlosen Client verfügbar ist.

Nachdem Sie den BitKeeper-Client installiert haben, können Sie auf den MySQL-Entwicklungs-Source-Tree zugreifen:

1. Wechseln Sie in das Verzeichnis, das als Arbeitsverzeichnis vorgesehen ist, und erstellen Sie mit dem folgenden Befehl eine lokale Kopie des Zweigs von MySQL 5.1:

       shell> sfioball -r+ bk://mysql.bkbits.net/mysql-5.1-new mysql-5.1

   In obigem Beispiel wird der Source-Tree im Unterverzeichnis `mysql-5.1/` Ihres aktuellen Verzeichnisses eingerichtet.

   Der erste Download des Source-Trees kann je nach Geschwindigkeit Ihrer Verbindung eine Weile dauern. Haben Sie bitte Geduld.

2. Sie benötigen GNU make, autoconf 2.58 (oder höher), automake 1.8, libtool 1.5 und m4, um die nächste Befehlsgruppe auszuführen. Zwar werden viele Betriebssysteme mit eigener Implementierung von make ausgeliefert, aber die Wahrscheinlichkeit, dass der Kompilierungsvorgang mit merkwürdigen Fehlermeldungen abbricht, ist doch recht hoch. Aus diesem Grund wird dringend empfohlen, stattdessen GNU make (das manchmal auch als gmake bezeichnet wird) zu verwenden.

   Glücklicherweise wird eine große Anzahl von Betriebssystemen mit vorinstallierten GNU-Tools ausgeliefert oder enthält deren Installationspakete. In jedem Fall können Sie sie auch unter den folgenden Adressen herunterladen:

   - http://www.gnu.org/software/autoconf/

   - http://www.gnu.org/software/automake/

   - http://www.gnu.org/software/libtool/

   - http://www.gnu.org/software/m4/

   - http://www.gnu.org/software/make/

   Um MySQL 5.1 zu konfigurieren, benötigen Sie ferner GNU bison 1.75 oder höher. Ältere Versionen von bison zeigen unter Umständen folgenden Fehler an:

       sql_yacc.yy:#####: fatal error: maximum table size (32767) exceeded

   Hinweis: Die maximale Tabellengröße wurde mitnichten überschritten; vielmehr wird der Fehler von Bugs in älteren bison-Versionen ausgelöst.

   Das folgende Beispiel zeigt die typischen Befehle, die zur Konfiguration eines Source-Trees erforderlich sind. Der erste Befehl `cd` wechselt in das oberste Verzeichnis des Trees. Hierbei ist `mysql-5.1` durch den korrekten Verzeichnisnamen zu ersetzen.

       shell> cd mysql-5.1
       shell> aclocal; autoheader
       shell> libtoolize --automake --force
       shell> automake --force --add-missing; autoconf
       shell> (cd storage/innobase; aclocal; autoheader; autoconf; automake)
       shell> (cd storage/bdb/dist; sh s_all)
       shell> ./configure  # Add your favorite options here
       shell> make

   Alternativ verwenden Sie BUILD/autorun.sh als Abkürzung für die folgende Befehlssequenz:

       shell> aclocal; autoheader
       shell> libtoolize --automake --force
       shell> automake --force --add-missing; autoconf
       shell> (cd storage/innobase; aclocal; autoheader; autoconf; automake)
       shell> (cd storage/bdb/dist; sh s_all)

   Die Befehlszeilen, die in die Verzeichnisse `storage/innobase` bzw. `storage/bdb/dist` wechseln, dienen der Konfiguration der `InnoDB`- und Berkeley DB(`BDB`)-Speicher-Engines. Sie können diese Befehlszeilen weglassen, wenn Sie Unterstützung für `InnoDB` bzw. `BDB` nicht benötigen.

   Hinweis: Ab MySQL 5.1 wird Code, der spezifisch für bestimmte Speicher-Engines ist, in ein `storage`-Verzeichnis verschoben. So liegt beispielsweise `InnoDB`-Code jetzt in `storage/innobase` und `NDBCluster`-Code in `storage/ndb`.

   Wenn Ihnen in dieser Phase seltsame Fehler angezeigt werden, dann vergewissern Sie sich, dass libtool wirklich installiert wurde.

   Eine Sammlung unserer Standardkonfigurationsskripten befindet sich im Unterverzeichnis `BUILD/`. Unter Umständen finden Sie es praktischer, statt der vorangegangenen Gruppe von Shell-Befehlen das Skript `BUILD/compile-pentium-debug` zu verwenden. Um auf einer anderen Architektur zu kompilieren, ändern Sie das Skript ab, indem Sie Pentium-spezifische Flags entfernen.

3. Wenn die Erstellung abgeschlossen ist, führen Sie make install aus. Auf einem Produktionssystem sollten Sie dies allerdings mit Vorsicht tun: Es besteht die Möglichkeit, dass der Befehl die aktuelle Release-Installation überschreibt. Wenn bereits eine MySQL-Installation vorhanden ist, empfehlen wir die Ausführung von ./configure unter Zuweisung anderer als der für den Produktionsserver verwendeten Werte für die Optionen `--prefix`, `--with-tcp-port` und `--unix-socket-path`.

4. Prüfen Sie Ihre neue Installation auf Herz und Nieren und versuchen Sie, die neuen Funktionen zum Absturz zu bringen. Führen Sie zunächst make test aus. Siehe auch Abschnitt 26.1.2, „MySQL-Testsystem“.

5. Wenn Sie es bis zur make-Phase geschafft haben, aber die Distribution sich nicht kompilieren lässt, dann geben Sie das Problem in unsere Fehlerdatenbank ein. Beachten Sie hierzu die Anweisungen in Abschnitt 1.8, „Wie man Bugs oder Probleme meldet“. Haben Sie die aktuellen Versionen der erforderlichen GNU-Tools installiert und stürzen diese bei der Verarbeitung unserer Konfigurationsdateien ebenfalls ab, dann teilen Sie uns bitte auch dies mit. Wenn Sie allerdings `aclocal` ausführen und die Fehlermeldung `command not found` o. ä. erhalten, melden Sie dies bitte nicht. Überprüfen Sie stattdessen, ob alle notwendigen Tools installiert sind und Ihre Variable `PATH` korrekt eingestellt ist, damit Ihre Shell sie finden kann.

6. Wenn Sie das Repository mit sfioball kopiert haben, um den Source-Tree zu erhalten, sollten Sie regelmäßig update ausführen, um Ihre lokale Kopie zu aktualisieren. Zu diesem Zweck können Sie nach der Konfiguration des Repositorys jederzeit den folgenden Befehl verwenden:

       shell> update bk://mysql.bkbits.net/mysql-5.1-new

7. Sie können die Änderungshistorie des Trees mit allen Diffs überprüfen, indem Sie die Datei `BK/ChangeLog` im Source-Tree anzeigen und nach den dort aufgelisteten `ChangeSet`-Beschreibungen suchen. Um ein bestimmtes Changeset zu untersuchen, müssten Sie mit dem Befehl sfioball zwei bestimmte Revisionen des Source-Trees extrahieren und dann einen externen diff-Befehl aufrufen, um den Vergleich durchzuführen. Wenn Sie über ein paar spaßige Diffs oder über Code stolpern, zu dem Sie Fragen haben, schicken Sie einfach eine E-Mail an die MySQL-Mailingliste `internals`. Siehe auch Abschnitt 1.7.1, „Die MySQL-Mailinglisten“. Auch wenn Sie eine gute Idee haben, wie man etwas vielleicht besser lösen könnte, schicken Sie ruhig eine E-Mail mit einem Patch an die Liste.

Changesets, Anmerkungen und Quellcode können Sie auch online durchsuchen. Um die entsprechenden Informationen für MySQL 5.1 anzuzeigen, besuchen Sie http://mysql.bkbits.net:8080/mysql-5.1.

### 2.8.4. Probleme beim Kompilieren?

Alle MySQL-Programme lassen sich bei uns mit gcc sauber und ohne Warnungen unter Solaris oder Linux kompilieren. Auf anderen Systemen werden aufgrund von Unterschieden in den systemspezifischen Include-Dateien unter Umständen Warnungen angezeigt. Informationen dazu, welche Warnungen bei der Verwendung von MIT-pthreads angezeigt werden können, finden Sie in Abschnitt 2.8.5, „Anmerkungen zu MIT-pthreads“. Informationen zu anderen Problemen entnehmen Sie der folgenden Liste.

Die Lösung zahlreicher Probleme erfordert eine Umkonfiguration. Wenn Sie eine Umkonfiguration durchführen müssen, beachten Sie bitte die folgenden Hinweise:

- Wird configure nach einem vorherigen Aufruf erneut ausgeführt, dann werden unter Umständen Daten zugrunde gelegt, die während des vorherigen Aufrufs ermittelt worden waren. Diese Informationen sind in der Datei `config.cache` abgelegt. Nach dem Start prüft configure auf das Vorhandensein dieser Datei und liest ihren Inhalt ggf. aus – davon ausgehend, dass die Daten nach wie vor korrekt sind. Dies ist allerdings bei einer Umkonfigurierung nicht mehr der Fall.

- Jedes Mal, wenn Sie configure ausführen, müssen Sie zur Neukompilierung auch make erneut ausführen. Allerdings sollten Sie alte Objektdateien aus vorherigen Builds entfernen, da diese mit abweichenden Konfigurationsoptionen erstellt wurden.

Um die Verwendung veralteter Konfigurationsdaten oder Objektdateien zu verhindern, führen Sie die folgenden Befehle aus, bevor Sie configure erneut aufrufen:

    shell> rm config.cache
    shell> make clean

Alternativ können Sie auch make distclean ausführen.

Die folgende Liste enthält die bei der Kompilierung von MySQL am häufigsten auftretenden Probleme:

- Wenn Sie bei der Kompilierung von `sql_yacc.cc` Fehler wie die hier aufgeführten erhalten, ist offensichtlich nicht genug Arbeits- oder Auslagerungsspeicher vorhanden.

      Internal compiler error: program cc1plus got fatal signal 11
      Out of virtual memory
      Virtual memory exhausted

  Das Problem besteht darin, dass gcc zur Kompilierung von `sql_yacc.cc` mit Inline-Funktionen eine gewaltige Menge Speicher benötigt. Versuchen Sie in diesem Fall, configure mit der Option `--with-low-memory` auszuführen:

      shell> ./configure --with-low-memory

  Diese Option ergänzt die Kompilierungszeile um den Eintrag `-fno-inline`, wenn Sie gcc verwenden, bzw. um `-O0` bei Verwendung eines anderen Tools. Sie sollten die Option `--with-low-memory` auch dann verwenden, wenn Sie der Ansicht sind, dass so viel Arbeits- und Auslagerungsspeicher vorhanden ist, dass ein Speichermangel nicht wahrscheinlich ist. Dieses Problem wurde sogar schon auf Systemen mit wirklich großzügigen Hardwarekonfigurationen beobachtet und konnte stets mit der Option `--with-low-memory` behoben werden.

- Standardmäßig wählt configure c++ als Compiler-Namen aus, und GNU c++ verknüpft sich mit `-lg++`. Wenn Sie gcc verwenden, dann kann dieses Verhalten während der Konfiguration zu Problemen wie dem folgenden führen:

      configure: error: installation or configuration problem:
      C++ compiler cannot create executables.

  Ferner könnten Sie während der Kompilierung Probleme in Bezug auf g++, `libg++` oder `libstdc++` beobachten.

  Eine Ursache dieser Probleme besteht darin, dass Sie g++ entweder nicht haben oder dass Sie g++, nicht jedoch `libg++` oder `libstdc++` haben. Werfen Sie einen Blick in die Datei `config.log`. Sie sollten den Grund dafür, dass Ihr C++-Compiler nicht funktioniert, exakt angeben. Um derartige Probleme zu vermeiden, können Sie gcc als C++-Compiler verwenden. Setzen Sie die Umgebungsvariable `CXX` versuchsweise auf `"gcc -O3"`. Ein Beispiel:

      shell> CXX="gcc -O3" ./configure

  Dies funktioniert, weil gcc C++-Quelldateien ebenso kompiliert, wie es g++ tut, jedoch standardmäßig keine Verknüpfung mit `libg++` oder `libstdc++` herstellt.

  Eine andere Möglichkeit, diese Probleme zu beheben, besteht in der Installation von g++, `libg++` und `libstdc++`. Allerdings raten wir von der Verwendung von `libg++` oder `libstdc++` mit MySQL ab, da hierdurch nur die mysqld-Binärdatei vergrößert wird – Vorteile ergeben sich ansonsten keine. In Verbindung mit einigen Versionen dieser Bibliotheken sind bei MySQL-Benutzern in der Vergangenheit nicht nachvollziehbare Probleme aufgetreten.

- Bricht Ihre Kompilierung mit Fehlern wie dem folgenden ab, dann müssen Sie Ihre make-Version auf GNU make aktualisieren:

      making all in mit-pthreads
      make: Fatal error in reader: Makefile, line 18:
      Badly formed macro assignment

  Oder:

      make: file `Makefile' line 18: Must be a separator (:

  Oder:

      pthread.h: No such file or directory

  Es ist bekannt, dass Solaris und FreeBSD problematische make-Programme umfassen.

  GNU make 3.75 funktioniert erfahrungsgemäß.

- Wenn Sie Flags für die Verwendung durch Ihre C- oder C++-Compiler definieren wollen, sollten Sie dies tun, indem Sie die Flags den Umgebungsvariablen `CFLAGS` und `CXXFLAGS` hinzufügen. Sie können auf diese Weise auch die Compiler-Namen über `CC` und `CXX` angeben. Ein Beispiel:

      shell> CC=gcc
      shell> CFLAGS=-O3
      shell> CXX=gcc
      shell> CXXFLAGS=-O3
      shell> export CC CFLAGS CXX CXXFLAGS

  In Abschnitt 2.1.2.5, „MySQL-Binärdistributionen, die von MySQL AB kompiliert wurden“, finden Sie eine Liste der Flag-Definitionen, die sich bei verschiedenen Systemen als nützlich erwiesen haben.

- Wenn Sie bei der Kompilierung von mysqld Fehlermeldungen wie die nachfolgend gezeigte erhalten, hat configure den Typ des letzten Arguments von `accept()`, `getsockname()` oder `getpeername()` nicht korrekt erkannt:

      cxx: Error: mysqld.cc, line 645: In this statement, the referenced
           type of the pointer value ''length'' is ''unsigned long'',
           which is not compatible with ''int''.
      new_sock = accept(sock, (struct sockaddr *)&cAddr, &length);

  Um dieses Problem zu beheben, bearbeiten Sie die Datei `config.h` (diese wird durch configure erzeugt). Suchen Sie dort nach den folgenden Zeilen:

      /* Define as the base type of the last arg to accept */
      #define SOCKET_SIZE_TYPE XXX

  Setzen Sie `XXX` je nach Betriebssystem auf `size_t` oder `int`. (Sie müssen dies bei jeder Ausführung von configure tun, da configure `config.h` immer neu erstellt.)

- Die Datei `sql_yacc.cc` wird aus `sql_yacc.yy` erstellt. Normalerweise muss bei der Erstellung keine Datei `sql_yacc.cc` erzeugt werden, da MySQL bereits eine vorab generierte Kopie enthält. Sofern Sie sie aber trotzdem neu erstellen müssen, könnte unter Umständen folgende Fehlermeldung angezeigt werden:

      "sql_yacc.yy", line xxx fatal: default action causes potential ...

  Dies weist darauf hin, dass Ihre Version von yacc fehlerhaft ist. Sie müssen stattdessen wahrscheinlich bison (die GNU-Variante von yacc) installieren und verwenden.

- Unter Debian Linux 3.0 müssen Sie `gawk` anstelle des standardmäßigen `mawk` installieren, wenn Sie MySQL mit Berkeley DB-Unterstützung kompilieren wollen.

- Wenn Sie mysqld oder einen MySQL-Client debuggen müssen, führen Sie configure mit der Option `--with-debug` aus. Kompilieren Sie Ihre Clients dann neu und verknüpfen Sie sie mit der neuen Clientbibliothek. Siehe auch Abschnitt E.2, „Einen MySQL-Client debuggen“.

- Unter Umständen erhalten Sie unter Linux (z. B. bei SuSE Linux 8.1 oder Red Hat Linux 7.3) einen Kompilierungsfehler ähnlich dem folgenden:

      libmysql.c:1329: warning: passing arg 5 of `gethostbyname_r' from
      incompatible pointer type
      libmysql.c:1329: too few arguments to function `gethostbyname_r'
      libmysql.c:1329: warning: assignment makes pointer from integer
      without a cast
      make[2]: *** [libmysql.lo] Error 1

  Standardmäßig versucht das configure-Skript, die korrekte Anzahl der Argumente mithilfe des GNU C++-Compilers g++ zu ermitteln. Dieser Test führt zu falschen Ergebnissen, wenn g++ nicht installiert ist. Es gibt zwei Möglichkeiten, dieses Problem zu umgehen:

  - Stellen Sie sicher, dass der GNU-C++-Compiler g++ installiert ist. Bei manchen Linux-Distributionen heißt das erforderliche Paket `gpp`, bei anderen gcc-c++.

  - Verwenden Sie gcc als C++-Compiler, indem Sie die Umgebungsvariable `CXX` auf gcc setzen:

        export CXX="gcc"

  Welche Änderungen Sie auch immer durchgeführt haben, nachfolgend müssen Sie configure erneut ausführen.

### 2.8.5. Anmerkungen zu MIT-pthreads

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.)

### 2.8.6. Windows-Quelldistribution

Diese Anweisungen beschreiben, wie man unter Windows Binärdateien aus dem Quellcode von MySQL 5.1 erstellt. Die Anweisungen beziehen sich auf die Erstellung von Binärdateien aus einer Standardquelldistribution oder aus dem BitKeeper-Tree, der den aktuellen Entwicklungsquellcode enthält.

Hinweis: Die Angaben in diesem Abschnitt sind ausschließlich für Benutzer vorgesehen, die ein der aktuellen Quelldistribution oder dem BitKeeper-Tree entstammendes MySQL unter Windows testen wollen. Von der Verwendung eines aus dem Quellcode selbsterstellten MySQL Servers in Produktionsumgebungen rät MySQL AB ausdrücklich ab. In der Regel ist es am besten, vorkompilierte MySQL-Binärdistributionen zu verwenden, die von MySQL AB gezielt für optimale Leistung unter Windows erstellt wurden. Anweisungen zur Installation einer Binärdistribution finden Sie in Abschnitt 2.3, „Installation von MySQL unter Windows“.

Um MySQL unter Windows aus dem Quellcode zu erstellen, benötigen Sie die folgenden Compiler und Ressourcen auf Ihrem Windows-System:

- Visual Studio 2003-Compilersystem (VC++ 7.0)

- Zwischen 3 und 5 Gbyte Festplattenspeicher

- Windows 2000 oder höher

Die exakten Systemvoraussetzungen finden Sie hier: http://msdn.microsoft.com/vstudio/productinfo/sysreqs/default.aspx

Außerdem brauchen Sie eine MySQL-Quelldistribution für Windows. Es gibt zwei Möglichkeiten, eine Quelldistribution zu erhalten:

1. Besorgen Sie sich eine von MySQL AB gepackte Quelldistribution. Diese finden Sie unter http://dev.mysql.com/downloads/.

2. Sie können sich auch selbst eine Quelldistribution aus dem aktuellen BitKeeper-Entwicklungs-Source-Tree packen. In diesem Fall müssen Sie das Paket auf einem Unix-System erstellen und dann auf Ihr Windows-System übertragen. (Das liegt daran, dass einige Konfigurations- und Erstellungsschritte Tools erfordern, die nur unter Unix funktionieren.) Insofern benötigen Sie für die BitKeeper-Variante Folgendes:

   - Ein System unter Unix oder einem Unix-Derivat (z. B. Linux).

   - Ein auf dem System installiertes BitKeeper 3.0. Informationen zu Download und Installation von BitKeeper finden Sie in Abschnitt 2.8.3, „Installation vom Entwicklungs-Source-Tree“.

Wenn Sie eine Windows-Quelldistribution verwenden, können Sie direkt bei Abschnitt 2.8.6.1, „Bauen von MySQL mit VC++“, fortfahren. Um die Distribution aus dem BitKeeper-Tree zu erstellen, fahren Sie fort bei Abschnitt 2.8.6.2, „Erzeugen eines Windows-Quellpakets aus dem neusten Entwicklungsbaum“.

Wenn Sie feststellen, dass etwas nicht erwartungsgemäß funktioniert, oder Vorschläge zur Verbesserung des derzeitigen Erstellungsvorgangs unter Windows haben, senden Sie bitte eine Mitteilung an die Mailingliste `win32`. Siehe auch Abschnitt 1.7.1, „Die MySQL-Mailinglisten“.

#### 2.8.6.1. Bauen von MySQL mit VC++

Hinweis: VC++-Arbeitsbereichsdateien für MySQL 4.1 und höher sind kompatibel mit den Microsoft Visual Studio 2003-Editionen und wurden von MySQL AB-Mitarbeitern vor der Freigabe getestet.

Gehen Sie wie folgt vor, um MySQL zu erstellen:

1. Erstellen Sie ein Arbeitsverzeichnis (z. B. `C:\workdir`).

2. Entpacken Sie die Quelldistribution mit WinZip oder einem anderen Windows-Tool, das `.zip`-Dateien lesen kann, in das gerade erstellte Verzeichnis.

3. Starten Sie Visual Studio.

4. Wählen Sie im Menü Datei den Eintrag Arbeitsbereich öffnen.

5. Öffnen Sie den Arbeitsbereich `mysql.dsw`, den Sie im Arbeitsverzeichnis finden.

6. Wählen Sie im Menü Erstellen den Eintrag Aktive Konfiguration festlegen.

7. Klicken Sie auf der anderen Seite des Bildschirms auf mysqld - Win32 Debug und dann auf die Schaltfläche OK.

8. Betätigen Sie F7, um die Erstellung des Debugservers, der Bibliotheken und einiger Clientanwendungen zu starten.

9. Kompilieren Sie die Release-Version auf gleiche Weise.

10. Debugversionen der Programme und Bibliotheken befinden sich in den Verzeichnissen `client_debug` und `lib_debug`. Release-Versionen der Programme und Bibliotheken befinden sich in den Verzeichnissen `client_release` und `lib_release`. Beachten Sie, dass Sie, wenn Sie sowohl Debug- als auch Release-Versionen erstellen wollen, die Option Alles erstellen im Menü Erstellen auswählen können.

11. Testen Sie den Server. Der Server, den Sie gerade erstellt haben, erwartet die Standardwerte für das MySQL-Basisverzeichnis und das Datenverzeichnis (`C:\mysql` bzw. `C:\mysql\data`). Wenn Sie Ihren Server unter Verwendung des Source-Tree-Stammverzeichnisses und -Datenverzeichnisses als Stamm- bzw. Datenverzeichnis testen wollen, müssen Sie dem Server die entsprechenden Pfadnamen mitteilen. Sie können dies entweder über die Befehlszeile mit den Optionen `--basedir` und `--datadir` tun, oder indem Sie die entsprechenden Optionen in einer Optionsdatei ablegen. (Siehe auch Abschnitt 4.3.2, „my.cnf-Optionsdateien“.) Wenn Sie ein anderes, bereits an anderer Stelle vorhandenes Datenverzeichnis verwenden sollen, können Sie stattdessen auch diesen Pfadnamen angeben.

12. Starten Sie Ihren Server aus dem Verzeichnis `client_release` oder `client_debug` (dies hängt vom zu verwendenden Server ab). Die allgemeinen Anweisungen zum Starten des Servers finden Sie in Abschnitt 2.3, „Installation von MySQL unter Windows“. Sie müssen die Anweisung entsprechend anpassen, wenn Sie ein anderes Basis- oder Datenverzeichnis verwenden wollen.

13. Wenn der Server je nach Ihrer Konfiguration als Anwendung oder Dienst ausgeführt wird, versuchen Sie, mit ihm über das interaktive Befehlszeilen-Hilfsprogramm mysql eine Verbindung herzustellen. Sie finden es in Ihrem Verzeichnis `client_release` oder `client_debug`.

Wenn Sie zu der Ansicht gekommen sind, dass die von Ihnen erstellten Programme korrekt laufen, beenden Sie den Server. Installieren Sie nun wie folgt MySQL:

1. Erstellen Sie die Verzeichnisse, in die Sie MySQL installieren wollen. Um etwa MySQL im Verzeichnis `C:\mysql` zu installieren, verwenden Sie die folgenden Befehle:

       C:\> mkdir C:\mysql
       C:\> mkdir C:\mysql\bin
       C:\> mkdir C:\mysql\data
       C:\> mkdir C:\mysql\share
       C:\> mkdir C:\mysql\scripts

   Wenn Sie andere Clients kompilieren und diese mit MySQL verknüpfen wollen, sollten Sie mehrere zusätzliche Verzeichnisse erstellen:

       C:\> mkdir C:\mysql\include
       C:\> mkdir C:\mysql\lib
       C:\> mkdir C:\mysql\lib\debug
       C:\> mkdir C:\mysql\lib\opt

   Wenn Sie Benchmarks für MySQL erstellen wollen, legen Sie das folgende Verzeichnis an:

       C:\> mkdir C:\mysql\sql-bench

   Für Benchmark-Tests benötigen Sie die Perl-Unterstützung. Siehe auch Abschnitt 2.13, „Anmerkungen zur Perl-Installation“.

2. Kopieren Sie die folgenden Verzeichnisse aus dem Verzeichnis `workdir` in das Verzeichnis `C:\mysql`:

       C:\> cd \workdir
       C:\workdir> copy client_release\*.exe C:\mysql\bin
       C:\workdir> copy client_debug\mysqld.exe C:\mysql\bin\mysqld-debug.exe
       C:\workdir> xcopy scripts\*.* C:\mysql\scripts /E
       C:\workdir> xcopy share\*.* C:\mysql\share /E

   Wenn Sie andere Clients kompilieren und diese mit MySQL verknüpfen wollen, sollten Sie außerdem verschiedene Bibliotheken und Header-Dateien erstellen:

       C:\workdir> copy lib_debug\mysqlclient.lib C:\mysql\lib\debug
       C:\workdir> copy lib_debug\libmysql.* C:\mysql\lib\debug
       C:\workdir> copy lib_debug\zlib.* C:\mysql\lib\debug
       C:\workdir> copy lib_release\mysqlclient.lib C:\mysql\lib\opt
       C:\workdir> copy lib_release\libmysql.* C:\mysql\lib\opt
       C:\workdir> copy lib_release\zlib.* C:\mysql\lib\opt
       C:\workdir> copy include\*.h C:\mysql\include
       C:\workdir> copy libmysql\libmysql.def C:\mysql\include

   Wenn Sie Benchmarks für MySQL erstellen wollen, sollten Sie auch Folgendes tun:

       C:\workdir> xcopy sql-bench\*.* C:\mysql\bench /E

Konfigurieren und starten Sie den Server auf die gleiche Weise wie bei einer Windows-Distribution. Siehe auch Abschnitt 2.3, „Installation von MySQL unter Windows“.

#### 2.8.6.2. Erzeugen eines Windows-Quellpakets aus dem neusten Entwicklungsbaum

Um ein Windows-Quellcodepaket aus dem BitKeeper-Source-Tree zu erstellen, verwenden Sie die nachfolgenden Anweisungen. Dieser Vorgang muss auf einem System unter Unix oder einem Unix-Derivat durchgeführt werden, da einige der Konfigurations- und Erstellungsschritte das Vorhandensein von Tools voraussetzen, die nur unter Unix laufen. Die folgende Vorgehensweise funktioniert etwa unter Linux einwandfrei.

1. Kopieren Sie den BitKeeper-Source-Tree für MySQL 5.1. Hinweise hierzu finden Sie in Abschnitt 2.8.3, „Installation vom Entwicklungs-Source-Tree“.

2. Konfigurieren und erstellen Sie die Distribution, um eine Serverbinärdatei zu erhalten, mit der Sie arbeiten können. Eine Möglichkeit hierzu besteht im Ausführen des folgenden Befehls im obersten Verzeichnis Ihres Source-Trees:

       shell> ./BUILD/compile-pentium-max

3. Wenn Sie sich davon überzeugt haben, dass der Erstellungsprozess erfolgreich abgeschlossen wurde, führen Sie das folgende Hilfsskript im obersten Verzeichnis Ihres Source-Trees aus:

       shell> ./scripts/make_win_src_distribution

   Das Skript erstellt ein Windows-Quellpaket zur Verwendung auf Ihrem Windows-System. Sie können je nach Bedarf unterschiedliche Optionen für das Skript angeben. Die folgenden Optionen werden akzeptiert:

   - `--help`

     Zeigt eine Hilfemeldung an.

   - `--debug`

     Druckt Informationen zu Skriptoperationen (das Paket wird nicht erstellt).

   - `--tmp`

     Gibt das Temporärverzeichnis an.

   - `--suffix`

     Suffixname des Pakets.

   - `--dirname`

     Name des Verzeichnisses, in das die Dateien temporär kopiert werden.

   - `--silent`

     Die Liste der verarbeiteten Dateien wird nicht ausgegeben.

   - `--tar`

     Erstellt ein `tar.gz`- statt eines `.zip`-Pakets.

   Standardmäßig legt make_win_src_distribution ein Archiv im ZIP-Format mit dem Namen `mysql-`VERSION`-win-src.zip` an. Hierbei steht `VERSION` für die Version Ihres MySQL-Source-Trees.

4. Kopieren Sie das soeben erstellte Windows-Quellpaket auf Ihren Windows-Computer bzw. laden Sie es hoch. Verwenden Sie zur Kompilierung die Anweisungen in Abschnitt 2.8.6.1, „Bauen von MySQL mit VC++“.

### 2.8.7. MySQL-Clients auf Windows kompilieren

In Ihren Quelldateien sollten Sie `my_global.h` vor `mysql.h` einsetzen:

    #include <my_global.h>
    #include <mysql.h>

`my_global.h` enthält alle Dateien, die für die Windows-Kompatibilität erforderlich sind (z. B. `windows.h`), wenn Sie Ihr Programm unter Windows kompilieren.

Sie können Ihren Code entweder mit der dynamischen Bibliothek `libmysql.lib`, die nichts anderes als ein Wrapper zum Einladen bei Bedarf in `libmysql.dll` ist, oder mit der statischen Bibliothek `mysqlclient.lib` verknüpfen.

Die MySQL-Clientbibliotheken werden als Bibliotheken mit Threads kompiliert, d. h., Sie sollten Ihren Code mit Multithread-Unterstützung kompilieren.

## 2.9. Einstellungen und Tests nach der Installation

Nach der Installation von MySQL gibt es einige Aspekte, die beachtet werden sollten. So sollten Sie etwa unter Unix das Datenverzeichnis initialisieren und die MySQL-Grant-Tabellen erstellen. Bei allen Plattformen besteht ein erhebliches Sicherheitsrisiko darin, dass die bei der Installation in den Grant-Tabellen eingerichteten Konten keine Passwörter aufweisen. Sie sollten Passwörter zuweisen, um unautorisierten Zugriff auf den MySQL Server zu verhindern. Optional können Sie Zeitzonentabellen erstellen, um die Erkennung benannter Zeitzonen zu ermöglichen.

Die folgenden Abschnitte erhalten Angaben zu Maßnahmen nach Abschluss der Installation, die speziell auf Windows- bzw. Unix-Systeme zugeschnitten sind. In Abschnitt 2.9.2.3, „Probleme mit dem Start des MySQL Servers“, finden Sie zudem Informationen, die für alle Plattformen gelten. Dort wird beschrieben, was Sie tun können, wenn Sie Probleme mit dem Starten des Servers haben. Auch Abschnitt 2.9.3, „Einrichtung der anfänglichen MySQL-Berechtigungen“, betrifft alle Plattformen. Sie sollten den Anweisungen folgen, um zu gewährleisten, dass Ihre MySQL-Konten durch Konfiguration von Passwörtern angemessen geschützt sind.

Wenn Sie so weit sind, dass Sie weitere Benutzerkonten erstellen wollen oder müssen, finden Sie Informationen zum MySQL-Zugriffssteuerungssystem und zur Kontenverwaltung in Abschnitt 5.8, „Allgemeine Sicherheitsaspekte und das MySQL-Zugriffsberechtigungssystem“, und Abschnitt 5.9, „MySQL-Benutzerkontenverwaltung“.

### 2.9.1. Nach der Installation unter Windows durchzuführende Schritte

Unter Windows müssen Datenverzeichnis und Grant-Tabellen nicht erstellt werden. Windows-Distributionen von MySQL enthalten bereits Grant-Tabellen mit vorinitialisierten Konten in der `mysql`-Datenbank im Datenverzeichnis. Insofern ist es nicht notwendig, das Skript mysql_install_db auszuführen, das unter Unix obligatorisch ist. Was Passwörter betrifft, so haben Sie diese unter Umständen bereits für die Konten vergeben, sofern Sie MySQL mit dem Windows-Installations-Assistenten installiert haben. (Siehe auch Abschnitt 2.3.4, „Verwendung des MySQL-Installations-Assistenten“.) Andernfalls müssen Sie die in Abschnitt 2.9.3, „Einrichtung der anfänglichen MySQL-Berechtigungen“, beschriebene Vorgehensweise zur Vergabe von Passwörtern befolgen.

Bevor Sie Passwörter konfigurieren, sollten Sie einige Clientprogramme ausführen, um sicherzustellen, dass sich Serververbindungen herstellen lassen und einwandfrei arbeiten. Vergewissern Sie sich, dass der Server läuft (siehe Abschnitt 2.3.10, „Erstmaliges Starten des Servers“), und geben Sie dann die folgenden Befehle ein, um nachzuprüfen, ob Sie Daten vom Server abrufen können. Die Ausgabe sollte ähnlich wie nachfolgend aufgeführt aussehen:

    C:\> C:\mysql\bin\mysqlshow
    +-----------+
    | Databases |
    +-----------+
    | mysql     |
    | test      |
    +-----------+

    C:\> C:\mysql\bin\mysqlshow mysql
    Database: mysql
    +---------------------------+
    |          Tables           |
    +---------------------------+
    | columns_priv              |
    | db                        |
    | func                      |
    | help_category             |
    | help_keyword              |
    | help_relation             |
    | help_topic                |
    | host                      |
    | proc                      |
    | procs_priv                |
    | tables_priv               |
    | time_zone                 |
    | time_zone_leap_second     |
    | time_zone_name            |
    | time_zone_transition      |
    | time_zone_transition_type |
    | user                      |
    +---------------------------+

    C:\> C:\mysql\bin\mysql -e "SELECT Host,Db,User FROM db" mysql
    +------+-------+------+
    | host | db    | user |
    +------+-------+------+
    | %    | test% |      |
    +------+-------+------+

Wenn Sie eine Windows-Version verwenden, die Dienste unterstützt, und Sie wollen, dass der MySQL Server beim Start von Windows automatisch gestartet wird, finden Sie Informationen in Abschnitt 2.3.12, „Starten von MySQL als Windows-Dienst“.

### 2.9.2. Schritte nach der Installation unter Unix

Nachdem Sie MySQL unter Unix installiert haben, müssen Sie die Grant-Tabellen initialisieren, den Server starten und sicherstellen, dass dieser korrekt arbeitet. Ferner sollten Sie das automatische Starten und Beenden des Servers beim Starten bzw. Herunterfahren des Systems konfigurieren. Zudem sind Passwörter für die Konten in den Grant-Tabellen zu erstellen.

Unter Unix werden die Grant-Tabellen durch das Programm mysql_install_db eingerichtet. Bei einigen Installationsmethoden wird dieses Programm für Sie automatisch ausgeführt:

- Wenn Sie MySQL unter Linux mithilfe von RPM-Distributionen installieren, startet das Server-RPM mysql_install_db.

- Wenn Sie MySQL unter Mac OS X mithilfe einer PKG-Distribution installieren, startet das Installationsprogramm mysql_install_db.

In allen anderen Fällen müssen Sie mysql_install_db selbst ausführen.

Die nachfolgende Vorgehensweise beschreibt, wie man die Grant-Tabellen initialisiert (soweit dies noch nicht geschehen ist) und dann den Server startet. Ferner werden einige Befehle vorgeschlagen, mit denen Sie testen können, ob der Server zugänglich ist und korrekt arbeitet. Informationen zum automatischen Starten und Beenden des Servers finden Sie in Abschnitt 2.9.2.2, „MySQL automatisch starten und anhalten“.

Wenn Sie den Vorgang abgeschlossen haben und der Server läuft, sollten Sie für die von mysql_install_db erstellten Konten Passwörter erstellen. Eine Anleitung hierzu finden Sie in Abschnitt 2.9.3, „Einrichtung der anfänglichen MySQL-Berechtigungen“.

In den nachfolgenden Beispielen läuft der Server unter der Benutzer-ID des Anmeldekontos `mysql`. Dies setzt natürlich voraus, dass dieses Konto auch existiert. Ist dies nicht der Fall, dann müssen Sie das Konto entweder erstellen oder den Namen eines anderen vorhandenen Anmeldekontos ersetzen, das Sie für die Ausführung des Servers verwenden wollen.

1. Wechseln Sie in das oberste Verzeichnis Ihrer MySQL-Installation (dieses wird hier als `BASEDIR` dargestellt):

       shell> cd BASEDIR

   `BASEDIR` ist dabei so etwas wie `/usr/local/mysql` oder `/usr/local`. Die folgenden Schritte setzen voraus, dass Sie in dieses Verzeichnis gewechselt sind.

2. Sofern notwendig, führen Sie mysql_install_db aus, um die vorgabeseitigen MySQL-Grant-Tabellen mit den Berechtigungen einzurichten, die bestimmen, wie Benutzer mit dem Server Verbindungen herstellen können. Sie müssen das tun, wenn Sie einen Distributionstyp verwendet haben, bei dessen Installation das Programm nicht automatisch ausgeführt wird.

   Normalerweise muss mysql_install_db nur bei der Erstinstallation von MySQL ausgeführt werden; Sie können diesen Schritt also überspringen, wenn Sie eine vorhandene Installation aktualisieren. Allerdings überschreibt mysql_install_db keine vorhandenen Berechtigungstabellen, kann also in allen Situationen problemlos ausgeführt werden.

   Um die Grant-Tabellen zu initialisieren, verwenden Sie einen der folgenden Befehle (je nachdem, ob sich mysql_install_db im Verzeichnis `bin` oder `scripts` befindet):

       shell> bin/mysql_install_db --user=mysql
       shell> scripts/mysql_install_db --user=mysql

   Das Skript mysql_install_db erstellt das Datenverzeichnis des Servers. In diesem Datenverzeichnis werden Verzeichnisse für die `mysql`-Datenbank, die alle Datenbankberechtigungen enthält, und die `test`-Datenbank erstellt, die Sie zum Testen von MySQL verwenden können. Das Skript erstellt außerdem Einträge für `root`-Konten und Konten für anonyme Benutzer in den Berechtigungstabellen. Diese Konten haben anfangs kein Passwort. Eine Beschreibung ihrer Ausgangsberechtigungen finden Sie in Abschnitt 2.9.3, „Einrichtung der anfänglichen MySQL-Berechtigungen“. Kurz gesagt, ermöglichen diese Berechtigungen dem MySQL-`root`-Benutzer alles und erlauben jedem Benutzer zudem die Erstellung und Verwendung von Datenbanken mit dem Namen `test` oder einem Namen, der mit `test_` beginnt.

   Es ist wichtig sicherzustellen, dass die Datenbankverzeichnisse und -dateien im Besitz des Kontos `mysql` sind, damit der Server bei der späteren Ausführung Lese- und Schreibzugriff darauf hat. Um dies zu gewährleisten, sollte die Option `--user` wie nachfolgend gezeigt verwendet werden, wenn Sie mysql_install_db als `root` ausführen. Andernfalls sollten Sie das Skript ausführen, während Sie als `mysql` angemeldet sind; in diesem Fall können Sie die Option `--user` in dem Befehl weglassen.

   mysql_install_db erstellt eine Reihe von Tabellen in der `mysql`-Datenbank, darunter u. a. `user`, `db`, `host`, `tables_priv`, `columns_priv` und `func`. Eine vollständige Auflistung und Beschreibung dieser Tabellen finden Sie in Abschnitt 5.8, „Allgemeine Sicherheitsaspekte und das MySQL-Zugriffsberechtigungssystem“.

   Wenn Sie die `test`-Datenbank nicht brauchen, können Sie sie nach dem Starten des Servers mit dem Befehl mysqladmin -u root drop test entfernen.

   Sollten Sie an dieser Stelle Probleme mit mysql_install_db haben, dann finden Sie weitere Informationen in Abschnitt 2.9.2.1, „Probleme mit `mysql_install_db`“.

3. Starten Sie den MySQL Server:

       shell> bin/mysqld_safe --user=mysql &

   Es ist wichtig, dass der MySQL Server über ein berechtigungsloses Anmeldekonto (d. h. kein `root`-Konto) ausgeführt wird. Um dies zu gewährleisten, sollte die Option `--user` wie nachfolgend gezeigt verwendet werden, wenn Sie `mysql_safe` als `root` ausführen. Andernfalls sollten Sie das Skript ausführen, während Sie als `mysql` am System angemeldet sind; in diesem Fall können Sie die Option `--user` in dem Befehl weglassen.

   Weitere Anweisungen zur Ausführung von MySQL als berechtigungsloser Benutzer finden Sie in Abschnitt 5.7.5, „Wie man MySQL als normaler Benutzer laufen läßt“.

   Wenn Sie vor Durchführung dieses Schritts vergessen haben, die Grant-Tabellen zu erstellen, dann erscheint die folgende Meldung im Fehlerlog, wenn Sie den Server starten:

       mysqld: Can't find file: 'host.frm'

   Bei Auftreten anderer Probleme während des Serverstarts finden Sie Informationen in Abschnitt 2.9.2.3, „Probleme mit dem Start des MySQL Servers“.

4. Stellen Sie mit mysqladmin sicher, dass der Server ausgeführt wird. Die folgenden Befehle ermöglichen einfache Tests, um zu prüfen, ob der Server aktiv ist und auf Verbindungen reagiert:

       shell> bin/mysqladmin version
       shell> bin/mysqladmin variables

   Die Ausgabe von mysqladmin version kann je nach Plattform und MySQL-Version variieren, sollte aber der nachfolgend abgebildeten ähneln:

       shell> bin/mysqladmin version
       mysqladmin  Ver 14.12 Distrib 5.1.5-alpha, for pc-linux-gnu on i686
       Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
       This software comes with ABSOLUTELY NO WARRANTY. This is free software,
       and you are welcome to modify and redistribute it under the GPL license

       Server version          5.1.5-alpha-Max
       Protocol version        10
       Connection              Localhost via UNIX socket
       UNIX socket             /var/lib/mysql/mysql.sock
       Uptime:                 14 days 5 hours 5 min 21 sec

       Threads: 1  Questions: 366  Slow queries: 0
       Opens: 0  Flush tables: 1  Open tables: 19
       Queries per second avg: 0.000

   Wenn Sie wissen wollen, was Sie mit mysqladmin noch machen können, rufen Sie es mit der Option `--help` auf.

5. Überprüfen Sie nun, ob Sie den Server herunterfahren können:

       shell> bin/mysqladmin -u root shutdown

6. Als Nächstes prüfen Sie, ob Sie den Server neu starten können. Hierzu verwenden Sie mysqld_safe oder rufen mysqld direkt auf. Ein Beispiel:

       shell> bin/mysqld_safe --user=mysql --log &

   Schlägt mysqld_safe fehl, dann lesen Sie Abschnitt 2.9.2.3, „Probleme mit dem Start des MySQL Servers“.

7. Führen Sie einige einfache Tests durch, um sicherzustellen, dass Sie Daten am Server abrufen können. Die Ausgabe sollte ähnlich wie nachfolgend aufgeführt aussehen:

       shell> bin/mysqlshow
       +-----------+
       | Databases |
       +-----------+
       | mysql     |
       | test      |
       +-----------+

       shell> bin/mysqlshow mysql
       Database: mysql
       +---------------------------+
       |          Tables           |
       +---------------------------+
       | columns_priv              |
       | db                        |
       | func                      |
       | help_category             |
       | help_keyword              |
       | help_relation             |
       | help_topic                |
       | host                      |
       | proc                      |
       | procs_priv                |
       | tables_priv               |
       | time_zone                 |
       | time_zone_leap_second     |
       | time_zone_name            |
       | time_zone_transition      |
       | time_zone_transition_type |
       | user                      |
       +---------------------------+

       shell> bin/mysql -e "SELECT Host,Db,User FROM db" mysql
       +------+--------+------+
       | host | db     | user |
       +------+--------+------+
       | %    | test   |      |
       | %    | test_% |      |
       +------+--------+------+

8. Im Verzeichnis `sql-bench` (dieses befindet sich im MySQL-Installationsverzeichnis) befindet sich eine Benchmark-Reihe, die Sie verwenden können, um die Leistungsfähigkeit von MySQL auf verschiedenen Plattformen zu vergleichen. Diese Benchmark-Reihe ist in Perl geschrieben. Sie erfordert das Perl-DBI-Modul, welches eine datenbankunabhängige Schnittstelle zu verschiedenen Datenbanken bereitstellt, sowie einige weitere Perl-Module:

       DBI
       DBD::mysql
       Data::Dumper
       Data::ShowTable

   Diese Module erhalten Sie bei CPAN (http://www.cpan.org/). Siehe auch Abschnitt 2.13.1, „Installation von Perl unter Unix“.

   Das Verzeichnis `sql-bench/Results` enthält die Ergebnisse vieler Testläufe mit unterschiedlichen Datenbanken und Plattformen. Um alle Tests durchzuführen, setzen Sie die folgenden Befehle ab:

       shell> cd sql-bench
       shell> perl run-all-tests

   Wenn das Verzeichnis `sql-bench` bei Ihnen nicht vorhanden ist, haben Sie MySQL wahrscheinlich aus anderen RPM-Dateien als dem Quell-RPM installiert. (Das Quell-RPM enthält das Benchmark-Verzeichnis `sql-bench`.) In diesem Fall müssen Sie die Benchmark-Reihe zunächst installieren, bevor Sie sie verwenden können. Es gibt separate Benchmark-RPMs namens `mysql-bench-`VERSION`-i386.rpm`, die den Benchmark-Code und die Daten enthalten.

   Wenn Sie mit einer Quelldistribution arbeiten, finden Sie in deren Unterverzeichnis `tests` weitere Tests, die Sie ausführen können. Um etwa `auto_increment.tst` auszuführen, setzen Sie den folgenden Befehl im obersten Verzeichnis Ihrer Quelldistribution ab:

       shell> mysql -vvf test < ./tests/auto_increment.tst

   Die erwarteten Testergebnisse finden Sie in der Datei `./tests/auto_increment.res`.

9. An dieser Stelle sollte der Server bereits laufen. Allerdings verfügt keines der vorgabeseitigen MySQL-Konten über ein Passwort. Weisen Sie deswegen Passwörter zu wie in Abschnitt 2.9.3, „Einrichtung der anfänglichen MySQL-Berechtigungen“, beschrieben.

Der Installationsvorgang für MySQL 5.1 erstellt Zeitzonentabellen in der Datenbank `mysql`. Sie müssen die Tabellen allerdings manuell ausfüllen; wie das geht, steht in Abschnitt 5.11.8, „Zeitzonen-Unterstützung des MySQL-Servers“.

#### 2.9.2.1. Probleme mit `mysql_install_db`

Der Zweck des Skripts mysql_install_db besteht in der Generierung neuer MySQL-Berechtigungstabellen. Hierbei werden vorhandene MySQL-Berechtigungstabellen nicht überschrieben, und auch andere Daten werden nicht beeinträchtigt.

Wollen Sie Ihre Berechtigungstabellen neu erstellen, dann beenden Sie zunächst den mysqld-Server, sofern dieser läuft. Benennen Sie das Verzeichnis `mysql` im Datenverzeichnis dann um, um es zu speichern, und führen Sie nachfolgend mysql_install_db aus. Nehmen wir an, Ihr aktuelles Verzeichnis ist das MySQL-Installationsverzeichnis, mysql_install_db befindet sich im Verzeichnis `bin` und das Datenverzeichnis heißt `data`. Um die `mysql`-Datenbank umzubenennen und mysql_install_db erneut auszuführen, verwenden Sie die folgenden Befehle:

    shell> mv data/mysql data/mysql.old
    shell> bin/mysql_install_db --user=mysql

Wenn Sie mysql_install_db ausführen, können die folgenden Probleme auftreten:

- mysql_install_db kann die Grant-Tabellen nicht installieren.

  Unter Umständen stellen Sie fest, dass mysql_install_db die Grant-Tabellen nicht installieren kann und nach Anzeige der folgenden Meldungen beendet wird:

      Starting mysqld daemon with databases from XXXXXX
      mysqld ended

  In diesem Fall sollten Sie die Fehlerlogdatei sehr aufmerksam lesen. Das Fehlerlog sollte sich im Verzeichnis `XXXXXX` befinden (dieses ist nach der Fehlermeldung benannt) und angeben, warum mysqld nicht gestartet wurde. Wenn Sie nicht verstehen, was geschehen ist, hängen Sie das Log an, wenn Sie einen Bugreport einsenden. Siehe auch Abschnitt 1.8, „Wie man Bugs oder Probleme meldet“.

- Ein mysqld-Prozess wird ausgeführt.

  Dies weist darauf hin, dass der Server läuft und die Grant-Tabellen wahrscheinlich bereits erstellt wurden. In diesem Fall müssen Sie mysql_install_db überhaupt nicht ausführen, da es nur einmal gestartet werden muss (nämlich dann, wenn Sie MySQL zum ersten Mal installieren).

- Die Installation eines zweiten mysqld-Servers schlägt fehl, wenn ein Server bereits läuft.

  Dies kann passieren, wenn eine MySQL-Installation bereits vorhanden ist, Sie aber eine neue Installation an einer anderen Position ablegen wollen. So haben Sie vielleicht eine Produktionsinstallation, wollen aber eine zweite Installation zu Testzwecken einrichten. Meist tritt dieses Problem auf, wenn Sie einen zweiten Server ausführen wollen, der auf eine Netzwerkschnittstelle zuzugreifen versucht, die bereits vom ersten Server verwendet wird. In diesem Fall werden Sie eine der folgenden Fehlermeldungen sehen:

      Can't start server: Bind on TCP/IP port:
      Address already in use
      Can't start server: Bind on unix socket ...

  Anweisungen zur Einrichtung mehrerer Server finden Sie in Abschnitt 5.13, „Mehrere MySQL-Server auf derselben Maschine laufen lassen“.

- Sie haben keinen Schreibzugriff auf das Verzeichnis `/tmp`.

  Wenn Sie keinen Schreibzugriff erhalten, um Temporärdateien oder eine Unix-Socketdatei im Standardverzeichnis (`/tmp`) zu erstellen, dann tritt ein Fehler auf, wenn Sie mysql_install_db oder den mysqld-Server ausführen wollen.

  Sie können verschiedene Positionen für das Temporärverzeichnis und die Unix-Socketdatei angeben, indem Sie die folgenden Befehle vor dem Starten von mysql_install_db oder mysqld ausführen (hierbei ist `some_tmp_dir` der vollständige Pfadname eines Verzeichnisses, für das Sie Schreibzugriff haben):

      shell> TMPDIR=/some_tmp_dir/
      shell> MYSQL_UNIX_PORT=/some_tmp_dir/mysql.sock
      shell> export TMPDIR MYSQL_UNIX_PORT

  Danach sollten Sie in der Lage sein, mysql_install_db mit den folgenden Befehlen auszuführen und den Server zu starten:

      shell> bin/mysql_install_db --user=mysql
      shell> bin/mysqld_safe --user=mysql &

  Wenn sich mysql_install_db im Verzeichnis `scripts` befindet, ändern Sie den ersten Befehl zu `scripts/mysql_install_db`.

  Siehe auch Abschnitt A.4.5, „Wie Sie die MySQL-Socketdatei `/tmp/mysql.sock` schützen oder ändern“, und Anhang F, Umgebungsvariablen.

Es gibt einige Alternativen zur Ausführung des Skripts mysql_install_db, welches Bestandteil der MySQL-Distribution ist:

- Wenn Sie wollen, dass die Ausgangsberechtigungen sich von den Standardwerten unterscheiden, können Sie mysql_install_db vor der Ausführung bearbeiten. Allerdings bietet es sich eher an, mit `GRANT` und `REVOKE` die Berechtigungen zu ändern, nachdem die Grant-Tabellen eingerichtet wurden. Mit anderen Worten, Sie können mysql_install_db ausführen und dann mithilfe von `mysql -u root mysql` eine Verbindung zum Server als MySQL-`root`-Benutzer herstellen, damit Sie die erforderlichen `GRANT`- und `REVOKE`-Anweisungen absetzen können.

  Wenn Sie MySQL auf mehreren Computern mit denselben Berechtigungen installieren wollen, können Sie die `GRANT`- und `REVOKE`-Anweisungen auch in einer Datei ablegen und diese Datei mithilfe von `mysql` als Skript ausführen, nachdem Sie mysql_install_db gestartet haben. Ein Beispiel:

      shell> bin/mysql_install_db --user=mysql
      shell> bin/mysql -u root < your_script_file

  Auf diese Weise müssen Sie die Anweisungen nicht manuell auf jedem einzelnen Computer eingeben.

- Es ist möglich, die Grant-Tabellen nach ihrer Erstellung vollständig neu zu erstellen. Dies müssen Sie unter Umständen tun, wenn Sie gerade erst lernen, wie man `GRANT` und `REVOKE` verwendet, und nach der Ausführung von mysql_install_db derart viele Änderungen vorgenommen haben, dass Sie die Tabellen komplett löschen und von vorn beginnen wollen.

  Um die Grant-Tabellen neu zu erstellen, entfernen Sie alle `.frm`-, `.MYI`- und `.MYD`-Dateien im Datenbankverzeichnis `mysql`. Danach führen Sie das Skript mysql_install_db erneut aus.

- Sie können mysqld manuell mithilfe der Option `--skip-grant-tables` starten und die Berechtigungsdaten selbst unter Verwendung von mysql hinzufügen:

      shell> bin/mysqld_safe --user=mysql --skip-grant-tables &
      shell> bin/mysql mysql

  Von mysql führen Sie die in mysql_install_db enthaltenen SQL-Befehle manuell aus. In jedem Fall müssen Sie danach mysqladmin flush-privileges oder mysqladmin reload ausführen, um dem Server mitzuteilen, dass er die Grant-Tabellen neu laden muss.

  Beachten Sie, dass Sie, wenn Sie mysql_install_db nicht benutzen, die Grant-Tabellen nicht nur manuell ausfüllen, sondern sie zuvor auch noch erstellen müssen.

#### 2.9.2.2. MySQL automatisch starten und anhalten

Normalerweise starten Sie den mysqld-Server unter Verwendung einer der folgenden Möglichkeiten:

- Durch direkten Aufruf von mysqld. Das funktioniert auf allen Plattformen.

- Durch Ausführung des MySQL Servers als Windows-Dienst. Dies ist unter Windows-Versionen möglich, die Dienste unterstützen (also NT, 2000, XP und 2003). Der Dienst kann entweder so konfiguriert werden, dass der Server automatisch mit Windows startet, oder als manueller Dienst, den Sie manuell starten müssen. Informationen zur Vorgehensweise finden Sie in Abschnitt 2.3.12, „Starten von MySQL als Windows-Dienst“.

- Durch Aufruf von mysqld_safe. Hierbei wird versucht, die passenden Optionen für mysqld zu ermitteln und es dann mit diesen Optionen zu starten. Dieses Skript wird unter Unix und Unix-ähnlichen Systemen verwendet. Siehe auch Abschnitt 5.4.1, „mysqld_safe — Startskript für den MySQL-Server“.

- Durch den Aufruf von mysql.server. Dieses Skript wird in erster Linie beim Starten und Beenden von Systemen verwendet, die Ausführungsverzeichnisse im System V-Stil verwenden, wo es normalerweise unter dem Namen `mysql` installiert ist. Das Skript mysql.server startet den Server, indem es mysqld_safe aufruft. Siehe auch Abschnitt 5.4.2, „mysql.server — Startskript für den MySQL-Server“.

- Unter Mac OS X können Sie ein separates MySQL-Startobjektpaket installieren, um den automatischen Start von MySQL beim Systemstart zu aktivieren. Das Startobjekt startet den Server durch Aufruf von mysql.server. Weitere Informationen finden Sie in Abschnitt 2.5, „Installation von MySQL unter Mac OS X“.

Die Skripten mysqld_safe und mysql.server und das Mac OS X-Startobjekt können für den manuellen Start des Servers oder für seinen automatischen Start beim Systemstart verwendet werden. mysql.server und das Startobjekt erlauben zudem das Beenden des Servers.

Um den Server mit mysql.server manuell zu starten oder zu beenden, rufen Sie es mit dem Argument `start` bzw. `stop` auf:

    shell> mysql.server start
    shell> mysql.server stop

Bevor mysql.server den Server startet, wechselt es in das MySQL-Installationsverzeichnis und ruft dann mysqld_safe auf. Wenn Sie wollen, dass der Server als ein bestimmter Benutzer ausgeführt wird, fügen Sie die entsprechende Option `user` im Abschnitt `[mysqld]` der Optionsdatei `/etc/my.cnf` hinzu. Eine Erklärung erhalten Sie im weiteren Verlauf dieses Abschnitts. (Unter Umständen müssen Sie mysql.server bearbeiten, wenn Sie eine Binärdistribution von MySQL in einem anderen als dem Standardverzeichnis installiert haben. Ändern Sie es so, dass es via `cd` in das korrekte Verzeichnis wechselt, bevor es mysqld_safe ausführt. Beachten Sie allerdings, dass Ihre geänderte Version von mysql.server bei einem zukünftigen MySQL-Upgrade überschrieben werden könnte; deswegen sollten Sie eine Kopie der editierten Version erstellen, die Sie bei Bedarf neu installieren können.)

mysql.server stop beendet den Server, indem es ein Signal an ihn schickt. Sie können den Server auch manuell beenden, indem Sie mysqladmin shutdown ausführen.

Um MySQL automatisch auf Ihrem Server zu starten und zu beenden, müssen Sie Start- und Stoppbefehle an den entsprechenden Stellen Ihrer `/etc/rc*`-Dateien einfügen.

Wenn Sie das Linux-Server-RPM-Paket (`MySQL-server-`VERSION`.rpm`) verwenden, wird das Skript mysql.server im Verzeichnis `/etc/init.d` unter dem Namen `mysql` installiert. Sie müssen die Installation also nicht manuell vornehmen. Weitere Informationen zu Linux-RPM-Paketen finden Sie in Abschnitt 2.4, „MySQL unter Linux installieren“.

Manche Anbieter stellen RPM-Pakete bereit, die ein Startskript unter einem anderen Namen wie etwa mysqld installieren.

Wenn Sie MySQL aus einer Quelldistribution installieren oder ein Binärdistributionsformat verwenden, das mysql.server nicht automatisch installiert, können Sie es manuell installieren. Sie finden das Skript im Verzeichnis `support-files`, das sich im MySQL-Installationsverzeichnis befindet, oder in einem MySQL-Source-Tree.

Um mysql.server manuell zu installieren, kopieren Sie es unter dem Namen mysql in das Verzeichnis `/etc/init.d` und machen es dann ausführbar. Dies tun Sie, indem Sie in das entsprechende Verzeichnis wechseln, in dem sich mysql.server befindet, und dann die folgenden Befehle ausführen:

    shell> cp mysql.server /etc/init.d/mysql
    shell> chmod +x /etc/init.d/mysql

Ältere Red Hat-Systeme verwenden das Verzeichnis `/etc/rc.d/init.d` statt `/etc/init.d`. In diesem Fall müssen Sie die obigen Befehle entsprechend ändern. Alternativ erstellen Sie zunächst `/etc/init.d` als symbolische Verknüpfung, die auf `/etc/rc.d/init.d` verweist:

    shell> cd /etc
    shell> ln -s rc.d/init.d .

Nach der Installation des Skripts hängt der Befehl, der zur Aktivierung der Ausführung beim Systemstart erforderlich ist, von Ihrem Betriebssystem ab. Unter Linux können Sie `chkconfig` verwenden:

    shell> chkconfig --add mysql

Unter manchen Linux-Systemen scheint auch der folgende Befehl notwendig zu sein, um das Skript mysql vollständig zu aktivieren:

    shell> chkconfig --level 345 mysql on

Unter FreeBSD sollten Startskripten generell in `/usr/local/etc/rc.d/` abgelegt werden. Die Manpage `rc(8)` gibt an, dass Skripten in diesem Verzeichnis nur dann ausgeführt werden, wenn ihr Basisname dem Shell-Muster für Dateinamen `*.sh` entspricht. Alle anderen Dateien oder Verzeichnisse, die in diesem Verzeichnis vorhanden sind, werden stillschweigend ignoriert. Mit anderen Worten: Unter FreeBSD müssen Sie das Skript `mysql.server` als `/usr/local/etc/rc.d/mysql.server.sh` installieren, um den automatischen Start zu aktivieren.

Als Alternative zur obigen Konfiguration verwenden manche Betriebssysteme auch `/etc/rc.local` oder `/etc/init.d/boot.local`, um zusätzliche Dienste beim Systemstart zu starten. Um MySQL auf diese Weise zu starten, könnten Sie einen Befehl wie den folgenden an die entsprechende Startdatei anhängen:

    /bin/sh -c 'cd /usr/local/mysql; ./bin/mysqld_safe --user=mysql &'

Bei anderen Systemen lesen Sie in der Dokumentation zu Ihrem Betriebssystem nach, um zu erfahren, wie Startskripten installiert werden.

Sie können Optionen für mysql.server in einer globalen Datei `/etc/my.cnf` ablegen. Eine `/etc/my.cnf`-Datei sieht normalerweise so aus:

    [mysqld]
    datadir=/usr/local/mysql/var
    socket=/var/tmp/mysql.sock
    port=3306
    user=mysql

    [mysql.server]
    basedir=/usr/local/mysql

Das Skript mysql.server versteht die folgenden Optionen: `basedir`, `datadir` und `pid-file`. Sofern angegeben, müssen diese in einer Optionsdatei und nicht an der Befehlszeile abgelegt sein. mysql.server versteht nur `start` und `stop` als Befehlszeilenargumente.

Die folgende Tabelle zeigt, welche Optionsgruppen der Server und die jeweiligen Startskripten aus den Optionsdateien auslesen:

Skript | Abschnitte in der Optionsdatei
mysqld | `[mysqld]`, `[server]`, `[mysqld-`major_version`]`
mysqld_safe | `[mysqld]`, `[server]`, `[mysqld_safe]`
mysql.server | `[mysqld]`, `[mysql.server]`, `[server]`

`[mysqld-`major_version`]` bedeutet, dass Abschnitte mit Namen wie `[mysqld-5.0]` und `[mysqld-5.1]` von Servern der Versionen 5.0.x, 5.1.x usw. ausgelesen werden. Diese Funktion kann verwendet werden, um Optionen anzugeben, die nur von Servern einer bestimmten Release-Serie ausgelesen werden können.

Zwecks Abwärtskompatibilität liest mysql.server auch den Abschnitt `[mysql_server]` und mysqld_safe den Abschnitt `[safe_mysqld]` aus. Allerdings sollten Sie Ihre Optionsdateien so aktualisieren, dass sie stattdessen die Abschnitte `[mysql.server]` und `[mysqld_safe]` auslesen, wenn Sie MySQL 5.1 verwenden.

Siehe auch Abschnitt 4.3.2, „my.cnf-Optionsdateien“.

#### 2.9.2.3. Probleme mit dem Start des MySQL Servers

Dieser Abschnitt enthält Vorschläge zur Fehlersuche, wenn unter Unix Probleme beim Start des Servers auftreten. Wenn Sie Windows verwenden, finden Sie Informationen in Abschnitt 2.3.14, „Troubleshooting einer MySQL-Installation unter Windows“.

Haben Sie Probleme beim Starten des Servers, dann probieren Sie folgende Schritte:

- Suchen Sie im Fehlerlog nach Ursachen dafür, dass der Server nicht startet.

- Geben Sie alle Sonderoptionen an, die von den von Ihnen verwendeten Speicher-Engines benötigt werden.

- Stellen Sie sicher, dass der Server die Position des Datenverzeichnisses kennt.

- Stellen Sie auch sicher, dass der Server auf das Datenverzeichnis zugreifen kann. Besitzrechte und Berechtigungen für das Datenverzeichnis und seine Inhalte müssen so konfiguriert sein, dass der Server sie lesen und ändern kann.

- Überprüfen Sie, ob die Netzwerkschnittstellen, die der Server verwenden will, vorhanden sind.

Einige Speicher-Engines haben Optionen, die ihr Verhalten steuern. Sie können eine Datei `my.cnf` erstellen und darin die Startoptionen der Engines angeben, die Sie zu verwenden beabsichtigen. Wenn Sie Speicher-Engines verwenden wollen, die transaktionssichere Tabellen (`InnoDB`, `BDB`, `NDB`) unterstützen, dann vergewissern Sie sich, dass diese wie gewünscht konfiguriert sind, bevor Sie den Server starten:

- Wenn Sie `InnoDB`-Tabellen verwenden, finden Sie Informationen in Abschnitt 14.2.3, „Konfiguration“.

- Setzen Sie `BDB`-Tabellen (BerkeleyDB-Tabellen) ein, dann finden Sie Informationen in Abschnitt 14.5.3, „BDB-Startoptionen“.

- Wenn Sie MySQL-Cluster verwenden, finden Sie Informationen in Abschnitt 16.4, „MySQL Cluster: Konfiguration“.

Speicher-Engines verwenden, sofern keine Optionswerte definiert sind, die Vorgabewerte. Wir empfehlen deswegen, die verfügbaren Optionen zu prüfen und explizite Werte für diejenigen Optionen anzugeben, bei denen die Vorgabewerte nicht für Ihre Installation geeignet sind.

Wenn der mysqld-Server startet, wechselt er in das Datenverzeichnis. In diesem Verzeichnis erwartet er das Vorhandensein der Datenbanken, und hier wird er auch seine Logdateien speichern. Auch die PID-Datei (Process ID, Prozesskennung) wird im Datenverzeichnis abgelegt.

Das Datenverzeichnis wird bei der Kompilierung des Servers fest zugeordnet. Standardmäßig sucht der Server deswegen an der angegebenen Position nach diesem Verzeichnis. Befindet sich das Datenverzeichnis in Ihrem System an anderer Stelle, dann funktioniert der Server nicht einwandfrei. Durch Aufruf des Befehls mysqld mit den Optionen `--verbose` und `--help` können Sie die Vorgaben für die Pfadeinstellungen ermitteln.

Wenn die Standardpositionen dem MySQL-Installationslayout auf Ihrem System nicht entsprechen, können Sie sie durch Angabe von Optionen für mysqld oder mysqld_safe auf der Befehlszeile oder in einer Optionsdatei außer Kraft setzen.

Um die Position des Datenverzeichnisses explizit anzugeben, verwenden Sie die Option `--datadir`. Allerdings können Sie mysqld die Position des Basisverzeichnisses angeben, in dem MySQL installiert ist; mysqld wird dann in diesem Verzeichnis nach dem Datenverzeichnis suchen. Die Angabe erfolgt mit der Option `--basedir`.

Um die Auswirkungen der Optionen zur Pfadangabe zu überprüfen, rufen Sie mysqld mit diesen Optionen auf, gefolgt von den Optionen `--verbose` und `--help`. Wenn Sie beispielsweise in das Verzeichnis wechseln, in dem mysqld installiert ist, und dann den folgenden Befehl ausführen, werden die Auswirkung des Serverstarts bei einem Basisverzeichnis `/usr/local` angezeigt:

    shell> ./mysqld --basedir=/usr/local --verbose --help

Sie können auch andere Optionen wie `--datadir` spezifizieren; beachten Sie aber, dass `--verbose` und `--help` jeweils als letzte Optionen aufzuführen sind.

Wenn Sie die gewünschten Pfadeinstellungen ermittelt haben, starten Sie den Server ohne `--verbose` und `--help`.

Wird mysqld gerade ausgeführt, dann können Sie die verwendeten Pfadeinstellungen durch Absetzen des folgenden Befehls ermitteln:

    shell> mysqladmin variables

Oder:

    shell> mysqladmin -h host_name variables

`host_name` ist der Name des MySQL Server-Hosts.

Erhalten Sie beim Starten von mysqld die Fehlermeldung `Errcode 13` (`Permission denied`, Berechtigung verweigert), dann gestatten die Berechtigungen des Datenverzeichnisses oder seiner Inhalte keinen Serverzugriff. In diesem Fall ändern Sie die Berechtigungen für die betreffenden Dateien und Verzeichnisse so, dass der Server das Recht hat, sie zu verwenden. Sie können den Server auch als `root` starten, wovon aus sicherheitstechnischer Sicht jedoch dringend abgeraten wird.

Wechseln Sie unter Unix in das Datenverzeichnis und überprüfen Sie die Besitzrechte für das Datenverzeichnis und seinen Inhalt, um den Serverzugriff zu gewährleisten. Verwenden Sie etwa folgenden Befehl, wenn das Datenverzeichnis `/usr/local/mysql/var` ist:

    shell> ls -la /usr/local/mysql/var

Wenn die Besitzrechte für das Datenverzeichnis oder seine Unterverzeichnisse nicht bei dem Anmeldekonto liegen, das Sie zur Ausführung des Servers verwenden, dann müssen Sie die Besitzrechte für diese Ressourcen dem Konto zuweisen. Heißt das Konto `mysql`, dann verwenden Sie folgende Befehle:

    shell> chown -R mysql /usr/local/mysql/var
    shell> chgrp -R mysql /usr/local/mysql/var

Wenn der Server nicht korrekt startet, prüfen Sie das Fehlerlog. Logdateien befinden sich im Datenverzeichnis (unter Windows normalerweise `C:\Programme\MySQL\MySQL Server 5.1\data`, bei Unix-Binärdistributionen in `/usr/local/mysql/data` und bei Unix-Quelldistributionen in `/usr/local/var`). Suchen Sie im Datenverzeichnis nach Dateien mit Namen des Typs ``host_name`.err` und ``host_name`.log`, wobei `host_name` der Name des Serverhosts ist. Überprüfen Sie nun die letzten paar Zeilen dieser Dateien. Unter Unix können Sie sie mit `tail` anzeigen:

    shell> tail host_name.err
    shell> tail host_name.log

Das Fehlerlog sollte Informationen dazu enthalten, warum der Server nicht starten konnte. Beispielsweise könnte das Log etwa Folgendes enthalten:

    000729 14:50:10  bdb:  Recovery function for LSN 1 27595 failed
    000729 14:50:10  bdb:  warning: ./test/t1.db: No such file or directory
    000729 14:50:10  Can't init databases

Das bedeutet, dass Sie mysqld nicht mit der Option `--bdb-no-recover` gestartet haben; Berkeley DB hat dann, als es versuchte, Ihre Datenbanken wiederherzustellen, Ungereimtheiten in Bezug auf die eigenen Logdateien erkannt. Um fortzufahren, sollten Sie die alten Berkeley DB-Logdateien aus dem Datenbankverzeichnis an einen anderen Ort verschieben, wo Sie sie später untersuchen können. Die `BDB`-Logdateien werden in chronologischer Reihenfolge beginnend mit `log.0000000001` benannt; die Zahl im Namen wird dabei stets erhöht.

Wenn Sie mysqld mit Unterstützung für `BDB`-Tabellen ausführen und beim Start von mysqld ein Speicherauszug auftritt, könnte dies auf Probleme in Verbindung mit dem `BDB`-Wiederherstellungslog hinweisen. In diesem Fall können Sie versuchen, mysqld mit der Option `--bdb-no-recover` zu starten. Wenn das klappt, sollten Sie alle `BDB`-Logdateien aus dem Datenverzeichnis entfernen und dann versuchen, mysqld ohne die Option `--bdb-no-recover` neu zu starten.

Tritt einer der folgenden Fehler auf, dann bedeutet dies, dass ein anderes Programm (vielleicht ein anderer mysqld-Server) den TCP/IP-Port bzw. die Unix-Socketdatei verwendet, die mysqld für sich beansprucht:

    Can't start server: Bind on TCP/IP port: Address already in use
    Can't start server: Bind on unix socket ...

Ermitteln Sie mit dem Befehl ps, ob ein anderer mysqld-Server ausgeführt wird. Ist dies der Fall, dann fahren Sie den Server herunter, bevor Sie mysqld erneut starten. (Wenn ein anderer Server ausgeführt wird und Sie tatsächlich mehrere Server gleichzeitig betreiben wollen, finden Sie Informationen zur Vorgehensweise in Abschnitt 5.13, „Mehrere MySQL-Server auf derselben Maschine laufen lassen“.)

Läuft kein anderer Server, dann führen Sie den Befehl `telnet `your_host_name` `tcp_ip_port_number`` aus. (Die Standardportnummer von MySQL ist 3306.) Betätigen Sie dann mehrfach die Eingabetaste. Erhalten Sie keine Fehlermeldung in der Art von `telnet: Unable to connect to remote host: Connection refused`, dann verwendet ein anderes Programm den TCP/IP-Port, den mysqld nutzen will. Sie müssen dann ermitteln, welches Programm dies ist, und es deaktivieren; alternativ können Sie mysqld mit der Option `--port` auch anweisen, an einem anderen Port zu lauschen. In diesem Fall müssen Sie auch die Portnummer für Clientprogramme angeben, die über TCP/IP eine Verbindung mit dem Server herstellen wollen.

Ein anderer Grund, warum kein Zugriff auf den Port möglich ist, könnte eine laufende Firewall sein, die Verbindungen zu diesem Port unterbindet. In diesem Fall müssen Sie die Firewall-Einstellungen so abändern, dass ein Zugriff möglich ist.

Wenn der Server startet, Sie aber keine Verbindung zu ihm herstellen können, dann sollten Sie sicherstellen, dass ein Eintrag wie der folgende in `/etc/hosts` vorhanden ist:

    127.0.0.1       localhost

Dieses Problem tritt nur bei Systemen auf, die über keine funktionierende Thread-Bibliothek verfügen und für die MySQL zur Verwendung von MIT-pthreads konfiguriert sein muss.

Wenn Sie mysqld nicht zum Laufen bringen, können Sie versuchen, unter Verwendung der Option `--debug` eine Trace-Datei zu erstellen, um das Problem zu ermitteln. Siehe auch Abschnitt E.1.2, „Trace-Dateien erzeugen“.

### 2.9.3. Einrichtung der anfänglichen MySQL-Berechtigungen

Eine wesentliche Komponente des MySQL-Installationsprozesses ist die Einrichtung der `mysql`-Datenbank, die die Grant-Tabellen enthält:

- Windows-Distributionen enthalten vorinitialisierte Grant-Tabellen, die automatisch installiert werden.

- Unter Unix werden die Grant-Tabellen durch das Programm mysql_install_db ausgefüllt. Einige Installationsmethoden führen dieses Programm für Sie aus. Andere wiederum erfordern eine manuelle Ausführung. Detaillierte Informationen finden Sie in Abschnitt 2.9.2, „Schritte nach der Installation unter Unix“.

Die Grant-Tabellen definieren die vorgabeseitigen MySQL-Benutzerkonten und deren Zugriffsberechtigungen. Diese Konten werden wie folgt eingerichtet:

- Es werden Konten mit dem Benutzernamen `root` erstellt. Dies sind Superuser-Konten, die alles dürfen. Anfänglich sind die Passwörter der `root`-Konten leer, d. h., jeder kann als `root` — ohne Passwort — eine Verbindung mit dem MySQL Server herstellen und erhält alle Berechtigungen.

  - Unter Windows wird genau ein `root`-Konto erstellt. Dieses erlaubt nur eine Verbindung über den lokalen Host. Das Windows-Installationsprogramm erstellt optional ein Konto, welches Verbindung von beliebigen Hosts ermöglicht. Dieses Konto wird jedoch nur dann angelegt, wenn die Option Enable root access from remote machines während der Installation gewählt wurde.

  - Unter Unix sind beide `root`-Konten für Verbindungen vom lokalen Host vorgesehen. Verbindungen vom lokalen Host müssen unter Angabe von `localhost` für das eine Konto bzw. des tatsächlichen Hostnamens oder der IP-Nummer für das andere Konto hergestellt werden.

- Es werden zwei Konten für anonyme Benutzer erstellt; bei beiden ist der Benutzername leer. Die anonymen Konten haben kein Passwort, d. h., jeder kann über sie eine Verbindung zum MySQL Server herstellen.

  - Unter Windows wird ein anonymes Konto für Verbindungen vom lokalen Host eingerichtet. Es hat ebenso wie die `root`-Konten alle Berechtigungen. Das andere Konto ist für Verbindungen von beliebigen Hosts vorgesehen und hat alle Berechtigungen für die `test`-Datenbank und für alle Datenbanken, deren Name auf `test` beginnt.

  - Unter Unix sind beide anonymen Konten für Verbindungen vom lokalen Host vorgesehen. Verbindungen vom lokalen Host müssen unter Angabe von `localhost` für das eine Konto bzw. des tatsächlichen Hostnamens oder der IP-Nummer für das andere Konto hergestellt werden. Diese Konten haben alle Berechtigungen für die Datenbank `test` und für alle Datenbanken, deren Name mit `test_` beginnt.

Wie bereits angemerkt, hat keines der Vorgabekonten ein Passwort. Das bedeutet, dass Ihre MySQL-Installation nicht geschützt ist, bis Sie etwas Entsprechendes unternehmen:

- Wenn Sie verhindern wollen, dass Clients sich ohne Angabe eines Passworts als anonyme Benutzer anmelden können, sollten Sie entweder für jedes anonyme Konto ein Passwort einrichten oder die Konten ganz entfernen.

- Allen MySQL-`root`-Konten sollten Sie Passwörter zuweisen.

Die folgenden Angaben erläutern, wie Sie Passwörter für die vorgegebenen MySQL-Konten erstellen – erst für die anonymen Konten und dann für die `root`-Konten. Ersetzen Sie „ `newpwd` “ in den Beispielen durch das Passwort, welches Sie verwenden wollen. Die Erläuterungen behandeln auch die Frage, wie Sie die anonymen Konten entfernen können, wenn Sie anonymen Zugriff überhaupt nicht gestatten wollen.

Sie sollten die Einstellung der Passwörter auf einen späteren Zeitpunkt verschieben, damit Sie sie nicht angeben müssen, wenn Sie weitere Konfigurations- oder Testschritte durchführen. Achten Sie allerdings darauf, sie einzurichten, bevor Sie Ihre Installation für Produktionszwecke einsetzen.

Um Passwörter für anonyme Konten zu konfigurieren, stellen Sie als `root` eine Verbindung zum Server her und stellen das Passwort entweder mit `SET PASSWORD` ein oder führen eine `UPDATE`-Anweisung aus. In beiden Fällen müssen Sie das Passwort mit der `PASSWORD()`-Funktion verschlüsseln.

`SET PASSWORD` verwenden Sie unter Windows wie folgt:

    shell> mysql -u root
    mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd');
    mysql> SET PASSWORD FOR ''@'%' = PASSWORD('newpwd');

`SET PASSWORD` verwenden Sie unter Unix wie folgt:

    shell> mysql -u root
    mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd');
    mysql> SET PASSWORD FOR ''@'host_name' = PASSWORD('newpwd');

In der zweiten `SET PASSWORD`-Anweisung ersetzen Sie `host_name` durch den Namen des Serverhosts. Es handelt sich dabei um den Namen, den Sie in der Spalte `Host` desjenigen `root`-Datensatzes in der Tabelle `user` angegeben haben, der nicht mit `localhost` verknüpft wird. Wenn Sie diesen Hostnamen nicht kennen, setzen Sie die folgende Anweisung vor der Verwendung von `SET PASSWORD` ab:

    mysql> SELECT Host, User FROM mysql.user;

Suchen Sie nach dem Datensatz, bei dem `root` in der Spalte `User` und etwas anderes als `localhost` in der Spalte `Host` steht. Verwenden Sie dann diesen `Host`-Wert in der zweiten `SET PASSWORD`-Anweisung.

Die andere Möglichkeit, Passwörter für anonyme Konten zuzuweisen, ist die Verwendung von `UPDATE` zur direkten Modifizierung der Tabelle `user`. Stellen Sie als `root` eine Verbindung zum Server her und setzen Sie eine `UPDATE`-Anweisung ab, die in der Spalte `Password` der betreffenden Datensätze in der Tabelle `user` einen Wert hinzufügt. Der Vorgang ist bei Windows und Unix identisch. Die folgende `UPDATE`-Anweisung weist beiden anonymen Konten gleichzeitig ein Passwort zu:

    shell> mysql -u root
    mysql> UPDATE mysql.user SET Password = PASSWORD('newpwd')
        ->     WHERE User = '';
    mysql> FLUSH PRIVILEGES;

Wenn Sie die Passwörter in der Tabelle `user` mit `UPDATE` direkt aktualisieren, müssen Sie den Server mit `FLUSH PRIVILEGES` anweisen, die Grant-Tabellen neu einzulesen. Andernfalls werden Ihre Änderungen erst umgesetzt, wenn Sie den Server neu starten.

Wenn Sie die anonymen Konten stattdessen ganz entfernen wollen, gehen Sie wie folgt vor:

    shell> mysql -u root
    mysql> DELETE FROM mysql.user WHERE User = '';
    mysql> FLUSH PRIVILEGES;

Die `DELETE`-Anweisung gilt für Windows und Unix gleichermaßen. Wenn Sie unter Windows nur das anonyme Konto entfernen wollen, das die gleichen Berechtigungen wie `root` hat, geben Sie stattdessen Folgendes ein:

    shell> mysql -u root
    mysql> DELETE FROM mysql.user WHERE Host='localhost' AND User='';
    mysql> FLUSH PRIVILEGES;

Dieses Konto gewährt anonymen Zugriff, verfügt aber über Vollzugriff; insofern verbessern Sie die Sicherheit, wenn Sie es entfernen.

Sie können den `root`-Konten Passwörter auf mehreren unterschiedlichen Wegen zuweisen. Im Folgenden wollen wir drei Methoden demonstrieren:

- Verwenden der `SET PASSWORD`-Anweisung

- Verwenden des befehlszeilenbasierten Clientprogramms mysqladmin

- Verwenden der `UPDATE`-Anweisung

Um Passwörter mit `SET PASSWORD` zuzuweisen, stellen Sie als `root` eine Verbindung zum Server her und setzen zwei `SET PASSWORD`-Anweisungen ab. Beachten Sie dabei, dass Sie das Passwort mit der `PASSWORD()`-Funktion verschlüsseln müssen.

Unter Windows geben Sie Folgendes ein:

    shell> mysql -u root
    mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd');
    mysql> SET PASSWORD FOR 'root'@'%' = PASSWORD('newpwd');

Unter Unix geben Sie Folgendes ein:

    shell> mysql -u root
    mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd');
    mysql> SET PASSWORD FOR 'root'@'host_name' = PASSWORD('newpwd');

In der zweiten `SET PASSWORD`-Anweisung ersetzen Sie `host_name` durch den Namen des Serverhosts. Dies ist derselbe Hostname, den Sie bei der Zuweisung der Passwörter für die anonymen Konten verwendet haben.

Um für die `root`-Konten Passwörter mit mysqladmin zu konfigurieren, führen Sie folgende Befehle aus:

    shell> mysqladmin -u root password "newpwd"
    shell> mysqladmin -u root -h host_name password "newpwd"

Diese Befehle gelten für Windows und Unix gleichermaßen. Im zweiten Befehl ersetzen Sie `host_name` durch den Namen des Serverhosts. Die doppelten Anführungszeichen, die das Passwort umgeben, sind nicht immer erforderlich; Sie sollten sie aber verwenden, wenn das Passwort Leerzeichen oder andere Zeichen enthält, die Ihr Befehls-Interpreter als Sonderzeichen interpretiert.

Sie können auch mithilfe von `UPDATE` die Tabelle `user` direkt bearbeiten. Die folgende `UPDATE`-Anweisung weist beiden `root`-Konten gleichzeitig ein Passwort zu:

    shell> mysql -u root
    mysql> UPDATE mysql.user SET Password = PASSWORD('newpwd')
        ->     WHERE User = 'root';
    mysql> FLUSH PRIVILEGES;

Die `UPDATE`-Anweisung gilt für Windows und Unix gleichermaßen.

Nachdem die Passwörter konfiguriert wurden, müssen Sie immer, wenn Sie eine Serververbindung herstellen, das Passwort angeben. Wollen Sie also etwa mysqladmin zum Herunterfahren des Servers verwenden, dann tun Sie das mit folgendem Befehl:

    shell> mysqladmin -u root -p shutdown
    Enter password: (enter root password here)

Hinweis: Wenn Sie Ihr `root`-Passwort nach der Konfiguration vergessen haben, finden Sie in Abschnitt A.4.1, „Wie ein vergessenes Kennwort zurückgesetzt wird“, Informationen dazu, wie Sie das Passwort zurücksetzen.

Um weitere Konten einzurichten, können Sie die Anweisung `GRANT` verwenden. Informationen zur Vorgehensweise finden Sie in Abschnitt 5.9.2, „Hinzufügen neuer MySQL-Benutzer“.

## 2.10. MySQL aktualisieren (Upgrade/Downgrade)

Generell empfehlen wir, Upgrades nur von einer Release-Serie zur nächsten durchzuführen und keine Serien auszulassen. Wenn Sie beispielsweise derzeit MySQL 4.0 verwenden und dann auf eine neuere Serie aktualisieren wollen, führen Sie ein Upgrade auf MySQL 4.1 und nicht auf 5.0 oder 5.1 durch.

Die folgende Checkliste sollten Sie immer überprüfen, wenn Sie ein Upgrade durchführen:

- Vor der Aktualisierung von MySQL 5.0 auf 5.1 lesen Sie Abschnitt 2.10.1, „Upgrade von MySQL 5.0“, und Anhang D, MySQL-Änderungsverlauf (Change History). Dort finden Sie Informationen zu Funktionen, die bei MySQL 5.1 neu sind oder sich von jenen in MySQL 5.0 unterscheiden. Wenn Sie von einer Release-Serie vor MySQL 5.0 aus ein Upgrade durchführen wollen, sollten Sie nacheinander von Release-Serie zu Release-Serie aktualisieren, bis Sie MySQL 5.0 erreicht haben; danach können Sie auf MySQL 5.1 aktualisieren. Informationen zu Upgrades von MySQL 5.0 finden Sie im MySQL 5.0 Reference Manual. MySQL-Referenzhandbuch für die Versionen 3.23, 4.0 und 4.1 enthält die entsprechenden Angaben zu früheren Releases.

- Bevor Sie das Upgrade durchführen, sichern Sie Ihre Datenbanken einschließlich der `mysql`-Datenbank, die Ihre Grant-Tabellen enthält.

- Einige Releases von MySQL enthalten Änderungen an der Struktur der Grant-Tabellen, damit neue Berechtigungen oder Funktionen hinzugefügt werden können. Wenn Sie ein Upgrade auf eine neue MySQL-Version durchführen, sollten Sie Ihre Grant-Tabellen aktualisieren, damit sichergestellt ist, dass diese auf der aktuellen Struktur basieren und auf diese Weise neue Funktionalitäten nutzen können. Siehe auch Abschnitt 5.6, „mysql_fix_privilege_tables — Upgrade von MySQL-Systemtabellen“.

- Wenn Sie MySQL Server unter Windows betreiben, lesen Sie Abschnitt 2.3.15, „Upgrade von MySQL unter Windows“.

- Wenn Sie die Replikation nutzen, finden Sie in Abschnitt 6.7, „Upgrade eines Replikationssetups“, weitere Informationen zur Aktualisierung Ihrer Replikationskonfiguration.

- Haben Sie zuvor bereits eine MySQL-Max-Distribution installiert, die einen Server namens mysqld-max enthält, und wollen nun auf eine Nicht-Max-Version von MySQL aktualisieren, dann beachten Sie, dass mysqld_safe nach wie vor versucht, den alten Server mysqld-max auszuführen. Wenn Sie ein Upgrade durchführen, sollten Sie den alten mysqld-max-Server manuell entfernen, um sicherzustellen, dass mysqld_safe den neuen Server mysqld ausführt.

Sie können die Format- und Datendateien von MySQL jederzeit zwischen verschiedenen Versionen derselben Architektur hin- und herschieben, solange Sie die Release-Serie nicht wechseln. Wenn Sie den Zeichensatz bei der Ausführung von MySQL ändern, dann müssen Sie myisamchk -r -q --set-collation=`collation_name` für alle `MyISAM`-Tabellen ausführen. Andernfalls werden Ihre Indizes unter Umständen nicht korrekt sortiert, weil sich bei einer Änderung des Zeichensatzes auch die Sortierreihenfolge ändern kann.

Wenn Sie in Bezug auf neue Versionen eher vorsichtig sind, können Sie Ihr vorhandenes mysqld immer umbenennen, bevor Sie eine neue Version installieren. Verwenden Sie beispielsweise MySQL 5.0.13 und wollen auf 5.1.10 aktualisieren, dann benennen Sie Ihren aktuellen Server von mysqld zu mysqld-5.0.13 um. Tut Ihr neuer Server mysqld dann etwas Unerwartetes, dann können Sie ihn einfach herunterfahren und mit Ihrem alten mysqld neu starten.

Wenn Sie nach Durchführung eines Upgrades auf Probleme in Zusammenhang mit neu kompilierten Clientprogrammen (z. B. die Fehlermeldung `Commands out of sync`) stoßen oder unerwartete Speicherauszüge auftreten, dann haben Sie bei der Kompilierung Ihrer Programme wahrscheinlich alte Header- oder Bibliotheksdateien angegeben. In diesem Fall sollten Sie das Datum Ihrer Datei `mysql.h` und der Bibliothek `libmysqlclient.a` überprüfen, um sicherzustellen, dass diese der aktuellen MySQL-Distribution entstammen. Andernfalls müssen Sie Ihre Programme mit den neuen Headern und Bibliotheken neu kompilieren.

Wenn Probleme in der Art auftreten, dass der neue mysqld-Server nicht startet oder Sie ohne Passwort keine Verbindung herstellen können, dann schauen Sie nach, ob Sie nicht noch eine alte `my.cnf`-Datei von Ihrer vorherigen Installation verwenden. Diese Überprüfung können Sie mithilfe der Option `--print-defaults` vornehmen (z. B. mysqld --print-defaults). Wenn dieser Befehl etwas anderes als den Programmnamen anzeigt, dann beeinträchtigt eine aktive `my.cnf` den Server- oder Clientbetrieb.

Wenn Sie einen neuen MySQL-Release installieren, bietet es sich immer an, das Perl-Modul `DBD::mysql` neu zu erstellen und zu installieren. Gleiches gilt auch für die anderen MySQL-Schnittstellen wie die PHP-Erweiterung `mysql` und das Python-Modul `MySQLdb`.

### 2.10.1. Upgrade von MySQL 5.0

Wenn Sie von einer 5.0-Installation auf 5.0.10 oder höher aktualisieren, beachten Sie, dass es unumgänglich ist, Ihre Grant-Tabellen zu aktualisieren. Andernfalls wird die Erstellung gespeicherter Prozeduren und Funktionen unter Umständen nicht funktionieren. Die entsprechende Vorgehensweise ist in Abschnitt 5.6, „mysql_fix_privilege_tables — Upgrade von MySQL-Systemtabellen“, beschrieben.

Hinweis: Es ist gängige Praxis, Ihre Daten vor der Installation einer neuen Softwareversion zu sichern. Auch wenn MySQL mit Eifer daran arbeitet, ein möglichst hohes Qualitätsniveau zu erzielen, sollten Sie Ihre Daten immer schützen, indem Sie eine Sicherungskopie erstellen. MySQL empfiehlt in der Regel, dass Sie Ihre Tabellen aus vorherigen Versionen speichern und dann neu laden, um auf 5.1 zu aktualisieren.

Generell sollten Sie beim Upgrade von MySQL 5.0 auf 5.1 Folgendes tun:

- Überprüfen Sie die Einträge in den weiter unten in diesem Abschnitt vorhandenen Änderungslisten darauf, ob Ihre Anwendungen hierdurch auf irgendeine Weise betroffen sein könnten. Achten Sie dabei insbesondere auf solche Änderungen, die mit dem Vermerk Inkompatible Änderung versehen sind. Diese führen zu Inkompatibilitäten mit früheren MySQL-Versionen und können Ihre Aufmerksamkeit bereits vor Durchführung des Upgrades erfordern.

- Lesen Sie die Änderungshistorie von MySQL 5.1 im Hinblick auf die wesentlichen neuen Funktionen, die Sie in Version 5.1 verwenden können. Siehe auch Abschnitt D.1, „Änderungen in Release 5.1.x (Entwicklung)“.

- Wenn Sie MySQL Server unter Windows betreiben, lesen Sie Abschnitt 2.3.15, „Upgrade von MySQL unter Windows“.

- Wenn Sie die Replikation nutzen, finden Sie in Abschnitt 6.7, „Upgrade eines Replikationssetups“, weitere Informationen zur Aktualisierung Ihrer Replikationskonfiguration.

Die nachfolgenden Listen beschreiben Änderungen, die unter Umständen Anwendungen betreffen können und die Sie beachten sollten, wenn Sie auf Version 5.1 aktualisieren.

Änderungen beim Server:

- Inkompatible Änderung: MySQL 5.1 implementiert die Unterstützung einer sehr flexiblen Plug-In-API, die das Laden und Entladen verschiedener Komponenten während der Laufzeit gestattet, ohne dass der Server neu gestartet werden müsste. Siehe auch Abschnitt 26.2, „Die MySQL-Plug-In-Schnittstelle“. Die Plug-In-API benötigt die Tabelle `mysql.plugin`. Wenn Sie von einer älteren MySQL-Version aktualisieren, sollten Sie den Befehl mysql_fix_privilege_tables ausführen, um diese Tabelle zu erstellen. Siehe auch Abschnitt 5.6, „mysql_fix_privilege_tables — Upgrade von MySQL-Systemtabellen“.

  Plug-Ins werden in das Verzeichnis installiert, welches in der Systemvariablen `plugin_dir` spezifiziert ist. Diese Variable steuert auch die Position, von der der Server benutzerdefinierte Funktionen (User-Defined Functions, UDFs) lädt; dies stellt eine Änderung zu früheren Versionen von MySQL dar. Mithin müssen alle UDF-Bibliotheksdateien von jetzt an in das Plug-In-Verzeichnis installiert werden. Wenn Sie von einer älteren MySQL-Version aktualisieren, müssen Sie Ihre UDF-Dateien in das Plug-In-Verzeichnis migrieren.

- Die Systemvariable `table_cache` wurde umbenannt in `table_open_cache`. Skripten, die `table_cache` verwenden, sollten so angepasst werden, dass sie den neuen Namen benutzen.

- Inkompatible Änderung: Die Struktur der `FULLTEXT`-Indizes wurde in MySQL 5.1.6 geändert. Nach der Aktualisierung auf MySQL 5.1.6 oder höher müssen Sie die `REPAIR TABLE`-Anweisung für jede Tabelle aufrufen, die `FULLTEXT`-Indizes enthält.

SQL-Änderungen

- Inkompatible Änderung: Der Namespace für Trigger wurde in MySQL 5.0.10 geändert. Vorher mussten Trigger-Namen je Tabelle eindeutig sein. Nun muss eine Eindeutigkeit innerhalb des Schemas (Datenbank) gegeben sein. Eine Auswirkung dieser Änderung besteht darin, dass die Syntax `DROP TRIGGER` nun statt eines Tabellennamens einen Schemanamen verwendet (wobei dieser Schemaname optional ist; wird er weggelassen, dann wird das aktuelle Schema verwendet).

  Wenn Sie von einer vorherigen Version von MySQL 5 auf MySQL 5.0.10 oder höher aktualisieren, müssen Sie alle Trigger löschen und sie neu erstellen; andernfalls wird `DROP TRIGGER` nach dem Upgrade nicht funktionieren. Gehen Sie am besten wie folgt vor:

  1. Aktualisieren Sie auf MySQL 5.0.10 oder höher, um auf die Trigger-Daten in der Tabelle `INFORMATION_SCHEMA.TRIGGERS` zugreifen zu können. (Dies sollte auch für Trigger aus Versionen vor 5.0.10 funktionieren.)

  2. Speichern Sie alle Trigger-Definitionen mithilfe der folgenden `SELECT`-Anweisung:

         SELECT CONCAT('CREATE TRIGGER ', t.TRIGGER_SCHEMA, '.', t.TRIGGER_NAME,
                       ' ', t.ACTION_TIMING, ' ', t.EVENT_MANIPULATION, ' ON ',
                       t.EVENT_OBJECT_SCHEMA, '.', t.EVENT_OBJECT_TABLE,
                       ' FOR EACH ROW ', t.ACTION_STATEMENT, '//' )
         INTO OUTFILE '/tmp/triggers.sql'
         FROM INFORMATION_SCHEMA.TRIGGERS AS t;

     Die Anweisung verwendet `INTO OUTFILE`, d. h., Sie müssen die Berechtigung `FILE` haben. Die Datei wird auf dem Serverhost erstellt; wenn Sie wollen, können Sie einen anderen Dateinamen verwenden. Um hundertprozentig sicher zu sein, überprüfen Sie die Trigger-Definitionen in der Datei `triggers.sql` und fertigen unter Umständen eine Sicherung der Datei an.

  3. Beenden Sie den Server und löschen Sie alle Trigger, indem Sie sämtliche `.TRG`-Dateien in Ihren Datenbankverzeichnissen entfernen. Wechseln Sie dann in Ihr Datenverzeichnis und setzen Sie folgenden Befehl ab:

         shell> rm */*.TRG

  4. Starten Sie den Server und erstellen Sie alle Trigger mithilfe der `triggers.sql`-Datei neu: In meinem Fall sah dies beispielsweise so aus:

         mysql> delimiter // ;
         mysql> source /tmp/triggers.sql //

  5. Vergewissern Sie sich, dass alle Trigger mit der `SHOW TRIGGERS`-Anweisung erfolgreich erstellt wurden.

- Inkompatible Änderung: MySQL 5.1.6 hat die Berechtigung `TRIGGER` neu eingeführt. Zuvor benötigte man die Berechtigung `SUPER` zum Erstellen oder Löschen von Triggern. Jetzt ist für derartige Vorgänge die Berechtigung `TRIGGER` erforderlich. Dies ist eine Sicherheitsoptimierung, da Sie Benutzern nun nicht länger die Berechtigung `SUPER` gewähren müssen, damit diese Trigger erstellen können. Allerdings wurde die Anforderung, dass das Konto, welches in der `DEFINER`-Klausel eines Triggers genannt wird, die Berechtigung `SUPER` haben muss, dadurch ersetzt, dass das Konto nun die Berechtigung `TRIGGER` erfordert. Wenn Sie von einer früheren MySQL 5-Version auf MySQL 5.1.6 oder höher aktualisieren, sollten Sie überprüfen, welche Konten in der `DEFINER`-Klausel vorhandener Trigger aufgeführt sind, und sicherstellen, dass diese Konten die Berechtigung `TRIGGER` haben. Andernfalls werden sie bei Aktivierung fehlschlagen. Mit der folgenden Anweisung können Sie ermitteln, welche Konten in den `DEFINER`-Klauseln aufgeführt sind:

      SELECT DISTINCT DEFINER FROM INFORMATION_SCHEMA.TRIGGERS;

  Wenn Sie diesen Konten die Berechtigung `TRIGGER` gewährt haben, können Sie die Berechtigung `SUPER` für diejenigen Konten widerrufen, die Sie nicht anderweitig benötigen.

- Einige Schlüsselwörter sind in MySQL 5.1 reserviert, bei denen dies in MySQL 5.0 nicht der Fall war. Siehe auch Abschnitt 9.5, „Ist MySQL pingelig hinsichtlich reservierter Wörter?“.

- Die Anweisungen `INSTALL PLUGIN` und `UNINSTALL PLUGIN`, die für die Plug-In-API verwendet werden, sind neu. Gleiches gilt für die Klausel `WITH PARSER` der `FULLTEXT`-Indexerstellung, die ein Parser-Plug-In mit einem Volltextindex verknüpft. Abschnitt 26.2, „Die MySQL-Plug-In-Schnittstelle“.

### 2.10.2. Upgrade auf eine andere Architektur

Sie können die `.frm`-, `.MYI`- und `.MYD`-Dateien für `MyISAM`-Tabellen zwischen verschiedenen Architekturen kopieren, die dasselbe Fließkommaformat unterstützen. (MySQL sorgt automatisch für das erforderliche Austauschen von Bytes.) Siehe auch Abschnitt 14.1, „Die `MyISAM`-Speicher-Engine“.

In Fällen, in denen Sie Datenbanken zwischen verschiedenen Architekturen transferieren müssen, können Sie mit mysqldump eine Datei mit SQL-Anweisungen erstellen. Danach übertragen Sie die Datei auf das andere System und verwenden es dort als Eingabe für den mysql-Client.

Mit mysqldump --help erfahren Sie, welche Optionen vorhanden sind. Wenn Sie die Daten auf eine neuere Version von MySQL verschieben, sollten Sie mysqldump --opt verwenden, denn so profitieren Sie von allen Optimierungen, die zu einer kleineren Speicherdatei führen, welche sich auch schneller verarbeiten lässt.

Die einfachste (wenn auch nicht schnellste) Möglichkeit, eine Datenbank zwischen zwei Computern zu verschieben, besteht darin, die folgenden Befehle auf dem Rechner auszuführen, auf dem die Datenbank sich befindet:

    shell> mysqladmin -h 'other_hostname' create db_name
    shell> mysqldump --opt db_name | mysql -h 'other_hostname' db_name

Wollen Sie eine Datenbank von einem entfernten Computer über ein langsames Netzwerk kopieren, dann können Sie die folgenden Befehle verwenden:

    shell> mysqladmin create db_name
    shell> mysqldump -h 'other_hostname' --opt --compress db_name | mysql db_name

Sie können die Daten auch in einer Datei ablegen, diese auf den Zielcomputer übertragen und dann dort in die Datenbank einladen. So können Sie etwa eine Datenbank wie folgt in einer komprimierten Datei auf dem Quellcomputer speichern:

    shell> mysqldump --quick db_name | gzip > db_name.gz

Übertragen Sie die Datei mit den Datenbankinhalten auf den Zielcomputer und führen Sie dort folgende Befehle aus:

    shell> mysqladmin create db_name
    shell> gunzip < db_name.gz | mysql db_name

Sie können auch mysqldump und mysqlimport zur Übertragung der Datenbank verwenden. Bei großen Tabellen ist das wesentlich schneller als die einfache Verwendung von mysqldump. Bei den folgenden Befehlen steht `DUMPDIR` für den vollständigen Pfadnamen des Verzeichnisses, in dem Sie die Ausgabe von mysqldump speichern.

Zunächst erstellen Sie das Verzeichnis für die Ausgabedateien und speichern dann die Datenbank:

    shell> mkdir DUMPDIR
    shell> mysqldump --tab=DUMPDIR db_name

Danach übertragen Sie die Dateien im Verzeichnis `DUMPDIR` in das entsprechende Verzeichnis auf dem Zielcomputer und laden die Dateien dann dort in MySQL ein:

    shell> mysqladmin create db_name           # create database
    shell> cat DUMPDIR/*.sql | mysql db_name   # create tables in database
    shell> mysqlimport db_name DUMPDIR/*.txt   # load data into tables

Vergessen Sie nicht, die `mysql`-Datenbank zu kopieren, da darin die Grant-Tabellen gespeichert sind. Unter Umständen müssen Sie die Befehle auf dem neuen Computer als MySQL-`root`-Benutzer ausführen, bis Ihre `mysql`-Datenbank vor Ort ist.

Nachdem Sie die `mysql`-Datenbank auf dem neuen System importiert haben, führen Sie mysqladmin flush-privileges aus, damit der Server die Grant-Tabelle-Daten neu lädt.

## 2.11. Downgrade von MySQL

Dieser Abschnitt erläutert, was Sie tun sollten, um in dem unwahrscheinlichen Fall, dass eine ältere MySQL-Version besser funktionierte als eine neue Version, ein Downgrade durchzuführen.

Führen Sie das Downgrade innerhalb derselben Release-Serie durch (z. B. von 5.0.13 auf 5.0.12), dann müssen Sie in der Regel nur die neuen Binärdateien über die alten installieren. Mit den Datenbanken müssen Sie nichts machen. Allerdings empfiehlt es sich wie immer auch hier, ein Backup zu erstellen.

Die folgende Checkliste sollten Sie immer überprüfen, wenn Sie ein Downgrade durchführen:

- Lesen Sie den Abschnitt zur Aktualisierung auf die Release-Serie, von der aus Sie das Downgrade durchführen, um sicherzustellen, dass diese nicht bestimmte Funktionen enthält, die Sie doch benötigen. Siehe Abschnitt 2.10, „MySQL aktualisieren (Upgrade/Downgrade)“.

- Wenn für die betreffende Version ein Abschnitt zum Downgrade vorhanden ist, sollten Sie diesen ebenfalls sorgfältig lesen.

In den meisten Fällen können Sie die Format- und Datendateien von MySQL zwischen verschiedenen Versionen derselben Architektur hin- und herschieben, solange Sie die Release-Serie nicht wechseln.

Wenn Sie das Downgrade von einer Release-Serie auf eine andere durchführen, kann es bei den Speicherformaten der Tabellen zu Inkompatibilitäten kommen. In diesem Fall können Sie Ihre Tabellen vor dem Downgrade mithilfe von mysqldump speichern. Laden Sie nach Abschluss des Downgrades die Speicherauszugsdatei mit mysql oder `mysqlimport`, um die Tabellen neu zu erstellen. Beispiele finden Sie in Abschnitt 2.10.2, „Upgrade auf eine andere Architektur“.

Das offensichtlichste Symptom bei Downgrade-Inkompatibilitäten des Tabellenformats besteht darin, dass Sie Tabellen nicht öffnen können. Gehen Sie in diesem Fall wie folgt vor:

1. Beenden Sie den älteren MySQL Server, auf den Sie das Downgrade durchführen.

2. Starten Sie den neueren MySQL Server, von dem aus Sie das Downgrade durchführen.

3. Speichern Sie alle Tabellen, auf die der ältere Server nicht zugreifen konnte, mithilfe von mysqldump, um eine Speicherauszugsdatei zu erstellen.

4. Beenden Sie den neueren MySQL Server und starten Sie den älteren neu.

5. Laden Sie die Speicherauszugsdatei in den älteren Server. Nun sollten Sie auf Ihre Tabellen zugreifen können.

## 2.12. Betriebssystemspezifische Anmerkungen

### 2.12.1. Linux (alle Linux-Versionen)

Dieser Abschnitt beschreibt Probleme, die unter Linux aufgetreten sind. Die ersten Teilabschnitte schildern dabei betriebssystemspezifische Probleme allgemeiner Art, Probleme in Bezug auf die Verwendung von Binär- oder Quelldistributionen und Probleme nach Abschluss der Installation. Im Weiteren werden Probleme erläutert, die unter Linux auf bestimmten Plattformen auftreten.

Beachten Sie, dass die meisten dieser Probleme unter älteren Linux-Versionen auftreten. Wenn Sie eine neuere Version verwenden, werden Sie wahrscheinlich gar nichts bemerken.

#### 2.12.1.1. Anmerkungen zum Betriebssystem Linux

MySQL setzt die Linux-Version 2.0 oder höher voraus.

Warnung: Auf SMP-Systemen sind merkwürdige Probleme bei der Kombination Linux 2.2.14 und MySQL aufgetreten. Ferner haben uns einige MySQL-Benutzer mitgeteilt, dass sie schwerwiegende Stabilitätsprobleme bei der Verwendung von MySQL mit dem Kernel 2.2.14 hatten. Wenn Sie diesen Kernel verwenden, sollten Sie auf die Kernel-Version 2.2.19 (oder höher) oder auf Version 2.4 aktualisieren. Bei Multiprozessorsystemen sollten Sie die Verwendung der Kernel-Version 2.4 in jedem Fall in Betracht ziehen, da Sie dadurch einen erheblichen Geschwindigkeitszuwachs erfahren werden. Außerdem wird sich so die Stabilität Ihres Systems erhöhen.

Wenn Sie LinuxThreads verwenden, sollten mindestens drei laufende mysqld-Prozesse angezeigt werden. Das sind tatsächlich Threads. Ein Thread ist für den LinuxThreads-Manager, ein weiterer zur Verwaltung der Verbindungen und der dritte zur Verwaltung von Alarmmeldungen und Signalen.

#### 2.12.1.2. Anmerkungen zur Binärdistribution (Linux)

Die MySQL-Binär- und -RPM-Releases für die Linux-Intel-Kombination sind für optimale Geschwindigkeit konfiguriert. Wir versuchen immer, den schnellsten stabilen Compiler zu finden, der verfügbar ist.

Der Binär-Release wird mit `-static` verknüpft, d. h., Sie müssen sich in der Regel keine Gedanken darüber machen, welche Version der Systembibliotheken Sie haben. Sie müssen auch LinuxThreads nicht installieren. Ein mit `-static` verknüpftes Programm ist ein wenig größer als ein dynamisch verknüpftes Programm, aber auch ein bisschen schneller (ca. 3 bis 5 Prozent). Allerdings besteht ein Problem bei statisch verknüpften Programmen darin, dass Sie keine UDFs (User-Defined Functions, benutzerdefinierte Funktionen) verwenden können. Wenn Sie UDFs schreiben oder verwenden wollen (dies ist nur etwas für C- oder C++-Programmierer), dann müssen Sie MySQL selbst mit dynamischer Verknüpfung kompilieren.

Ein bekanntes Problem bei Binärdistributionen besteht darin, dass auf älteren Linux-Systemen, die `libc` verwenden (also z. B. Red Hat 4.x oder Slackware), gelegentlich Schwierigkeiten in Verbindung mit der Auflösung der Hostnamen auftreten (diese sind jedoch nicht schwerwiegend). Verwendet Ihr System `libc` statt `glibc2`, dann werden Sie wahrscheinlich Probleme in Verbindung mit der Hostnamensauflösung und `getpwnam()` haben. Diese treten auf, weil `glibc` (leider) auf einige externe Bibliotheken angewiesen ist, um die Namensauflösung und `getpwent()` implementieren zu können – und zwar auch dann, wenn mit der Option `-static` kompiliert wurde. Diese Probleme äußern sich auf zweierlei Weise:

- Bei der Ausführung von mysql_install_db erhalten Sie die folgende Fehlermeldung:

      Sorry, the host 'xxxx' could not be looked up

  Sie können dieses Problem beheben, indem Sie mysql_install_db --force ausführen, was dazu führt, dass der Test resolveip in mysql_install_db nicht ausgeführt wird. Der Nachteil besteht darin, dass Sie Hostnamen nicht in Grant-Tabellen verwenden können; mit Ausnahme von `localhost` müssen Sie dann immer die entsprechenden IP-Adressen angeben. Wenn Sie eine alte MySQL-Version verwenden, die `--force` nicht unterstützt, dann müssen Sie den Test `resolveip` in `mysql_install` manuell mit einem Texteditor entfernen.

- Unter Umständen erhalten Sie auch die folgende Fehlermeldung, wenn Sie versuchen, mysqld mit der Option `--user` auszuführen:

      getpwnam: No such file or directory

  Um dieses Problem zu umgehen, starten Sie mysqld mit dem Befehl `su` statt durch Angabe der Option `--user`. Auf diese Weise ändert das System die Benutzerkennung des mysqld-Prozesses selbst, d. h. mysqld muss dies nicht erledigen.

Eine andere Lösung, die beide Probleme behebt, besteht darin, keine Binärdistribution zu verwenden. Beschaffen Sie sich eine MySQL-Quelldistribution (im RPM- oder `tar.gz`-Format) und installieren Sie diese stattdessen.

Bei manchen Linux 2.2-Versionen erhalten Sie unter Umständen die Fehlermeldung `Resource temporarily unavailable`, wenn Clients über TCP/IP sehr schnell viele neue Verbindungen mit einem mysqld-Server herstellen. Das Problem besteht darin, dass bei Linux zwischen dem Moment, zu dem ein TCP/IP-Socket von Ihnen geschlossen wird, und dem Zeitpunkt der tatsächlichen Freigabe des Sockets eine Verzögerung auftritt. Es ist nur für eine endliche Anzahl von TCP/IP-Slots Platz vorhanden; deswegen sind zu wenig Ressourcen vorhanden, wenn Clients innerhalb kurzer Zeit zu viele neue TCP/IP-Verbindungen anfordern. Beispielsweise tritt dieser Fehler auf, wenn Sie den MySQL-Benchmark `test-connect` über TCP/IP ausführen.

Wir haben dieses Problem einige Male auf verschiedenen Linux-Mailinglisten beschrieben, konnten aber niemals eine geeignete Lösung finden. Der einzige bekannte „Fix“ besteht darin, dass Clients Permanentverbindungen verwenden oder Sie, wenn Sie den Datenbankserver und die Clients auf demselben Rechner ausführen, Verbindungen via Unix-Socketdatei statt TCP/IP-Verbindungen einsetzen.

#### 2.12.1.3. Anmerkungen zur Linux-Quelldistribution

Die folgenden Anmerkungen zu `glibc` betreffen Sie nur, wenn Sie MySQL selbst erstellen. Wenn Sie Linux auf einem x86-Computer ausführen, sollten Sie in den meisten Fällen besser unsere Binärdistribution verwenden. Wir verknüpfen unsere Binärdateien zur jeweils am besten gepatchten Version von `glibc`, die wir finden können, und mit den bestmöglichen Compiler-Einstellungen, um sie so für hochbeanspruchte Server zu optimieren. Für normale Benutzer ist unsere Binärdistribution auch in Setups mit vielen gleichzeitigen Verbindungen oder Tabellen, die die 2-Gbyte-Grenze sprengen, in den meisten Fällen erste Wahl. Wenn Sie nach der Lektüre des folgenden Texts nicht genau wissen, wie Sie vorgehen sollen, probieren Sie zunächst unsere Binärdatei aus, um zu ermitteln, ob diese für Ihre Anforderungen geeignet ist. Sollten Sie feststellen, dass dies nicht der Fall ist, dann sollten Sie eine selbsterstellte Version erproben. In diesem Fall würden wir uns freuen, wenn Sie uns dies mitteilen würden, damit wir beim nächsten Mal eine bessere Binärdistribution erstellen können.

MySQL verwendet LinuxThreads unter Linux. Wenn Sie eine alte Linux-Version verwenden, die `glibc2` nicht enthält, dann müssen Sie LinuxThreads installieren, bevor Sie MySQL zu kompilieren versuchen. Sie bekommen LinuxThreads unter http://dev.mysql.com/downloads/os-linux.html.

Beachten Sie, dass `glibc`-Versionen bis einschließlich 2.1.1 beim Umgang mit `pthread_mutex_timedwait()`, welches beim Absetzen von `INSERT DELAYED`-Anweisungen verwendet wird, einen schweren Bug aufweisen. Wir empfehlen Ihnen, `INSERT DELAYED` erst nach der Aktualisierung von `glibc` zu verwenden.

Beachten Sie, dass der Linux-Kernel und die LinuxThread-Bibliothek standardmäßig maximal 1024 Threads verwalten können. Wenn Sie mehr als 1000 gleichzeitige Verbindungen vorsehen, dann müssen Sie wie folgt ein paar Änderungen an LinuxThreads vornehmen:

- Erhöhen Sie den Wert `PTHREAD_THREADS_MAX` in `sysdeps/unix/sysv/linux/bits/local_lim.h` auf 4096 und verringern Sie `STACK_SIZE` in `linuxthreads/internals.h` auf 256 Kbyte. Die Pfade sind relativ zum Stammverzeichnis von `glibc`. (Beachten Sie, dass MySQL bei 600 bis 1000 Verbindungen nicht stabil läuft, wenn `STACK_SIZE` auf der Vorgabe von 2 Mbyte belassen wird.)

- Kompilieren Sie LinuxThreads erneut, um eine neue `libpthread.a`-Bibliothek zu erzeugen, und verknüpfen Sie MySQL dann wieder damit.

Weitere Informationen dazu, wie Sie Thread-Beschränkungen in LinuxThreads umgehen, finden Sie unter http://www.volano.com/linuxnotes.html.

Es gibt noch ein weiteres Problem, dass die Performance von MySQL insbesondere auf SMP-Systemen erheblich beeinträchtigt. `glibc` 2.1 weist eine sehr schwache Mutex-Implementierung in LinuxThreads für Programme mit vielen Threads auf, die das Mutex nur für eine kurze Zeit halten. Die Folgen sind paradox: Wenn Sie MySQL mit einer nicht modifizierten LinuxThreads-Version verbinden, können Sie die Leistungsfähigkeit von MySQL in vielen Fällen verbessern, indem Sie Prozessoren aus dem SMP entfernen! Wir haben für `glibc` 2.1.3 unter http://dev.mysql.com/Downloads/Linux/linuxthreads-2.1-patch einen Patch bereitgestellt, um dieses Verhalten zu korrigieren.

Bei `glibc` 2.2.2 verwendet MySQL das adaptive Mutex, welches wesentlich besser ist als bei `glibc` 2.1.3 (auch in der gepatchten Version). Wir wollen aber darauf hinweisen, dass der aktuelle Mutex-Code in `glibc` 2.2.2 gelegentlich zu viel des Guten tut, wodurch die MySQL-Performance wieder beeinträchtigt wird. Die Wahrscheinlichkeit, dass ein solches Verhalten auftritt, kann dadurch verringert werden, dass man dem Prozess mysqld die höchste Priorität zuweist. Wir konnten das Problem zudem ebenfalls mit einem Patch beheben, den Sie unter http://dev.mysql.com/Downloads/Linux/linuxthreads-2.2.2.patch finden. Dieser Patch korrigiert alle drei hier beschriebenen Probleme: das `STACK_SIZE`-Problem, das Problem der Thread-Beschränkung und das Mutex-Problem. Er muss im Verzeichnis `linuxthreads` mit `patch -p0 </tmp/linuxthreads-2.2.2.patch` angewendet werden. Wir hoffen, dass er in irgendeiner Form in zukünftigen Releases von `glibc` 2.2 enthalten sein wird. In jedem Fall müssen Sie bei der Verknüpfung mit `glibc` 2.2.2 `STACK_SIZE` und `PTHREAD_THREADS_MAX` korrigieren. Wir hoffen, dass die Standardeinstellungen in Zukunft auf Werte korrigiert werden, die für hochbeanspruchte MySQL Server geeigneter sind; in diesem Fall ließen sich die Befehle zur Erstellung eines eigenen Builds auf ./configure; make; make install beschränken.

Wir empfehlen Ihnen, diese Patches zur Erstellung einer speziellen statischen Version von `libpthread.a` zu verwenden und diese dann nur für die statische Verknüpfung mit MySQL zu verwenden. Wir wissen, dass diese Patches in Verbindung mit MySQL einwandfrei funktionieren und die Leistungsfähigkeit erheblich verbessern, können jedoch nichts zu ihren Auswirkungen auf andere Anwendungen sagen. Wenn Sie andere Anwendungen verknüpfen, die LinuxThreads mit einer anderen als der gepatchten statischen Version der Bibliothek benötigen, oder eine gepatchte gemeinsame Version erstellen und diese auf Ihrem System installieren, dann tun Sie dies auf eigenes Risiko.

Sollten während der Installation von MySQL merkwürdige Probleme auftreten oder bestimmte gängige Hilfsprogramme stehen bleiben, dann ist dies mit hoher Wahrscheinlichkeit durch die Bibliothek oder den Compiler verursacht. Wenn dies der Fall ist, dann können Sie diese Probleme mithilfe unserer Binärdistribution lösen.

Wenn Sie eigene MySQL-Clientprogramme verknüpfen, dann wird unter Umständen die folgende Fehlermeldung zur Laufzeit angezeigt:

    ld.so.1: fatal: libmysqlclient.so.#:
    open failed: No such file or directory

Dieses Problem lässt sich auf eine der folgenden Weisen lösen:

- Verknüpfen Sie die Clients mit dem Flag `-Wl,r/full/path/to/libmysqlclient.so` statt mit `-Lpath`.

- Kopieren Sie `libmysqclient.so` nach `/usr/lib`.

- Fügen Sie den Pfadnamen des Verzeichnisses, in dem sich `libmysqlclient.so` befindet, der Umgebungsvariablen `LD_RUN_PATH` hinzu, bevor Sie den Client ausführen.

Wenn Sie den Fujitsu-Compiler (`fcc/FCC`) verwenden, treten unter Umständen Probleme bei der Kompilierung von MySQL auf, weil die Linux-Header-Dateien sehr stark auf gcc ausgerichtet sind. Der folgende configure-Befehl sollte auch für fcc/FCC funktionieren:

    CC=fcc CFLAGS="-O -K fast -K lib -K omitfp -Kpreex -D_GNU_SOURCE \
        -DCONST=const -DNO_STRTOLL_PROTO" \
    CXX=FCC CXXFLAGS="-O -K fast -K lib \
        -K omitfp -K preex --no_exceptions --no_rtti -D_GNU_SOURCE \
        -DCONST=const -Dalloca=__builtin_alloca -DNO_STRTOLL_PROTO \
        '-D_EXTERN_INLINE=static __inline'" \
    ./configure \
        --prefix=/usr/local/mysql --enable-assembler \
        --with-mysqld-ldflags=-all-static --disable-shared \
        --with-low-memory

#### 2.12.1.4. Anmerkungen zu Linux: nach der Installation

mysql.server finden Sie im Verzeichnis `support-files`, das sich im MySQL-Installationsverzeichnis befindet, oder in einem MySQL-Source-Tree. Sie können es als `/etc/init.d/mysql` installieren, um MySQL automatisch zu starten und zu beenden. Siehe auch Abschnitt 2.9.2.2, „MySQL automatisch starten und anhalten“.

Wenn MySQL nicht genügend Dateien oder Verbindungen öffnen kann, haben Sie Linux möglicherweise nicht so konfiguriert, dass es genug Dateien verwalten kann.

Unter Linux 2.2 und höher können Sie die Anzahl zugewiesener Datei-Handles wie folgt überprüfen:

    shell> cat /proc/sys/fs/file-max
    shell> cat /proc/sys/fs/dquot-max
    shell> cat /proc/sys/fs/super-max

Wenn Sie mehr als 16 Mbyte Speicher haben, sollten Sie Ihre Skripten durch einen Zusatz in der Art des folgenden ergänzen (z. B. `/etc/init.d/boot.local` unter SuSE Linux):

    echo 65536 > /proc/sys/fs/file-max
    echo 8192 > /proc/sys/fs/dquot-max
    echo 1024 > /proc/sys/fs/super-max

Sie können die `echo`-Befehle auf der Befehlszeile auch als `root` ausführen, aber diese Einstellungen gehen beim nächsten Neustart Ihres Computers verloren.

Alternativ stellen Sie diese Parameter für den Start mithilfe des Tools `sysctl` ein, welches von vielen Linux-Distributionen (einschließlich SuSE Linux 8.0 und höher) verwendet wird. Tragen Sie die folgenden Werte in eine Datei namens `/etc/sysctl.conf` ein:

    # Increase some values for MySQL
    fs.file-max = 65536
    fs.dquot-max = 8192
    fs.super-max = 1024

Außerdem sollten Sie Folgendes in `/etc/my.cnf` ergänzen:

    [mysqld_safe]
    open-files-limit=8192

Auf diese Weise konfigurieren Sie für den Server eine Gesamtbeschränkung der Verbindungen und offenen Dateien auf 8192.

Die Konstante `STACK_SIZE` in LinuxThreads steuert das Spacing von Thread-Stapeln im Adressraum. Dieses muss groß genug sein, um genügend Raum für jeden einzelnen Thread-Stapel bereitzustellen, aber auch klein genug, um zu verhindern, dass der Stapel bestimmter Threads mit den globalen mysqld-Daten kollidiert. Leider trennt, wie wir durch Experimentieren festgestellt haben, die Linux-Implementierung von `mmap()` einen bereits zugeordneten Bereich wieder auf, wenn Sie sie anweisen, die Zuordnung einer derzeit verwendeten Adresse aufzulösen: Es wird kein Fehler zurückgegeben, sondern alle Daten auf der gesamten Seite werden auf null gesetzt. Insofern hängt die Sicherheit von mysqld und allen anderen Thread-basierten Anwendungen vom „wohlwollenden“ Verhalten des Codes ab, der die Threads erstellt. Der Benutzer muss Maßnahmen ergreifen, um sicherzustellen, dass die Anzahl laufender Threads jederzeit so niedrig ist, dass es nicht zum Konflikt zwischen den Thread-Stapeln und dem globalen Bereich kommt. Bei mysqld sollten Sie dieses Verhalten erzwingen, indem Sie der Variablen `max_connections` einen sinnvollen Wert zuweisen.

Wenn Sie MySQL selbst erstellen, können Sie LinuxThreads für eine bessere Stapelnutzung patchen. Siehe auch Abschnitt 2.12.1.3, „Anmerkungen zur Linux-Quelldistribution“. Wenn Sie LinuxThreads aber nicht patchen wollen, sollten Sie `max_connections` auf einen Wert von maximal 500 setzen. Arbeiten Sie mit einem großen Schlüsselpuffer, großen Heap-Tabellen oder anderen Materialien, die zu einer umfassenden Speicherzuweisung durch mysqld führen, oder verwenden Sie die Kernel-Version 2.2 mit einem 2-Gbyte-Patch, dann sollte der Wert noch kleiner sein. Wenn Sie unsere Binär- oder RPM-Version verwenden, können Sie `max_connections` beruhigt auf 1500 setzen, sofern Sie weder große Schlüsselpuffer noch datenintensive Heap-Tabellen benutzen. Je stärker Sie `STACK_SIZE` in LinuxThreads verringern, desto mehr Threads können Sie gefahrlos erstellen. Wir empfehlen Werte zwischen 128 und 256 Kbyte.

Wenn Sie zahlreiche nebenläufige Verbindungen verwenden, können Sie einem „Feature“ im Kernel 2.2 zum Opfer fallen, das Fork-Bomb-Angriffe verhindern soll, indem Prozesse, die untergeordnete Prozesse aufspalten oder klonen, eine Strafe erhalten. Hierdurch wird die Skalierbarkeit zunehmend beeinträchtigt, je größer die Anzahl nebenläufiger Clients ist. Auf Systemen mit nur einem Prozessor manifestiert sich dies unseren Beobachtungen zufolge in einer sehr langsamen Thread-Erstellung: Die Verbindungsherstellung mit MySQL kann sehr lange (bis zu einer Minute) dauern; Gleiches gilt für das Abbauen der Verbindung. Auf Multiprozessorsystemen haben wir bei steigender Clientanzahl eine allmähliche Abnahme der Abfragegeschwindigkeit feststellen können. Im Zuge der Lösung dieses Problems haben wir von einem unserer Benutzer einen Kernel-Patch erhalten, der seinen Angaben zufolge auf seiner Site geholfen haben soll. Dieser Patch ist unter http://dev.mysql.com/Downloads/Patches/linux-fork.patch verfügbar. Wir haben den Patch sowohl in Entwicklungs- als auch in Produktionssystemen umfassend getestet und festgestellt, dass sich die MySQL-Performance hierdurch erheblich verbessert, ohne dass es zu Problemen kommt. Deswegen empfehlen wir Benutzern, die hochbeanspruchte Server mit Kernel-Version 2.2 betreiben, seine Anwendung.

In der Kernel-Version 2.4 wurde das Problem behoben; wenn Sie also nicht mit der aktuellen Leistungsfähigkeit Ihres Systems zufrieden sind, ist es unter Umständen einfacher, ein Upgrade auf Version 2.4 durchzuführen, statt Ihren 2.2-Kernel zu patchen. Auf SMP-Systemen erhalten Sie neben der Problembehandlung zusätzlich noch eine beträchtliche SMP-Steigerung.

Wir haben MySQL mit dem Kernel 2.4 auf einem System mit zwei Prozessoren getestet und festgestellt, dass sich MySQL wesentlich besser skalieren lässt. Es gab im gesamten Testbereich bis 1000 Clients praktisch keine Verringerung des Abfragedurchsatzes, und der MySQL-Skalierungsfaktor (berechnet als Verhältnis des maximalen Durchsatzes zum Durchsatz pro Client) lag bei 180 %. Ähnliche Ergebnisse konnten wir auf einem System mit vier CPUs beobachten: praktisch keine Verlangsamung, während die Anzahl der Clients auf 1000 erhöht wurde, und dazu ein Skalierungsfaktor von 300 %. Basierend auf diesen Ergebnissen empfehlen wir für hochbeanspruchte SMP-Server mit dem Kernel 2.2 derzeit in jedem Fall eine Aktualisierung auf Kernel 2.4.

Unseren Beobachtungen zufolge ist es unumgänglich, den Prozess mysqld unter dem Kernel 2.4 mit höchstmöglicher Priorität auszuführen, um maximale Leistung zu erzielen. Dies ist möglich, indem der Befehl `renice -20 $$` zu mysqld_safe hinzugefügt wird. Bei unseren Tests mit einem 4-CPU-Rechner haben wir eine 60-prozentige Durchsatzsteigerung bei 400 Clients erzielt.

Ferner versuchen wir derzeit auch, weitere Informationen dazu zu sammeln, wie gut MySQL mit dem Kernel 2.4 auf 4-Wege- und 8-Wege-Systemen funktioniert. Wenn Sie Zugang zu einem solchen System haben und einige Benchmarks erstellt haben, möchten wir Sie bitten, eine E-Mail mit den Ergebnissen an `<benchmarks@mysql.com>` zu senden. Wir werden diese prüfen und ggf. in das Handbuch aufnehmen.

Wenn Sie einen abgestürzten mysqld-Serverprozess mit ps erkennen, dann weist dies normalerweise darauf hin, dass Sie einen Bug in MySQL entdeckt haben oder eine Tabelle beschädigt ist. Siehe auch Abschnitt A.4.2, „Was zu tun ist, wenn MySQL andauernd abstürzt“.

Um, wenn mysqld mit einem `SIGSEGV`-Signal abstürzt, unter Linux einen Speicherauszug zu erhalten, können Sie mysqld mit der Option `--core-file` starten. Beachten Sie, dass Sie wahrscheinlich auch die Größe der Speicherauszugsdatei erhöhen müssen, indem Sie ulimit -c 1000000 zu mysqld_safe hinzufügen oder mysqld_safe mit `--core-file-size=1000000` starten. Siehe auch Abschnitt 5.4.1, „mysqld_safe — Startskript für den MySQL-Server“.

#### 2.12.1.5. Anmerkungen zu Linux x86

MySQL erfordert `libc` 5.4.12 oder höher. Bekanntermaßen funktioniert es mit `libc` 5.4.46. `glibc` 2.0.6 und höher sollten ebenfalls keine Probleme bereiten. Es hat in der Vergangenheit einige Probleme mit den `glibc`-RPMs von Red Hat gegeben. Prüfen Sie also bei Auftreten von Problemen, ob Updates vorhanden sind. Die `glibc`-RPMs 2.0.7-19 und 2.0.7-29 RPMs funktionieren ebenfalls einwandfrei.

Wenn Sie Red Hat 8.0 oder eine neue `glibc` 2.2.x-Bibliothek verwenden, werden Sie unter Umständen feststellen, dass sich mysqld in `gethostbyaddr()` aufhängt. Dies geschieht, weil die neue `glibc`-Bibliothek eine Stapelgröße von mehr als 128 Kbyte für diesen Aufruf benötigt. Um das Problem zu beheben, starten Sie mysqld mit der Option `--thread-stack=192K`. (Verwenden Sie `-O thread_stack=192K` bei MySQL vor Version 4.) Diese Stapelgröße ist bei MySQL 4.0.10 und höher voreingestellt, weswegen das Problem bei diesen Versionen nicht auftreten sollte.

Wenn Sie zur Kompilierung von MySQL gcc 3.0 und höher verwenden, müssen Sie die Bibliothek `libstdc++v3` vor der MySQL-Kompilierung installieren, da Sie andernfalls bei der Verknüpfung eine Fehlermeldung zu einem fehlenden `__cxa_pure_virtual`-Symbol erhalten.

Bei einigen älteren Linux-Distributionen erzeugt configure unter Umständen einen Fehler wie den folgenden:

    Syntax error in sched.h. Change _P to __P in the
    /usr/include/sched.h file.
    See the Installation chapter in the Reference Manual.

Tun Sie einfach, was die Fehlermeldung vorschlägt: Ergänzen Sie den Makronamen `_P`, der nur einen Unterstrich aufweist, um einen weiteren Unterstrich und probieren Sie es dann erneut.

Bei der Kompilierung werden unter Umständen Warnungen angezeigt. Die folgenden können dabei ignoriert werden:

    mysqld.cc -o objs-thread/mysqld.o
    mysqld.cc: In function `void init_signals()':
    mysqld.cc:315: warning: assignment of negative value `-1' to
    `long unsigned int'
    mysqld.cc: In function `void * signal_hand(void *)':
    mysqld.cc:346: warning: assignment of negative value `-1' to
    `long unsigned int'

Wenn mysqld beim Start immer einen Speicherauszug erzeugt, kann dies möglicherweise durch eine veraltete `/lib/libc.a` verursacht worden sein. Versuchen Sie sie umzubenennen, entfernen Sie `sql/mysqld`, führen Sie ein neues make install durch und probieren Sie es dann erneut. Dieses Problem wurde für einige Slackware-Installationen gemeldet.

Wenn Sie die folgende Fehlermeldung beim Verknüpfen von mysqld erhalten, ist Ihre `libg++.a` nicht korrekt installiert:

    /usr/lib/libc.a(putc.o): In function `_IO_putc':
    putc.o(.text+0x0): multiple definition of `_IO_putc'

Sie können die Verwendung von `libg++.a` vermeiden, indem Sie configure wie folgt ausführen:

    shell> CXX=gcc ./configure

#### 2.12.1.6. Anmerkungen zu Linux SPARC

Bei einigen Implementierungen ist `readdir_r()` fehlerhaft. Das Symptom besteht darin, dass die `SHOW DATABASES`-Anweisung immer eine leere Menge zurückgibt. Dies lässt sich durch Entfernen von `HAVE_READDIR_R` aus der Datei `config.h` nach der Konfiguration, aber vor der Kompilierung durchführen.

#### 2.12.1.7. Anmerkungen zu Linux Alpha

Wir haben MySQL 5.1 unter Linux Alpha mit unseren Benchmarks und unserer Testsuite getestet, und es scheint gut zu funktionieren.

Derzeit erstellen wir die MySQL-Binärpakete unter SuSE Linux 7.0 für AXP, Kernel 2.4.4-SMP, Compaq C-Compiler (V6.2-505) und Compaq C++-Compiler (V6.3-006) auf einem Compaq DS20-Computer mit einem Alpha EV6-Prozessor.

Sie finden die genannten Compiler unter http://www.support.compaq.com/alpha-tools/. Durch Verwendung dieser Compiler anstelle von gcc erhalten wir eine um ca. 9 bis 14 Prozent bessere MySQL-Performance.

Bei MySQL unter Alpha verwenden wir das Flag `-arch generic` für unsere Kompilierungsoptionen. Hierdurch ist sichergestellt, dass die Binärdatei auf allen Alpha-Prozessoren läuft. Wir kompilieren auch statisch, um Probleme mit Bibliotheken zu vermeiden. Der configure-Befehl sieht wie folgt aus:

    CC=ccc CFLAGS="-fast -arch generic" CXX=cxx \
    CXXFLAGS="-fast -arch generic -noexceptions -nortti" \
    ./configure --prefix=/usr/local/mysql --disable-shared \
        --with-extra-charsets=complex --enable-thread-safe-client \
        --with-mysqld-ldflags=-non_shared --with-client-ldflags=-non_shared

Wenn Sie egcs benutzen wollen, funktioniert unserer Erfahrung nach folgende configure-Zeile:

    CFLAGS="-O3 -fomit-frame-pointer" CXX=gcc \
    CXXFLAGS="-O3 -fomit-frame-pointer -felide-constructors \
        -fno-exceptions -fno-rtti" \
    ./configure --prefix=/usr/local/mysql --disable-shared

Es gibt ein paar bekannte Probleme bei der Ausführung von MySQL unter Linux-Alpha:

- Das Debugging von Thread-basierten Anwendungen wie MySQL funktioniert mit `gdb 4.18` nicht. Verwenden Sie stattdessen gdb 5.1.

- Wenn Sie versuchen, mysqld bei der Verwendung von gcc statisch zu verknüpfen, dann tritt beim Start des resultierenden Images ein Speicherauszug auf. Anders gesagt: Verwenden Sie keinesfalls `--with-mysqld-ldflags=-all-static` mit gcc.

#### 2.12.1.8. Anmerkungen zu Linux PowerPC

MySQL sollte auf MkLinux mit dem neuesten `glibc`-Paket funktionieren (getestet mit `glibc` 2.0.7).

#### 2.12.1.9. Anmerkungen zu Linux MIPS

Um MySQL auf Qube2 (Linux Mips) zum Laufen zu bringen, benötigen Sie die neuesten `glibc`-Bibliotheken. `glibc-2.0.7-29C2` funktioniert bekanntermaßen. Sie müssen ferner den C++-Compiler egcs verwenden (egcs 1.0.2-9, gcc 2.95.2 oder höher).

#### 2.12.1.10. Anmerkungen zu Linux IA-64

Um MySQL unter Linux IA-64 kompilieren zu können, verwenden wir den folgenden configure-Befehl zur Erstellung mit gcc 2.96:

    CC=gcc \
    CFLAGS="-O3 -fno-omit-frame-pointer" \
    CXX=gcc \
    CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors \
        -fno-exceptions -fno-rtti" \
        ./configure --prefix=/usr/local/mysql \
        "--with-comment=Official MySQL binary" \
        --with-extra-charsets=complex

Unter IA-64 verwenden die MySQL-Clientbinärdateien gemeinsame Bibliotheken. Das bedeutet, dass Sie, wenn Sie unsere Binärdistribution in einem anderen Verzeichnis als `/usr/local/mysql` installieren, den Pfad des Verzeichnisses, in dem `libmysqlclient.so` installiert ist, entweder der Datei `/etc/ld.so.conf` oder dem Wert der Umgebungsvariablen `LD_LIBRARY_PATH` hinzufügen müssen.

Siehe auch Abschnitt A.3.1, „Probleme beim Linken mit der MySQL-Clientbibliothek“.

### 2.12.2. Anmerkungen zu Mac OS X

Unter Mac OS X kann tar lange Dateinamen nicht verarbeiten. Wenn Sie eine `.tar.gz`-Distribution entpacken müssen, verwenden Sie stattdessen gnutar.

#### 2.12.2.1. Mac OS X 10.x (Darwin)

MySQL sollte unter Mac OS X 10.x (Darwin) ohne größere Probleme funktionieren.

Die folgenden Probleme sind bekannt:

- Die Verbindungszeiten (`wait_timeout`, `interactive_timeout` und `net_read_timeout`) werden nicht beachtet.

  Dies ist wahrscheinlich ein Signalverwaltungsproblem in der Thread-Bibliothek, wo das Signal eine anhängige Leseoperation nicht unterbricht. Wir hoffen, dass ein künftiges Update der Thread-Bibliotheken dieses Problem beheben wird.

Unsere Binärdatei für Mac OS X wird unter Darwin 6.3 mit der folgenden configure-Zeile kompiliert:

    CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc \
    CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors \
        -fno-exceptions -fno-rtti" \
        ./configure --prefix=/usr/local/mysql \
        --with-extra-charsets=complex --enable-thread-safe-client \
        --enable-local-infile --disable-shared

Siehe auch Abschnitt 2.5, „Installation von MySQL unter Mac OS X“.

#### 2.12.2.2. Mac OS X Server

Bei aktuellen Versionen von Mac OS X Server sind vor der Kompilierung keine Betriebssystemänderungen erforderlich. Die Kompilierung für die Serverplattform ist mit der für die Clientversion von Mac OS X identisch.

Bei älteren Versionen (Mac OS X Server 1.2, auch bekannt als „Rhapsody“) müssen Sie zunächst ein pthread-Paket installieren, bevor Sie MySQL konfigurieren können.

Siehe auch Abschnitt 2.5, „Installation von MySQL unter Mac OS X“.

### 2.12.3. Anmerkungen zu Solaris

Unter Solaris haben Sie möglicherweise schon die ersten Probleme, bevor Sie die MySQL-Distribution überhaupt entpacken können, denn tar unter Solaris kann mit langen Dateinamen nicht umgehen. Dies bedeutet, dass Ihnen unter Umständen Fehler angezeigt werden, wenn Sie MySQL entpacken.

In diesem Fall müssen Sie GNU tar (gtar) zum Entpacken der Distribution verwenden. Sie finden eine vorkompilierte Kopie für Solaris unter http://dev.mysql.com/downloads/os-solaris.html.

Native Sun-Threads funktionieren erst ab Solaris 2.5. Bis Solaris 2.4 verwendet MySQL automatisch MIT-pthreads. Siehe auch Abschnitt 2.8.5, „Anmerkungen zu MIT-pthreads“.

Wenn die folgende Fehlermeldung bei Ausführung von configure angezeigt wird, stimmt etwas mit Ihrer Compiler-Installation nicht:

    checking for restartable system calls... configure: error can not
    run test programs while cross compiling

In diesem Fall sollten Sie den Compiler auf eine neuere Version aktualisieren. Sie können das Problem möglicherweise auch beheben, indem Sie die folgende Zeile in die Datei `config.cache` einfügen:

    ac_cv_sys_restartable_syscalls=${ac_cv_sys_restartable_syscalls='no'}

Wenn Sie Solaris auf einem SPARC-System verwenden, wird gcc 2.95.2 oder 3.2 als Compiler empfohlen. Sie finden ihn unter http://gcc.gnu.org/. Beachten Sie, dass egcs 1.1.1 und gcc 2.8.1 auf SPARC nicht zuverlässig arbeiten.

Die empfohlene configure-Zeile sieht bei Verwendung von gcc 2.95.2 wie folgt aus:

    CC=gcc CFLAGS="-O3" \
    CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti" \
    ./configure --prefix=/usr/local/mysql --with-low-memory \
        --enable-assembler

Bei Verwendung eines UltraSPARC-Systems erhalten Sie eine um 4 Prozent bessere Performance, wenn Sie `-mcpu=v8 -Wa,-xarch=v8plusa` zu den Umgebungsvariablen `CFLAGS` und `CXXFLAGS` hinzufügen.

Wenn Sie den Forte-Compiler 5.0 oder höher von Sun einsetzen, können Sie configure wie folgt ausführen:

    CC=cc CFLAGS="-Xa -fast -native -xstrconst -mt" \
    CXX=CC CXXFLAGS="-noex -mt" \
    ./configure --prefix=/usr/local/mysql --enable-assembler

Um eine 64-Bit-Binärdatei mit Sun Forte zu erstellen, verwenden Sie die folgenden Konfigurationsoptionen:

    CC=cc CFLAGS="-Xa -fast -native -xstrconst -mt -xarch=v9" \
    CXX=CC CXXFLAGS="-noex -mt -xarch=v9" ASFLAGS="-xarch=v9" \
    ./configure --prefix=/usr/local/mysql --enable-assembler

Wenn Sie eine 64-Bit-Solaris-Binärdatei mit gcc erstellen wollen, ergänzen Sie `-m64` in `CFLAGS` und `CXXFLAGS` und entfernen Sie `--enable-assembler` aus der configure-Zeile.

In den MySQL-Benchmarks erhielten wir auf UltraSPARC bei der Verwendung von Forte 5.0 im 32-Bit-Modus im Vergleich zu gcc 3.2 mit dem Flag `-mcpu` einen Geschwindigkeitszuwachs von 4 Prozent.

Wenn Sie eine 64-Bit-mysqld-Binärdatei erstellen, ist diese um 4 Prozent langsamer als die 32-Bit-Binärdatei, kann aber mehr Threads und Speicher verwalten.

Wenn Sie Solaris 10 für x86_64 einsetzen, sollten Sie alle Dateisysteme einbinden, auf denen Sie `InnoDB`-Dateien mit der Option `forcedirectio` speichern wollen. (Standardmäßig erfolgt die Einbindung ohne diese Option.) Andernfalls entsteht ein erheblicher Leistungseinbruch, wenn die `InnoDB`-Speicher-Engine auf dieser Plattform verwendet wird.

Wenn Sie auf ein Problem mit `fdatasync` oder `sched_yield` stoßen, können Sie es beheben, indem Sie `LIBS=-lrt` zur configure-Zeile hinzufügen.

Bei Versionen des WorkShop-Compilers vor 5.3 müssen Sie eventuell das Skript configure bearbeiten. Die Zeile

    #if !defined(__STDC__) || __STDC__ != 1

ändern Sie wie folgt:

    #if !defined(__STDC__)

Wenn Sie `__STDC__` mit der Option `-Xc` aktivieren, kann der Sun-Compiler keine Kompilierung mit der `pthread.h`-Header-Datei von Solaris durchführen. Dies ist ein Sun-spezifischer Bug (beschädigter Compiler oder beschädigte Include-Datei).

Wenn mysqld die folgende Fehlermeldung bei der Ausführung ausgibt, haben Sie versucht, MySQL mit dem Sun-Compiler zu kompilieren, ohne die Multithread-Option `-mt` zu aktivieren:

    libc internal error: _rmutex_unlock: rmutex not held

Fügen Sie `-mt` zu `CFLAGS` und `CXXFLAGS` hinzu und kompilieren Sie neu.

Wenn Sie die SFW-Version von gcc verwenden (in Solaris 8 enthalten), dann müssen Sie `/opt/sfw/lib` zur Umgebungsvariablen `LD_LIBRARY_PATH` hinzufügen, bevor Sie configure ausführen.

Verwenden Sie das auf `sunfreeware.com` verfügbare gcc, dann werden Sie eine Menge Probleme haben. Um dies zu vermeiden, sollten Sie gcc und GNU `binutils` auf dem Computer kompilieren, auf dem sie auch ausgeführt werden sollen.

Wenn Sie bei der Kompilierung von MySQL mit gcc folgende Fehlermeldung erhalten, ist Ihr gcc nicht für Ihre Solaris-Version konfiguriert:

    shell> gcc -O3 -g -O2 -DDBUG_OFF  -o thr_alarm ...
    ./thr_alarm.c: In function `signal_hand':
    ./thr_alarm.c:556: too many arguments to function `sigwait'

In diesem Fall besteht die richtige Lösung einzig und allein darin, sich die neueste Version von gcc zu besorgen und sie mit Ihrem aktuellen gcc-Compiler zu kompilieren. Zumindest bei Solaris 2.5 enthalten praktisch alle Binärversionen von gcc alte, unbrauchbare Include-Dateien, die Thread-basierte (und wohl auch weitere) Programme beschädigen.

Solaris bietet keine statischen Versionen aller Systembibliotheken (`libpthreads` und `libdl`) an, d. h., Sie können MySQL nicht mit `--static` kompilieren. Wenn Sie es dennoch versuchen, erhalten Sie eine der folgenden Fehlermeldungen:

    ld: fatal: library -ldl: not found
    undefined reference to `dlopen'
    cannot find -lrt

Wenn Sie eigene MySQL-Clientprogramme verknüpfen, dann wird unter Umständen die folgende Fehlermeldung zur Laufzeit angezeigt:

    ld.so.1: fatal: libmysqlclient.so.#:
    open failed: No such file or directory

Dieses Problem lässt sich auf eine der folgenden Weisen lösen:

- Verknüpfen Sie die Clients mit dem Flag `-Wl,r/full/path/to/libmysqlclient.so` statt mit `-Lpath`.

- Kopieren Sie `libmysqclient.so` nach `/usr/lib`.

- Fügen Sie den Pfadnamen des Verzeichnisses, in dem sich `libmysqlclient.so` befindet, der Umgebungsvariablen `LD_RUN_PATH` hinzu, bevor Sie den Client ausführen.

Wenn Sie Probleme haben, configure mit `-lz` zu verknüpfen, weil `zlib` nicht installiert ist, dann haben Sie zwei Möglichkeiten:

- Wenn Sie das komprimierte Kommunikationsprotokoll einsetzen können wollen, müssen Sie `zlib` bei `ftp.gnu.org` herunterladen und installieren.

- Sie führen configure mit der Option `--with-named-z-libs=no` aus, wenn Sie MySQL erstellen.

Wenn Sie gcc verwenden und Probleme beim Einladen von UDFs (User-Defined Functions, benutzerdefinierte Funktionen) in MySQL haben, ergänzen Sie die Verknüpfungszeile für die UDF um `-lgcc`.

Wollen Sie, dass MySQL automatisch startet, dann können Sie `support-files/mysql.server` in das Verzeichnis `/etc/init.d` kopieren und eine symbolische Verknüpfung namens `/etc/rc3.d/S99mysql.server` zu ihr erstellen.

Wenn zu viele Prozesse innerhalb kurzer Zeit eine Verbindung mit mysqld herstellen wollen, werden Sie die folgende Fehlermeldung im MySQL-Log finden:

    Error in accept: Protocol error

Dieses Problem können Sie unter Umständen beheben, indem Sie den Server mit der Option `--back_log=50` starten. (Bei MySQL vor Version 4 verwenden Sie `-O back_log=50`.)

Solaris unterstützt Core-Dateien für `setuid()`-Anwendungen nicht, d. h., Sie können keine Core-Datei von mysqld erhalten, wenn Sie die Option `--user` verwenden.

#### 2.12.3.1. Anmerkungen zu Solaris 2.7/2.8

Normalerweise können Sie eine Binärdatei für Solaris 2.6 auch unter Solaris 2.7 oder 2.8 verwenden. Auch betreffen Probleme, die für Solaris 2.6 gelistet sind, meist ebenfalls Solaris 2.7 und 2.8.

MySQL sollte neue Versionen von Solaris automatisch erkennen können und für die im Folgenden beschriebenen Probleme Workarounds aktivieren.

Solaris 2.7 und 2.8 haben einige Bugs bei den Include-Dateien. Bei Verwendung von gcc erhalten Sie unter Umständen folgende Fehlermeldung:

    /usr/include/widec.h:42: warning: `getwc' redefined
    /usr/include/wchar.h:326: warning: this is the location of the previous
    definition

In diesem Fall können Sie das Problem beheben, indem Sie `/usr/include/widec.h` nach `.../lib/gcc-lib/os/gcc-version/include` kopieren. Die Zeile 41

    #if     !defined(lint) && !defined(__lint)

ändern Sie wie folgt:

    #if     !defined(lint) && !defined(__lint) && !defined(getwc)

Alternativ können Sie `/usr/include/widec.h` auch direkt editieren. Wenn Sie das Problem auf eine der beschriebenen Weisen behoben haben, sollten Sie `config.cache` entfernen und configure erneut ausführen.

Wenn Sie bei der Ausführung von make die folgenden Fehlermeldungen erhalten, liegt das daran, dass configure die Datei `curses.h` nicht erkannt hat (wahrscheinlich aufgrund des Fehlers in `/usr/include/widec.h`):

    In file included from mysql.cc:50:
    /usr/include/term.h:1060: syntax error before `,'
    /usr/include/term.h:1081: syntax error before `;'

Dieses Problem lässt sich auf mehreren Wegen lösen:

- Konfigurieren Sie mit `CFLAGS=-DHAVE_CURSES_H CXXFLAGS=-DHAVE_CURSES_H ./configure`.

- Bearbeiten Sie `/usr/include/widec.h` wie im vorherigen Abschnitt beschrieben und führen Sie configure erneut aus.

- Entfernen Sie die Zeile `#define HAVE_TERM` aus der Datei `config.h` und führen Sie make erneut aus.

Wenn Ihr Linker beim Verknüpfen von Clientprogrammen `-lz` nicht finden kann, besteht das Problem wahrscheinlich darin, dass Ihre Datei `libz.so` in `/usr/local/lib` installiert ist. Dieses Problem lässt sich auf eine der folgenden Weisen lösen:

- Fügen Sie `/usr/local/lib` zu `LD_LIBRARY_PATH` hinzu.

- Fügen Sie von `/lib` aus eine Verknüpfung zu `libz.so` hinzu.

- Wenn Sie Solaris 8 verwenden, können Sie die optionale `zlib` von Ihrer Solaris 8-Distributions-CD installieren.

- Sie führen configure mit der Option `--with-named-z-libs=no` aus, wenn Sie MySQL erstellen.

#### 2.12.3.2. Anmerkungen zu Solaris x86

Unter Solaris 8 auf x86 erzeugt mysqld einen Speicherauszug, wenn Sie die Debugsymbole mithilfe von `strip` entfernen.

Wenn Sie gcc oder egcs unter Solaris x86 verwenden und bei hoher Belastung Probleme mit Speicherauszügen haben, sollten Sie folgenden configure-Befehl verwenden:

    CC=gcc CFLAGS="-O3 -fomit-frame-pointer -DHAVE_CURSES_H" \
    CXX=gcc \
    CXXFLAGS="-O3 -fomit-frame-pointer -felide-constructors \
        -fno-exceptions -fno-rtti -DHAVE_CURSES_H" \
    ./configure --prefix=/usr/local/mysql

Hierdurch vermeiden Sie Probleme mit der Bibliothek `libstdc++` und mit C++-Ausnahmefehlern.

Sollte dies nicht helfen, dann sollten Sie eine Debugversion kompilieren und diese mit einer Trace-Datei oder unter gdb ausführen. Siehe auch Abschnitt E.1.3, „mysqld unter gdb debuggen“.

### 2.12.4. Anmerkungen zu BSD

In diesem Abschnitt erhalten Sie Informationen zur Verwendung von MySQL unter Varianten von BSD Unix.

#### 2.12.4.1. Anmerkungen zu FreeBSD

FreeBSD 4.x oder neuer wird für die Ausführung von MySQL empfohlen, da das Thread-Paket wesentlich besser integriert ist. Um ein sicheres und stabiles System zu erhalten, sollten Sie nur FreeBSD-Kernels verwenden, die mit `-RELEASE` gekennzeichnet sind.

Die einfachste (und deswegen empfohlene) Vorgehensweise zur Installation von MySQL besteht in der Verwendung der mysql-server- und `mysql-client`-Ports, die unter http://www.freebsd.org/ verfügbar sind. Die Verwendung dieser Ports hat die folgenden Vorteile:

- Sie erhalten ein funktionsfähiges MySQL, bei dem alle Optimierungen, die unter Ihrer FreeBSD-Version bekanntermaßen funktionieren, bereits aktiviert sind.

- Konfiguration und Erstellung werden automatisch durchgeführt.

- Startskripten sind in `/usr/local/etc/rc.d` installiert.

- Sie können mit `pkg_info -L` überprüfen, welche Dateien installiert sind.

- Sie können ferner mit `pkg_delete` MySQL entfernen, wenn Sie es auf Ihrem Rechner nicht mehr benötigen.

Wir empfehlen die Verwendung von MIT-pthreads unter FreeBSD 2.x und von nativen Threads unter FreeBSD 3 und höher. Zwar können auch spätere Versionen von Release 2.2.x mit nativen Threads betrieben werden, aber dann kann es zu Problemen beim Herunterfahren von mysqld kommen.

Leider sind bestimmte Funktionsaufrufe unter FreeBSD noch nicht vollständig Thread-sicher. Dies betrifft vor allem die Funktion `gethostbyname()`, die von MySQL zur Umwandlung von Hostnamen in IP-Adressen verwendet wird. Unter bestimmten Umständen verursacht der Prozess mysqld unvermittelt eine Prozessorauslastung von 100 Prozent und reagiert nicht mehr. Wenn dieses Problem auftritt, versuchen Sie MySQL mit der Option `--skip-name-resolve` zu starten.

Alternativ können Sie MySQL unter FreeBSD 4.x mit der LinuxThreads-Bibliothek verknüpfen, wodurch einige der Probleme vermieden werden, die die native Thread-Implementierung von FreeBSD hat. Einen sehr guten Vergleich von LinuxThreads und nativen Threads finden Sie in Jeremy Zawodnys Artikel FreeBSD or Linux for your MySQL Server? unter http://jeremy.zawodny.com/blog/archives/000697.html.

Es gibt ein bekanntes Problem bei der Verwendung von LinuxThreads unter FreeBSD:

- Die Verbindungszeiten (`wait_timeout`, `interactive_timeout` und `net_read_timeout`) werden nicht beachtet. Auffälliges Symptom ist, dass Permanentverbindungen für eine sehr lange Zeit hängen, ohne abgebaut zu werden, und dass eine Terminierung des Threads erst Erfolg hat, wenn der Thread einem neuen Befehl zugeordnet wird.

  Dies ist wahrscheinlich ein Signalverwaltungsproblem in der Thread-Bibliothek, wo das Signal eine anhängige Leseoperation nicht unterbricht. Das Problem wird voraussichtlich in FreeBSD 5.0 behoben.

Damit der MySQL-Erstellungsprozess funktioniert, ist GNU make (gmake) erforderlich. Wenn GNU make nicht vorhanden ist, müssen Sie es vor der Kompilierung von MySQL installieren.

Die empfohlene Vorgehensweise zur Kompilierung und Installation von MySQL unter FreeBSD mit gcc (2.95.2 und höher) ist die folgende:

    CC=gcc CFLAGS="-O2 -fno-strength-reduce" \
        CXX=gcc CXXFLAGS="-O2 -fno-rtti -fno-exceptions \
        -felide-constructors -fno-strength-reduce" \
        ./configure --prefix=/usr/local/mysql --enable-assembler
    gmake
    gmake install
    cd /usr/local/mysql
    bin/mysql_install_db --user=mysql
    bin/mysqld_safe &

Wenn Sie feststellen, dass configure MIT-pthreads verwendet, lesen Sie die Anmerkungen zu MIT-pthreads. Siehe auch Abschnitt 2.8.5, „Anmerkungen zu MIT-pthreads“.

Wenn make install die Fehlermeldung ausgibt, dass es `/usr/include/pthreads` nicht finden kann, dann hat configure nicht erkannt, dass Sie MIT-pthreads benötigen. Um dieses Problem zu beheben, entfernen Sie `config.cache` und führen configure dann erneut mit der Option `--with-mit-threads` aus.

Achten Sie darauf, dass Ihre Namensauflösung korrekt ist. Andernfalls werden Verzögerungen oder Fehler bei der Auflösung auftreten, wenn Sie die Verbindung mit mysqld herzustellen versuchen. Ferner müssen Sie sicherstellen, dass der Eintrag `localhost` in der Datei `/etc/hosts` korrekt ist. Am Anfang der Datei sollte eine Zeile ähnlich der folgenden stehen:

    127.0.0.1       localhost localhost.your.domain

FreeBSD hat bekanntermaßen einen sehr niedrigen Standardwert für Datei-Handles. Siehe auch Abschnitt A.2.17, „Datei nicht gefunden“. Starten Sie den Server unter Verwendung der Option `--open-files-limit` für mysqld_safe oder heben Sie den Wert für den Benutzer mysqld in `/etc/login.conf` an und erstellen Sie die Datei dann mit `cap_mkdb /etc/login.conf` neu. Achten Sie außerdem darauf, die passende Klasse für diesen Benutzer in der Passwortdatei zu konfigurieren, sofern Sie die Vorgabe nicht verwenden (benutzen Sie `chpass mysqld-user-name`). Siehe auch Abschnitt 5.4.1, „mysqld_safe — Startskript für den MySQL-Server“.

FreeBSD beschränkt die Größe eines Prozesses auch dann auf 512 Mbyte, wenn auf Ihrem System wesentlich mehr Arbeitsspeicher vorhanden ist. Insofern kann ein Fehler wie der folgende auftreten:

    Out of memory (Needed 16391 bytes)

Bei den aktuellen Versionen von FreeBSD (mindestens seit 4.x) können Sie den Grenzwert auch anheben, indem Sie die folgenden Einträge in der Datei `/boot/loader.conf` hinzufügen und den Computer neu starten (diese Einstellungen lassen sich nicht zur Laufzeit mit dem Befehl sysctl ändern):

    kern.maxdsiz="1073741824" # 1GB
    kern.dfldsiz="1073741824" # 1GB
    kern.maxssiz="134217728" # 128MB

Bei älteren FreeBSD-Versionen müssen Sie Ihren Kernel neu kompilieren, um die maximale Datensegmentgröße für einen Prozess zu ändern. In diesem Fall sollten Sie sich die Option `MAXDSIZ` in der Konfigurationsdatei `LINT` näher ansehen, um weitere Informationen zu erhalten.

Wenn es Probleme mit dem aktuellen Daten in MySQL gibt, sollte eine Einstellung der Variablen `TZ` Abhilfe leisten können. Siehe auch Anhang F, Umgebungsvariablen.

#### 2.12.4.2. Anmerkungen zu NetBSD

Zur Kompilierung unter NetBSD benötigen Sie GNU make. Andernfalls schlägt der Erstellungsprozess fehl, wenn make versucht, `lint` für C++-Dateien auszuführen.

#### 2.12.4.3. Anmerkungen zu OpenBSD

Unter OpenBSD 2.5 können Sie MySQL mit nativen Threads kompilieren. Hierzu verwenden Sie die folgenden Optionen:

    CFLAGS=-pthread CXXFLAGS=-pthread ./configure --with-mit-threads=no

#### 2.12.4.4. Anmerkungen zu BSD/OS

Wenn Sie die folgende Fehlermeldung bei der Kompilierung von MySQL erhalten, ist der Wert ulimit für den virtuellen Speicher auf Ihrem System zu niedrig:

    item_func.h: In method
    `Item_func_ge::Item_func_ge(const Item_func_ge &)':
    item_func.h:28: virtual memory exhausted
    make[2]: *** [item_func.o] Error 1

Verwenden Sie beispielsweise ulimit -v 80000 und führen Sie make erneut aus. Funktioniert dies nicht und Sie verwenden bash, dann probieren Sie stattdessen csh oder sh aus. Einige BSDI-Benutzer haben Probleme mit bash und ulimit gemeldet.

Wenn Sie gcc einsetzen, müssen Sie unter Umständen auch das Flag `--with-low-memory` verwenden, damit configure `sql_yacc.cc` kompilieren kann.

Wenn es Probleme mit den aktuellen Daten in MySQL gibt, sollte eine Einstellung der Variablen `TZ` Abhilfe leisten können. Siehe auch Anhang F, Umgebungsvariablen.

#### 2.12.4.5. Anmerkungen zu BSD/OS Version 3.x

Aktualisieren Sie auf BSD/OS 3.1. Sollte dies nicht möglich sein, dann installieren Sie BSDIpatch M300-038.

Verwenden Sie den folgenden Befehl zur Konfiguration von MySQL:

    env CXX=shlicc++ CC=shlicc2 \
    ./configure \
        --prefix=/usr/local/mysql \
        --localstatedir=/var/mysql \
        --without-perl \
        --with-unix-socket-path=/var/mysql/mysql.sock

Auch die folgende Variante funktioniert bekanntermaßen:

    env CC=gcc CXX=gcc CXXFLAGS=-O3 \
    ./configure \
        --prefix=/usr/local/mysql \
        --with-unix-socket-path=/var/mysql/mysql.sock

Sie können die Verzeichnispositionen auf Wunsch ändern oder die Voreinstellungen übernehmen (hierzu geben Sie einfach keine Positionen an).

Sollten Leistungsprobleme unter starker Belastung auftreten, dann probieren Sie die Option `--skip-thread-priority` für mysqld. Hierdurch werden alle Threads mit derselben Priorität ausgeführt. Unter BSDI 3.1 können Sie auf diese Weise die Performance verbessern – zumindest so lange, bis BSDI den Thread-Scheduler in Ordnung bringt.

Wird bei der Kompilierung die Fehlermeldung `virtual memory exhausted` angezeigt, dann sollten Sie ulimit -v 80000 ausprobieren und make erneut ausführen. Funktioniert dies nicht und Sie verwenden bash, dann probieren Sie stattdessen csh oder sh aus. Einige BSDI-Benutzer haben Probleme mit bash und ulimit gemeldet.

#### 2.12.4.6. Anmerkungen zu BSD/OS Version 4.x

BSDI 4.x weist einige Bugs in Bezug auf Threads auf. Wenn Sie MySQL hierunter verwenden wollen, sollten Sie alle Thread-spezifischen Patches installieren. Dis gilt zumindest für M400-023.

Auf einigen BSDI 4.x-Systemen treten Probleme mit gemeinsamen Bibliotheken auf. Sie erkennen dies daran, dass Sie keine Clientprogramme wie etwa mysqladmin ausführen können. In diesem Fall müssen Sie das System so umkonfigurieren, dass es keine gemeinsamen Bibliotheken verwendet; dies tun Sie mit der Option `--disable-shared` für configure.

Ferner haben Kunden Probleme unter BSDI 4.0.1 damit gehabt, dass die Binärdatei mysqld nach einer Weile keine Tabellen mehr öffnen konnte. Ursache hierfür ist ein bibliotheks- oder systembezogener Bug, aufgrund dessen mysqld das aktuelle Verzeichnis wechselt, ohne hierfür zuvor eine Bestätigung angefordert zu haben.

Sie beseitigen das Problem, indem Sie entweder MySQL auf Version 3.23.34 oder höher aktualisieren oder nach der Ausführung von configure die Zeile `#define HAVE_REALPATH` aus der Datei `config.h` entfernen, bevor Sie make starten.

Beachten Sie, dass dies bedeutet, dass Sie in diesem Fall unter BSDI keine symbolischen Verknüpfungen zwischen Datenbankverzeichnissen oder von einer Tabelle zu einer anderen Datenbank erstellen können. (Symbolische Verknüpfungen zu anderen Festplatten hingegen sind unproblematisch.)

### 2.12.5. Anmerkungen zu anderen Unixen

#### 2.12.5.1. Anmerkungen zu HP-UX Version 10.20

Wenn Sie MySQL unter HP-UX kompilieren, gibt es ein paar kleinere Probleme. Wir empfehlen die Verwendung von gcc anstelle des nativen Compilers von HP-UX, da gcc einen besseren Code erzeugt.

Verwenden Sie unter HP-UX am besten gcc 2.95. Verwenden Sie keine Hochoptimierungsflags (wie etwa `-O6`), da dies unter Umständen unter HP-UX nicht sicher ist.

Der folgende configure-Befehl sollte für gcc 2.95 funktionieren:

    CFLAGS="-I/opt/dce/include -fpic" \
    CXXFLAGS="-I/opt/dce/include -felide-constructors -fno-exceptions \
    -fno-rtti" \
    CXX=gcc \
    ./configure --with-pthread \
        --with-named-thread-libs='-ldce' \
        --prefix=/usr/local/mysql --disable-shared

Der folgende configure-Befehl sollte für gcc 3.1 funktionieren:

    CFLAGS="-DHPUX -I/opt/dce/include -O3 -fPIC" CXX=gcc \
    CXXFLAGS="-DHPUX -I/opt/dce/include -felide-constructors \
        -fno-exceptions -fno-rtti -O3 -fPIC" \
    ./configure --prefix=/usr/local/mysql \
        --with-extra-charsets=complex --enable-thread-safe-client \
        --enable-local-infile  --with-pthread \
        --with-named-thread-libs=-ldce --with-lib-ccflags=-fPIC
        --disable-shared

#### 2.12.5.2. Anmerkungen zu HP-UX Version 11.x

Aufgrund einiger kritischer Bugs in den HP-UX-Standardbibliotheken sollten Sie die folgenden Patches installieren, bevor Sie MySQL unter HP-UX 11.0 ausführen:

    PHKL_22840 Streams cumulative
    PHNE_22397 ARPA cumulative

Hierdurch können Sie das Problem beheben, `EWOULDBLOCK` aus `recv()` und `EBADF` aus `accept()` in Thread-basierten Anwendungen zu erhalten.

Wenn Sie gcc 2.95.1 auf einem nicht gepatchten HP-UX 11.x-System einsetzen, wird unter Umständen die folgende Fehlermeldung angezeigt:

    In file included from /usr/include/unistd.h:11,
                     from ../include/global.h:125,
                     from mysql_priv.h:15,
                     from item.cc:19:
    /usr/include/sys/unistd.h:184: declaration of C function ...
    /usr/include/sys/pthread.h:440: previous declaration ...
    In file included from item.h:306,
                     from mysql_priv.h:158,
                     from item.cc:19:

Das Problem besteht darin, dass HP-UX `pthreads_atfork()` nicht konsistent definiert. Es liegt ein Prototypkonflikt in `/usr/include/sys/unistd.h`:184 und `/usr/include/sys/pthread.h`:440 vor.

Eine Lösung besteht darin, `/usr/include/sys/unistd.h` nach `mysql/include` zu kopieren und `unistd.h` so zu editieren, dass es zur Definition in `pthread.h` passt. Suchen Sie nach der folgenden Zeile:

    extern int pthread_atfork(void (*prepare)(), void (*parent)(),
                                              void (*child)());

Ändern Sie sie wie folgt ab:

    extern int pthread_atfork(void (*prepare)(void), void (*parent)(void),
                                              void (*child)(void));

Wenn Sie die Änderung vorgenommen haben, sollte die folgende configure-Zeile funktionieren:

    CFLAGS="-fomit-frame-pointer -O3 -fpic" CXX=gcc \
    CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti -O3" \
    ./configure --prefix=/usr/local/mysql --disable-shared

Verwenden Sie den HP-UX-Compiler, dann können Sie den folgenden Befehl verwenden (dieser wurde mit cc B.11.11.04 getestet):

    CC=cc CXX=aCC CFLAGS=+DD64 CXXFLAGS=+DD64 ./configure \
        --with-extra-character-set=complex

Sie können alle Fehler des folgenden Typs ignorieren:

    aCC: warning 901: unknown option: `-3': use +help for online
    documentation

Wenn die folgende Fehlermeldung von configure ausgegeben wird, dann stellen Sie sicher, dass der Pfad zum K&R-Compiler nicht vor dem Pfad zum HP-UX-C- und C++-Compiler steht:

    checking for cc option to accept ANSI C... no
    configure: error: MySQL requires an ANSI C compiler (and a C++ compiler).
    Try gcc. See the Installation chapter in the Reference Manual.

Ein anderer Grund dafür, dass eine Kompilierung nicht möglich ist, besteht darin, dass Sie die `+DD64`-Flags nicht wie eben beschrieben definiert haben.

Eine andere Möglichkeit für HP-UX 11 besteht darin, die unter http://dev.mysql.com/downloads/ verfügbaren MySQL-Binärdateien zu verwenden, die wir selbst erstellt und getestet haben. Ferner wurde uns mitgeteilt, dass die von MySQL angebotenen Binärdateien für HP-UX 10.20 auch unter HP-UX 11 erfolgreich ausgeführt werden können. Wenn Sie hierbei auf Probleme treffen, sollten Sie überprüfen, ob HP-UX-Patches verfügbar sind.

#### 2.12.5.3. Anmerkungen zu IBM-AIX

Die automatische Erkennung von `xlC` fehlt bei Autoconf. Aus diesem Grund muss eine Reihe von Variablen eingestellt werden, bevor configure ausgeführt wird. Das folgende Beispiel verwendet den IBM-Compiler:

    export CC="xlc_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192 "
    export CXX="xlC_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192"
    export CFLAGS="-I /usr/local/include"
    export LDFLAGS="-L /usr/local/lib"
    export CPPFLAGS=$CFLAGS
    export CXXFLAGS=$CFLAGS

    ./configure --prefix=/usr/local \
                    --localstatedir=/var/mysql \
                    --sbindir='/usr/local/bin' \
                    --libexecdir='/usr/local/bin' \
                    --enable-thread-safe-client \
                    --enable-large-files

Obige Optionen werden zur Kompilierung der MySQL-Distribution verwendet, die unter http://www-frec.bull.com/ verfügbar ist.

Wenn Sie in obiger configure-Zeile die Option `-O3` auf `-O2` setzen, müssen Sie auch die Option `-qstrict` entfernen. Dies ist eine Einschränkung des C-Compilers von IBM.

Wenn Sie gcc oder egcs zur Kompilierung von MySQL verwenden, müssen Sie das Flag `-fno-exceptions` benutzen, weil die Fehlerbehandlung in gcc/egcs nicht Thread-sicher ist! (Dies wurde mit egcs 1.1 getestet.) Es gibt ferner einige bekannte Probleme mit dem IBM-Assembler, die in Verbindung mit gcc zu fehlerhaftem Code führen können.

Wir empfehlen die folgende configure-Zeile bei egcs und gcc 2.95 unter AIX:

    CC="gcc -pipe -mcpu=power -Wa,-many" \
    CXX="gcc -pipe -mcpu=power -Wa,-many" \
    CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti" \
    ./configure --prefix=/usr/local/mysql --with-low-memory

Die Option `-Wa,-many` ist erforderlich, damit die Kompilierung erfolgreich verläuft. Bei IBM ist dieses Problem bekannt, man sieht sich aber mit der Behebung nicht unter Zeitdruck, da ein Workaround verfügbar ist. Wir wissen nicht, ob `-fno-exceptions` bei gcc 2.95 erforderlich ist, aber weil MySQL keine Ausnahmen verwendet und die Option einen schnelleren Code erzeugt, empfehlen wir ihre generelle Verwendung bei egcs und gcc.

Wenn ein Problem mit dem Assemblercode auftritt, versuchen Sie die Option `-mcpu=`xxx`` so zu ändern, dass sie zu Ihrer CPU passt. Normalerweise müssen `power2`, `power` oder `powerpc` verwendet werden. Möglicherweise müssen Sie aber auch `604` oder `604e` einsetzen. Wir wissen es nicht genau, nehmen aber an, dass `power` mit hoher Wahrscheinlichkeit in den meisten Fällen sicher ist (und zwar auch auf power2-Systemen).

Wenn Sie nicht wissen, welchen Prozessor Sie haben, führen Sie den Befehl `uname -m` aus. Er erzeugt einen String, der etwa so aussieht: `000514676700`. Das Format ist `xxyyyyyymmss`, wobei `xx` und `ss` immer `00`, `yyyyyy` eine eindeutige Systemkennung und `mm` die Kennung des CPU-Planars sind. Eine Übersicht über diese Werte finden Sie unter http://www16.boulder.ibm.com/pseries/en_US/cmds/aixcmds5/uname.htm.

Dort erhalten Sie Angaben zu Rechnertyp und -modell, auf deren Basis Sie die CPU in Ihrem Rechner ermitteln können.

Wenn Sie Probleme mit Signalen haben (weil sich MySQL unter hoher Belastung unerwartet aufhängt), haben Sie unter Umständen einen Betriebssystembug bei den Threads oder Signalen gefunden. In diesem Fall können Sie MySQL wie folgt anweisen, Signale nicht zu verwenden:

    CFLAGS=-DDONT_USE_THR_ALARM CXX=gcc \
    CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti \
    -DDONT_USE_THR_ALARM" \
    ./configure --prefix=/usr/local/mysql --with-debug \
        --with-low-memory

Hierdurch wird die Leistungsfähigkeit von MySQL nicht beeinträchtigt; ein Nebeneffekt besteht aber darin, dass Sie Clients, die an einer Verbindung „schlafen“, mit mysqladmin kill oder mysqladmin shutdown nicht terminieren können. Stattdessen hängt sich der Client auf, wenn er den nächsten Befehl absetzt.

Bei einigen Versionen von AIX führt eine Verknüpfung mit `libbind.a` bei `getservbyname()` zu einem Speicherauszug. Dies ist ein AIX-Bug, der IBM gemeldet werden sollte.

Bei AIX 4.2.1 und gcc müssen Sie die folgenden Änderungen vornehmen.

Bearbeiten Sie nach der Konfiguration `config.h` und `include/my_config.h`. Die Zeile

    #define HAVE_SNPRINTF 1

ändern Sie wie folgt:

    #undef HAVE_SNPRINTF

Schließlich müssen Sie in `mysqld.cc` noch einen Prototyp für `initgroups()` hinzufügen.

    #ifdef _AIX41
    extern "C" int initgroups(const char *,int);
    #endif

Wenn Sie dem Prozess mysqld viel Speicher zuweisen müssen, reicht es nicht aus, einfach ulimit -d unlimited zu verwenden. Sie müssen vielmehr auch mysqld_safe mit einer Zeile wie der folgenden ergänzen:

    export LDR_CNTRL='MAXDATA=0x80000000'

Weitere Informationen zur Verwendung einer großen Menge Speicher finden Sie unter http://publib16.boulder.ibm.com/pseries/en_US/aixprggd/genprogc/lrg_prg_support.htm.

Benutzer von AIX 4.3 sollten gmake statt des in AIX enthaltenen make-Hilfsprogramms verwenden.

#### 2.12.5.4. Anmerkungen zu SunOS 4

Unter SunOS 4 ist MIT-pthreads zur Kompilierung von MySQL erforderlich. Das wiederum bedeutet, dass Sie GNU make benötigen.

Einige SunOS 4-Systeme haben Probleme mit dynamischen Bibliotheken und libtool. Dieses Problem können Sie mit der folgenden configure-Zeile beheben:

    ./configure --disable-shared --with-mysqld-ldflags=-all-static

Wenn Sie `readline` kompilieren, erhalten Sie unter Umständen Warnungen zu Doppeldefinitionen. Diese können Sie getrost ignorieren.

Wenn Sie mysqld kompilieren, erscheinen einige Warnungen des Typs `implicit declaration of function`. Diese können Sie getrost ignorieren.

#### 2.12.5.5. Anmerkungen zu Alpha-DEC-UNIX (Tru64)

Wenn Sie egcs 1.1.2 unter Digital Unix verwenden, sollten Sie auf gcc 2.95.2 aktualisieren, weil egcs unter DEC einige schwerwiegende Bugs aufweist!

Wenn Sie Thread-basierte Programme unter Digital Unix kompilieren, empfiehlt die Dokumentation die Verwendung der Option `-pthread` für cc und cxx und die `-lmach -lexc`-Bibliotheken (zusätzlich zu `-lpthread`). Sie sollten configure etwa wie folgt ausführen:

    CC="cc -pthread" CXX="cxx -pthread -O" \
    ./configure --with-named-thread-libs="-lpthread -lmach -lexc -lc"

Wenn Sie mysqld kompilieren, werden unter Umständen einige Warnungen wie die folgenden angezeigt:

    mysqld.cc: In function void handle_connections()':
    mysqld.cc:626: passing long unsigned int *' as argument 3 of
    accept(int,sockadddr *, int *)'

Diese können Sie getrost ignorieren. Sie erscheinen, weil configure nur Fehler, nicht jedoch Warnungen erkennen kann.

Wenn Sie den Server direkt über die Befehlszeile starten, kann es bei der Abmeldung zu Abstürzen kommen. (Wenn Sie sich abmelden, erhalten Ihre ausstehenden Prozesse ein `SIGHUP`-Signal.) Versuchen Sie, den Server wie folgt zu starten:

    nohup mysqld [options] &

`nohup` sorgt dafür, dass der Befehl, der darauf folgt, alle ggf. vom Terminal gesendeten `SIGHUP`-Signale ignoriert. Alternativ starten Sie den Server durch Ausführung von mysqld_safe. Hierdurch wird mysqld unter Verwendung von nohup für Sie aufgerufen. Siehe auch Abschnitt 5.4.1, „mysqld_safe — Startskript für den MySQL-Server“.

Wenn ein Problem bei der Kompilierung von `mysys/get_opt.c` auftritt, entfernen Sie einfach die Zeile `#define _NO_PROTO` am Anfang dieser Datei.

Wenn Sie den CC-Compiler von Compaq einsetzen, sollte die folgende configure-Zeile problemlos funktionieren:

    CC="cc -pthread"
    CFLAGS="-O4 -ansi_alias -ansi_args -fast -inline speed all -arch host"
    CXX="cxx -pthread"
    CXXFLAGS="-O4 -ansi_alias -ansi_args -fast -inline speed all \
        -arch host -noexceptions -nortti"
    export CC CFLAGS CXX CXXFLAGS
    ./configure \
        --prefix=/usr/local/mysql \
        --with-low-memory \
        --enable-large-files \
        --enable-shared=yes \
        --with-named-thread-libs="-lpthread -lmach -lexc -lc"
    gnumake

Tritt ein Problem mit libtool auf, wenn Sie wie gerade gezeigt mit gemeinsamen Bibliotheken kompilieren und mysql verknüpfen, sollten Sie dieses durch Absetzen der folgenden Befehle umgehen können:

    cd mysql
    /bin/sh ../libtool --mode=link cxx -pthread  -O3 -DDBUG_OFF \
        -O4 -ansi_alias -ansi_args -fast -inline speed \
        -speculate all \ -arch host  -DUNDEF_HAVE_GETHOSTBYNAME_R \
        -o mysql  mysql.o readline.o sql_string.o completion_hash.o \
        ../readline/libreadline.a -lcurses \
        ../libmysql/.libs/libmysqlclient.so  -lm
    cd ..
    gnumake
    gnumake install
    scripts/mysql_install_db

#### 2.12.5.6. Anmerkungen zu Alpha-DEC-OSF1

Wenn Sie Probleme beim Kompilieren haben und DEC CC und gcc installiert sind, probieren Sie einmal, configure wie folgt auszuführen:

    CC=cc CFLAGS=-O CXX=gcc CXXFLAGS=-O3 \
    ./configure --prefix=/usr/local/mysql

Treten Probleme in Verbindung mit der Datei `c_asm.h` auf, dann können Sie wie folgt eine Dummyversion von `c_asm.h` erstellen:

    touch include/c_asm.h
    CC=gcc CFLAGS=-I./include \
    CXX=gcc CXXFLAGS=-O3 \
    ./configure --prefix=/usr/local/mysql

Beachten Sie, dass die folgenden Probleme beim Programm ld sich durch den Download des aktuellen DEC-(Compaq-)Patch-Kits beheben lassen. Dieses finden Sie unter http://ftp.support.compaq.com/public/unix/.

Unter OSF/1 V4.0D tritt bei Verwendung des Compilers "DEC C V5.6-071 on Digital Unix V4.0 (Rev. 878)" ein seltsames Verhalten auf (undefinierte `asm`-Symbole). `/bin/ld` scheint ebenfalls beschädigt zu sein (Probleme mit `_exit undefined`-Fehlern, die beim Verknüpfen von mysqld auftreten). Es ist uns gelungen, MySQL auf diesem System mit der folgenden configure-Zeile zu kompilieren, nachdem wir `/bin/ld` durch die Version aus OSF 4.0C ersetzt haben:

    CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql

Beim Digital-Compiler "C++ V6.1-029" sollte Folgendes funktionieren:

    CC=cc -pthread
    CFLAGS=-O4 -ansi_alias -ansi_args -fast -inline speed \
           -speculate all -arch host
    CXX=cxx -pthread
    CXXFLAGS=-O4 -ansi_alias -ansi_args -fast -inline speed \
             -speculate all -arch host -noexceptions -nortti
    export CC CFLAGS CXX CXXFLAGS
    ./configure --prefix=/usr/mysql/mysql \
                --with-mysqld-ldflags=-all-static --disable-shared \
                --with-named-thread-libs="-lmach -lexc -lc"

Bei einigen Versionen von OSF/1 ist die Funktion `alloca()` beschädigt. Dieses Problem können Sie beheben, indem Sie die Zeile in `config.h` entfernen, die `'HAVE_ALLOCA'` definiert.

Die Funktion `alloca()` weist unter Umständen auch einen falschen Prototyp in `/usr/include/alloca.h` auf. Sich hierauf beziehende Warnmeldungen können Sie ignorieren.

configure verwendet die folgenden Thread-Bibliotheken automatisch: `--with-named-thread-libs="-lpthread -lmach -lexc -lc"`.

Wenn Sie gcc verwenden, können Sie auch versuchen, configure wie folgt auszuführen:

    CFLAGS=-D_PTHREAD_USE_D4 CXX=gcc CXXFLAGS=-O3 ./configure ...

Wenn Sie Probleme mit Signalen haben (weil sich MySQL unter hoher Belastung unerwartet aufhängt), haben Sie unter Umständen einen Betriebssystembug bei den Threads oder Signalen gefunden. In diesem Fall können Sie MySQL wie folgt anweisen, Signale nicht zu verwenden:

    CFLAGS=-DDONT_USE_THR_ALARM \
    CXXFLAGS=-DDONT_USE_THR_ALARM \
    ./configure ...

Hierdurch wird die Leistungsfähigkeit von MySQL nicht beeinträchtigt; ein Nebeneffekt besteht aber darin, dass Sie Clients, die an einer Verbindung „schlafen“, mit mysqladmin kill oder mysqladmin shutdown nicht terminieren können. Stattdessen hängt sich der Client auf, wenn er den nächsten Befehl absetzt.

Bei gcc 2.95.2 erhalten Sie möglicherweise den folgenden Kompilierungsfehler:

    sql_acl.cc:1456: Internal compiler error in `scan_region',
    at except.c:2566
    Please submit a full bug report.

Um dies zu beheben, sollten Sie in das Verzeichnis `sql` wechseln und dort die letzte gcc-Zeile ausschneiden und einfügen, die Option `-O3` dabei jedoch zu `-O0` ändern (oder `-O0` direkt nach gcc hinzufügen, wenn Ihre compile-Zeile gar keine `-O`-Option enthält). Danach können Sie wieder zum obersten Verzeichnis wechseln und make erneut ausführen.

#### 2.12.5.7. Anmerkungen zu SGI Irix

Wenn Sie Irix 6.5.3 oder höher verwenden, kann mysqld Threads nur dann erstellen, wenn Sie es als Benutzer mit `CAP_SCHED_MGT`-Berechtigungen (z. B. als `root`) ausführen oder dem Server mysqld diese Berechtigung mit dem folgenden Shell-Befehl zuweisen:

    chcap "CAP_SCHED_MGT+epi" /opt/mysql/libexec/mysqld

Unter Umständen müssen Sie die Definitionen einiger Symbole in `config.h` nach der Ausführung von configure, aber vor der Kompilierung aufheben.

Bei einigen Irix-Implementierungen ist die Funktion `alloca()` beschädigt. Wenn der mysqld-Server sich bei einigen `SELECT`-Anweisungen aufhängt, entfernen Sie die Zeilen aus `config.h`, die `HAVE_ALLOC` und `HAVE_ALLOCA_H` definieren. Funktioniert mysqladmin create nicht, dann entfernen Sie die Zeile aus `config.h`, die `HAVE_READDIR_R` definiert. Möglicherweise müssen Sie auch die Zeile `HAVE_TERM_H` entfernen.

SGI empfiehlt, alle Patches auf der folgenden Seite auf einmal zu installieren: http://support.sgi.com/surfzone/patches/patchset/6.2_indigo.rps.html.

Sie sollten zumindest das jeweils letzte Kernel-, `rld`- und `libc`-Rollup installieren.

Für die pthreads-Unterstützung benötigen Sie in jedem Fall alle POSIX-Patches auf der folgenden Seite:

http://support.sgi.com/surfzone/patches/patchset/6.2_posix.rps.html

Möglicherweise erhalten Sie bei der Kompilierung von `mysql.cc` eine Fehlermeldung ähnlich der folgenden:

    "/usr/include/curses.h", line 82: error(1084):
    invalid combination of type

Geben Sie in diesem Fall Folgendes im obersten Verzeichnis Ihres MySQL-Source-Trees ein:

    extra/replace bool curses_bool < /usr/include/curses.h > include/curses.h
    make

Gemeldet wurden ferner Zeitplanungsprobleme. Wird nur ein Thread ausgeführt, dann ist die Performance schwach. Dies können Sie vermeiden, indem Sie einen anderen Client starten. Dies hat unter Umständen eine zwei- bis zehnfache Steigerung der Ausführungsgeschwindigkeit für den anderen Thread zur Folge. Dieses Problem mit Irix-Threads ist schlecht nachvollziehbar: Bis es behoben ist, müssen Sie wohl improvisieren, um geeignete Lösungen zu finden.

Wenn Sie mit gcc kompilieren, können Sie den folgenden configure-Befehl verwenden:

    CC=gcc CXX=gcc CXXFLAGS=-O3 \
    ./configure --prefix=/usr/local/mysql --enable-thread-safe-client \
        --with-named-thread-libs=-lpthread

Unter Irix 6.5.11 mit nativen Irix-C- und -C++-Compilern der Version 7.3.1.2 funktioniert Angaben zufolge auch Folgendes:

    CC=cc CXX=CC CFLAGS='-O3 -n32 -TARG:platform=IP22 -I/usr/local/include \
    -L/usr/local/lib' CXXFLAGS='-O3 -n32 -TARG:platform=IP22 \
    -I/usr/local/include -L/usr/local/lib' \
    ./configure --prefix=/usr/local/mysql --with-innodb --with-berkeley-db \
        --with-libwrap=/usr/local \
        --with-named-curses-libs=/usr/local/lib/libncurses.a

#### 2.12.5.8. Anmerkungen zu SCO UNIX und OpenServer 5.0.x

Die aktuelle Portierung wird nur auf Systemen unter sco3.2v5.0.5, sco3.2v5.0.6 und sco3.2v5.0.7 getestet. Die Portierung auf sco3.2v4.2 ist ebenfalls weit fortgeschritten. Open Server 5.0.8 (Legend) bietet native Threads und unterstützt Dateien, die größer sind als 2 Gbyte. Das aktuelle Limit bei der Dateigröße liegt bei 2 Gbyte.

Wir konnten MySQL mit dem folgenden configure-Befehl unter OpenServer mit gcc 2.95.3 kompilieren.

    CC=gcc CXX=gcc ./configure --prefix=/usr/local/mysql \
        --enable-thread-safe-client --with-innodb \
        --with-openssl --with-vio --with-extra-charsets=complex

gcc erhalten Sie unter ftp://ftp.sco.com/pub/openserver5/opensrc/gnutools-5.0.7Kj.

Dieses Entwicklungssystem erfordert das OpenServer Execution Environment Supplement oss646B unter OpenServer 5.0.6 und oss656B und die in gwxlibs enthaltenen OpenSource-Bibliotheken. Alle OpenSource-Tools befinden sich im Verzeichnis `opensrc`. Sie finden sie unter ftp://ftp.sco.com/pub/openserver5/opensrc/.

Wir empfehlen die Verwendung des aktuellen Produktions-Releases von MySQL.

SCO stellt Betriebssystem-Patches unter ftp://ftp.sco.com/pub/openserver5 für OpenServer 5.0.[0-6] und unter ftp://ftp.sco.com/pub/openserverv5/507 für OpenServer 5.0.7 bereit.

Informationen zu behobenen Sicherheitslücken bietet SCO unter ftp://ftp.sco.com/pub/security/OpenServer für OpenServer 5.0.x an.

Die maximale Dateigröße auf einem OpenServer 5.0.x-System beträgt 2 Gbyte.

Die Gesamtmenge an Speicher, der für Stream-Puffer, CLISTs und Sperrdatensätze zugewiesen wird, darf unter OpenServer 5.0.x einen Wert von 60 Mbyte nicht überschreiten.

Stream-Puffer werden in Einheiten von 4096 Byte großen Seiten zugewiesen, CLISTs haben jeweils 70 Byte, und Sperrdatensätze sind je 64 Byte groß. Hieraus ergibt sich:

    (NSTRPAGES * 4096) + (NCLIST * 70) + (MAX_FLCKREC * 64) <= 62914560

Gehen Sie wie folgt vor, um die Option `Database Services` zu konfigurieren. Wenn Sie nicht genau wissen, ob eine Anwendung dies erfordert, schlagen Sie in der Dokumentation dieser Anwendung nach.

1. Melden Sie sich als `root` an.

2. Aktivieren Sie den SUDS-Treiber, indem Sie die Datei `/etc/conf/sdevice.d/suds` bearbeiten. Ändern Sie das `N` im zweiten Feld zu `Y`.

3. Aktivieren Sie mithilfe von `mkdev aio` oder des Hardware/Kernel-Managers die Unterstützung für asynchrone Eingabe/Ausgabe und verknüpfen Sie den Kernel neu. Damit Benutzer Speicher für die Verwendung mit diesem E/A-Typ verriegeln können, aktualisieren Sie die Datei `aiomemlock(F)`. Diese Datei sollte mit den Namen der Benutzer, die AIO verwenden dürfen, und der maximalen Speichermenge aktualisiert werden, die diese Benutzer sperren dürfen.

4. Viele Anwendungen verwenden setuid-Binärdateien, d. h., Sie müssen nur einen Benutzer angeben. Konsultieren Sie die Dokumentation zur fraglichen Anwendung, um zu ermitteln, ob dies bei dieser Anwendung der Fall ist.

Nachdem Sie den Vorgang abgeschlossen haben, starten Sie das System neu, um einen neuen Kernel zu erstellen, der diese Änderungen beinhaltet.

Standardmäßig haben die Einträge in `/etc/conf/cf.d/mtune` folgende Einstellungen:

    Value           Default         Min             Max
    -----           -------         ---             ---
    NBUF            0               24              450000
    NHBUF           0               32              524288
    NMPBUF          0               12              512
    MAX_INODE       0               100             64000
    MAX_FILE        0               100             64000
    CTBUFSIZE       128             0               256
    MAX_PROC        0               50              16000
    MAX_REGION      0               500             160000
    NCLIST          170             120             16640
    MAXUP           100             15              16000
    NOFILES         110             60              11000
    NHINODE         128             64              8192
    NAUTOUP         10              0               60
    NGROUPS         8               0               128
    BDFLUSHR        30              1               300
    MAX_FLCKREC     0               50              16000
    PUTBUFSZ        8000            2000            20000
    MAXSLICE        100             25              100
    ULIMIT          4194303         2048            4194303
    * Streams Parameters
    NSTREAM         64              1               32768
    NSTRPUSH        9               9               9
    NMUXLINK        192             1               4096
    STRMSGSZ        16384           4096            524288
    STRCTLSZ        1024            1024            1024
    STRMAXBLK       524288          4096            524288
    NSTRPAGES       500             0               8000
    STRSPLITFRAC    80              50              100
    NLOG            3               3               3
    NUMSP           64              1               256
    NUMTIM          16              1               8192
    NUMTRW          16              1               8192
    * Semaphore Parameters
    SEMMAP          10              10              8192
    SEMMNI          10              10              8192
    SEMMNS          60              60              8192
    SEMMNU          30              10              8192
    SEMMSL          25              25              150
    SEMOPM          10              10              1024
    SEMUME          10              10              25
    SEMVMX          32767           32767           32767
    SEMAEM          16384           16384           16384
    * Shared Memory Parameters
    SHMMAX          524288          131072          2147483647
    SHMMIN          1               1               1
    SHMMNI          100             100             2000
    FILE            0               100             64000
    NMOUNT          0               4               256
    NPROC           0               50              16000
    NREGION         0               500             160000

Wir empfehlen die Einstellung folgender Werte:

`NOFILES` sollte 4096 oder 2048 sein.

`MAXUP` sollte 2048 sein.

Um Änderungen am Kernel vorzunehmen, wechseln Sie in das Verzeichnis `/etc/conf/bin` und nehmen die erforderlichen Änderungen mit ./idtune `name parameter` vor. Um beispielsweise `SEMMS` auf `200` zu setzen, führen Sie folgende Befehle als `root` aus:

    # cd /etc/conf/bin
    # ./idtune SEMMNS 200

Wir empfehlen eine Optimierung des Systems. Welche Parameterwerte allerdings hierzu geeignet sind, hängt von der Anzahl der Benutzer, die auf die Anwendung oder Datenbank zugreifen, und von der Größe der Datenbank selbst (d. h. dem verwendeten Pufferpool) ab. Das Folgende betrifft die Kernel-Parameter, die in `/etc/conf/cf.d/stune` definiert sind:

`SHMMAX` (Einstellempfehlung: 128 Mbyte) und `SHMSEG` (Einstellempfehlung: 15). Diese Parameter beeinflussen die MySQL-Datenbank-Engine bei der Erstellung der Benutzerpufferpools.

`NOFILES` und `MAXUP` sollten auf mindestens 2048 gesetzt werden.

`MAXPROC` sollte (abhängig von der Anzahl der Benutzer) auf mindestens 3000/4000 gesetzt werden.

Ferner wird die Verwendung der folgenden Formel zur Berechnung der Werte für `SEMMSL`, `SEMMNS` und `SEMMNU` empfohlen:

    SEMMSL = 13

13 hat sich als optimaler Wert sowohl für Progress als auch für MySQL erwiesen.

`SEMMNS` = `SEMMSL` × Anzahl der auf dem System ausgeführten Server

Setzen Sie `SEMMNS` auf den Wert von `SEMMSL` multipliziert mit der maximalen Anzahl der Datenbankserver, die gleichzeitig auf Ihrem System ausgeführt werden.

    SEMMNU = SEMMNS

`SEMMNU` setzen Sie dann auf den gleichen Wert wie `SEMMNS`. Wahrscheinlich würde hier auch ein Wert von 75 Prozent von `SEMMNS` ausreichen, aber dies ist eine konservative Schätzung.

Sie müssen zumindest die "SCO OpenServer Linker and Application Development Libraries" oder das OpenServer Development System installieren, um gcc verwenden zu können. Das GCC Dev-System können Sie nicht nutzen, ohne mindestens eine dieser Komponenten zu installieren.

Zunächst sollten Sie sich jedoch das FSU-Pthreads-Paket beschaffen und es installieren. Sie finden es unter http://moss.csc.ncsu.edu/~mueller/ftp/pub/PART/pthreads.tar.gz. Eine vorkompilierte Fassung finden Sie unter ftp://ftp.zenez.com/pub/zenez/prgms/FSU-threads-3.14.tar.gz.

FSU-Pthreads kann mit SCO Unix 4.2 mit tcpip oder aber mithilfe von OpenServer 3.0 oder Open Desktop 3.0 (OS 3.0 ODT 3.0) mit installiertem SCO Development System kompiliert werden, wobei eine gute Portierung von GCC 2.5.x zum Einsatz kommen sollte. Für ODT oder OS 3.0 benötigen Sie eine gute Portierung von GCC 2.5.x. Ohne eine solche gute Portierung können eine Menge Probleme entstehen. Die Portierung für dieses Produkt erfordert das SCO Unix Development-System. Ohne dieses fehlen Ihnen die Bibliotheken und der erforderliche Linker. Ferner benötigen Sie `SCO-3.2v4.2-includes.tar.gz`. Diese Datei enthält die Änderungen an den Include-Dateien des SCO Development Systems, die für die Erstellung von MySQL benötigt werden. Sie müssen die vorhandenen System-Include-Dateien durch diese modifizierten Header-Dateien ersetzen. Sie erhalten sie unter ftp://ftp.zenez.com/pub/zenez/prgms/SCO-3.2v4.2-includes.tar.gz.

Um FSU-Pthreads auf Ihrem System zu erstellen, sollten Sie nichts weiteres tun müssen, als GNU make auszuführen. Das `Makefile` in FSU-threads-3.14.tar.gz ist so konfiguriert, dass es FSU-threads erstellt.

Sie können ./configure im Verzeichnis `threads/src` ausführen und die Option SCO OpenServer auswählen. Dieser Befehl kopiert `Makefile.SCO5` nach `Makefile`. Danach führen Sie make aus.

Zur Installation in das Standardverzeichnis `/usr/include` melden Sie sich als `root` und wechseln dann in das Verzeichnis `thread/src`. Dort führen Sie make install aus.

Denken Sie daran, GNU make zur Erstellung von MySQL zu verwenden.

Hinweis: Wenn Sie mysqld_safe nicht als `root` starten, erhalten Sie nur die standardmäßig vorgesehenen 110 offenen Dateien pro Prozess. mysqld schreibt eine entsprechende Anmerkung in die Logdatei.

Bei SCO 3.2V4.2 sollten Sie FSU-Pthreads Version 3.14 oder höher verwenden. Der folgende configure-Befehl sollte funktionieren:

    CFLAGS="-D_XOPEN_XPG4" CXX=gcc CXXFLAGS="-D_XOPEN_XPG4" \
    ./configure \
        --prefix=/usr/local/mysql \
        --with-named-thread-libs="-lgthreads -lsocket -lgen -lgthreads" \
        --with-named-curses-libs="-lcurses"

Unter Umständen treten Probleme mit einigen Include-Dateien auf. In diesem Fall finden Sie neue SCO-spezifische Include-Dateien unter ftp://ftp.zenez.com/pub/zenez/prgms/SCO-3.2v4.2-includes.tar.gz.

Sie sollten diese Datei in das Verzeichnis `include` Ihres MySQL-Source-Trees entpacken.

Anmerkungen zur SCO-Entwicklung:

- MySQL sollte FSU-Pthreads automatisch erkennen und mysqld mit `-lgthreads -lsocket -lgthreads` verknüpfen.

- Die SCO-Entwicklungsbibliotheken sind in FSU-Pthreads mehrfach aufrufbar. SCO behauptet, dass seine Bibliothek mehrfach aufrufbar ist, mithin muss sie also auch bei FSU-Pthreads mehrfach aufrufbar sein. FSU-Pthreads unter OpenServer versucht, mithilfe des SCO-Schemas mehrfach aufrufbare Bibliotheken zu erstellen.

- FSU-Pthreads wird mit GNU `malloc` verknüpft ausgeliefert (zumindest gilt dies für die Version unter ftp::/ftp.zenez.com). Wenn Probleme mit der Speichernutzung auftreten, vergewissern Sie sich, dass `gmalloc.o` in `libgthreads.a` und `libgthreads.so` enthalten ist.

- In FSU-Pthreads erkennen die folgenden Systemaufrufe das Vorhandensein von pthreads: `read()`, `write()`, `getmsg()`, `connect()`, `accept(),` `select()` und `wait()`.

- Der Patch CSSA-2001-SCO.35.2, der üblicherweise als Sicherheits-Patch erg711905-dscr_remap (version 2.0.0) gelistet ist, beschädigt FSU-Threads und macht mysqld instabil. Wenn Sie mysqld auf einem System unter OpenServer 5.0.6 verwenden wollen, müssen Sie diesen Patch entfernen.

- Setzen Sie SCO OpenServer 5 ein, dann müssen Sie unter Umständen FSU-Pthreads mit `-DDRAFT7` in `CFLAGS` neu kompilieren. Andernfalls hängt sich `InnoDB` beim Start von mysqld auf.

- SCO bietet Betriebssystem-Patches unter ftp://ftp.sco.com/pub/openserver5 für OpenServer 5.0.x.

- Fehlerbehebungen für Sicherheitslücken und `libsocket.so.2` bietet SCO unter ftp://ftp.sco.com/pub/security/OpenServer und ftp://ftp.sco.com/pub/security/sse für OpenServer 5.0.x an.

- Sicherheitsrelevante Fehlerbehebungen für OpenServer vor OSR506 und den Bugfix für `telnetd` finden Sie unter ftp://stage.caldera.com/pub/security/openserver/ oder ftp://stage.caldera.com/pub/security/openserver/CSSA-2001-SCO.10/ als `libsocket.so.2` und `libresolv.so.1` mit Anweisungen zur Installation auf Systemen vor OSR506.

  Es empfiehlt sich wohl, diese Patches vor der Kompilierung und Verwendung von MySQL zu installieren.

Ab Legend/OpenServer 6.0.0 gibt es native Threads, und die Beschränkung der Dateigröße auf 2 Gbyte entfällt.

#### 2.12.5.9. Anmerkungen zu SCO OpenServer 6.0.x

OpenServer 6 enthält die folgenden wesentlichen Verbesserungen:

- Unterstützung für Dateien bis zu 1 Tbyte

- Multiprozessorunterstützung für bis zu 32 Prozessoren

- verbesserte Speicherunterstützung für bis zu 64 Gbyte

- Leistungserweiterung von UnixWare auf OpenServer 6

- drastische Leistungssteigerungen

OpenServer 6.0.0-Befehle sind wie folgt organisiert:

- `/bin` ist für Befehle vorgesehen, die sich exakt so verhalten wie unter OpenServer 5.0.x.

- `/u95/bin` ist für Befehle vorgesehen, die eine erhöhte Standardkonformität aufweisen. Hierzu gehört z. B. die LFS-Unterstützung (Large File System).

- `/udk/bin` ist für Befehle vorgesehen, die sich exakt so verhalten wie unter UnixWare 7.1.4. Standardmäßig wird LFS unterstützt.

Nachfolgend erhalten Sie eine Anleitung zur Einstellung von PATH unter OpenServer 6. Wenn der Benutzer das traditionelle Verhalten von OpenServer 5.0.x wünscht, sollte `PATH` zunächst `/bin` sein. Wünscht der Benutzer LFS-Unterstützung, dann sollte der Pfad `/u95/bin:/bin` sein. Benötigt der Benutzer zunächst UnixWare 7-Unterstützung, dann wäre der korrekte Pfad `/udk/bin:/u95/bin:/bin:`.

Wir empfehlen die Verwendung des aktuellen Produktions-Releases von MySQL.

Wir konnten MySQL mit dem folgenden configure-Befehl unter OpenServer 6.0.x kompilieren.

    CC="cc" CFLAGS="-I/usr/local/include" \
    CXX="CC" CXXFLAGS="-I/usr/local/include" \
    ./configure --prefix=/usr/local/mysql \
        --enable-thread-safe-client --with-berkeley-db=./bdb \
        --with-innodb --with-openssl --with-extra-charsets=complex \
        --enable-readline

Wenn Sie gcc verwenden wollen, müssen Sie gcc 2.95.3 oder höher einsetzen.

    CC=gcc CXX=g++ ./configure --prefix=/usr/local/mysql

Die Version von Berkeley DB, die Bestandteil von UnixWare 7.1.4 wie auch von OpenServer 6.0.0 ist, wird bei der Erstellung von MySQL nicht eingesetzt. Stattdessen verwendet MySQL seine eigene Version von Berkeley DB. Der Befehl configure muss sowohl eine statische als auch eine dynamische Bibliothek in ``src_directory`/bdb/build_unix/` erstellen, aber dies nicht mit MySQLs eigener `BDB`-Version. Der Workaround sieht wie folgt aus:

1. Führen Sie die normalen für MySQL erforderlichen Konfigurationsarbeiten durch.

2. `cd bdb/build_unix/`

3. `cp -p Makefile to Makefile.sav`

4. Führen Sie unter Verwendung derselben Optionen ../dist/configure aus.

5. Führen Sie gmake aus.

6. `cp -p Makefile.sav Makefile`

7. Wechseln Sie in das oberste Quellverzeichnis und führen Sie gmake aus.

Auf diese Weise lassen sich sowohl die statischen als auch die dynamischen Bibliotheken erstellen und zum Laufen bringen. OpenServer 6.0.0 erfordert auch, dass Patches für den MySQL-Source-Tree und der Patch für `config.guess` auf `bdb/dist/config.guess` angewendet werden. Sie können die Patches unter ftp://ftp.zenez.com/pub/zenez/prgms/mysql-4.1.12-osr6-patches.tar.gz bzw. ftp://ftp.zenez.com/pub/zenez/prgms/mysql-4.x.x-osr6-patches herunterladen. Lesen Sie die beigefügte Datei `README`, um Hilfe zu erhalten.

SCO stellt Betriebssystem-Patches für OpenServer 6 unter ftp://ftp.sco.com/pub/openserver6 bereit.

Informationen zu behobenen Sicherheitslücken bietet SCO unter ftp://ftp.sco.com/pub/security/OpenServer.

Standardmäßig beträgt die maximale Dateigröße auf einem OpenServer 6.0.0-System 1 Tbyte. Einige Betriebssystem-Hilfsprogramme weisen eine Beschränkung auf 2 Gbyte auf. Die maximale Dateigröße unter UnixWare 7 beträgt 1 Tbyte mit VXFS oder HTFS.

Standardmäßig haben die Einträge in `/etc/conf/cf.d/mtune` folgende Einstellungen:

    Value           Default         Min             Max
    -----           -------         ---             ---
    SVMMLIM         0x9000000       0x1000000       0x7FFFFFFF
    HVMMLIM         0x9000000       0x1000000       0x7FFFFFFF
    SSTKLIM         0x1000000       0x2000          0x7FFFFFFF
    HSTKLIM         0x1000000       0x2000          0x7FFFFFFF

Wir empfehlen die Einstellung folgender Werte:

    SDATLIM 0x7FFFFFFF
    HDATLIM 0x7FFFFFFF
    SSTKLIM 0x7FFFFFFF
    HSTKLIM 0x7FFFFFFF
    SVMMLIM 0x7FFFFFFF
    HVMMLIM 0x7FFFFFFF
    SFNOLIM 2048
    HFNOLIM 2048

Wir empfehlen eine Optimierung des Systems. Welche Parameterwerte allerdings hierzu geeignet sind, hängt von der Anzahl der Benutzer, die auf die Anwendung oder Datenbank zugreifen, und von der Größe der Datenbank selbst (d. h. dem verwendeten Pufferpool) ab. Das Folgende betrifft die Kernel-Parameter, die in `/etc/conf/cf.d/stune` definiert sind:

`SHMMAX` (Einstellempfehlung: 128 Mbyte) und `SHMSEG` (Einstellempfehlung: 15). Diese Parameter beeinflussen die MySQL-Datenbank-Engine bei der Erstellung der Benutzerpufferpools.

`SFNOLIM` und `HFNOLIM` sollten auf maximal 2048 gesetzt werden.

`NPROC` sollte (abhängig von der Anzahl der Benutzer) auf mindestens 3000/4000 gesetzt werden.

Ferner wird die Verwendung der folgenden Formel zur Berechnung der Werte für `SEMMSL`, `SEMMNS` und `SEMMNU` empfohlen:

    SEMMSL = 13

13 hat sich als optimaler Wert sowohl für Progress als auch für MySQL erwiesen.

`SEMMNS` = `SEMMSL` × Anzahl der auf dem System ausgeführten Server

Setzen Sie `SEMMNS` auf den Wert von `SEMMSL` multipliziert mit der maximalen Anzahl der Datenbankserver, die gleichzeitig auf Ihrem System ausgeführt werden.

`SEMMNU` = `SEMMNS`

`SEMMNU` setzen Sie dann auf den gleichen Wert wie `SEMMNS`. Wahrscheinlich würde hier auch ein Wert von 75 Prozent von `SEMMNS` ausreichen, aber dies ist eine konservative Schätzung.

#### 2.12.5.10. Anmerkungen zu SCO UnixWare 7.1.x und OpenUNIX 8.0.0

Wir empfehlen die Verwendung des aktuellen Produktions-Releases von MySQL.

Wir konnten MySQL mit dem folgenden configure-Befehl unter UnixWare 7.1.x kompilieren.

    CC="cc" CFLAGS="-I/usr/local/include" \
    CXX="CC" CXXFLAGS="-I/usr/local/include" \
    ./configure --prefix=/usr/local/mysql \
        --enable-thread-safe-client --with-berkeley-db=./bdb \
        --with-innodb --with-openssl --with-extra-charsets=complex

Wenn Sie gcc verwenden wollen, müssen Sie gcc 2.95.3 oder höher einsetzen.

    CC=gcc CXX=g++ ./configure --prefix=/usr/local/mysql

Die Version von Berkeley DB, die Bestandteil von UnixWare 7.1.4 wie auch von OpenServer 6.0.0 ist, wird bei der Erstellung von MySQL nicht eingesetzt. Stattdessen verwendet MySQL seine eigene Version von Berkeley DB. Der Befehl configure muss sowohl eine statische als auch eine dynamische Bibliothek in ``src_directory`/bdb/build_unix/` erstellen, aber dies nicht mit MySQLs eigener `BDB`-Version. Der Workaround sieht wie folgt aus:

1. Führen Sie die normalen für MySQL erforderlichen Konfigurationsarbeiten durch.

2. `cd bdb/build_unix/`

3. `cp -p Makefile to Makefile.sav`

4. Führen Sie unter Verwendung derselben Optionen ../dist/configure aus.

5. Führen Sie gmake aus.

6. `cp -p Makefile.sav Makefile`

7. Wechseln Sie in das oberste Quellverzeichnis und führen Sie gmake aus.

Auf diese Weise lassen sich sowohl die statischen als auch die dynamischen Bibliotheken erstellen und zum Laufen bringen.

SCO bietet Betriebssystem-Patches unter ftp://ftp.sco.com/pub/unixware7 für UnixWare 7.1.1, unter ftp://ftp.sco.com/pub/unixware7/713/ für UnixWare 7.1.3, unter ftp://ftp.sco.com/pub/unixware7/714/ für UnixWare 7.1.4 und unter ftp://ftp.sco.com/pub/openunix8 für OpenUNIX 8.0.0 an.

Informationen zu behobenen Sicherheitslücken bietet SCO unter ftp://ftp.sco.com/pub/security/OpenUNIX für OpenUNIX und unter ftp://ftp.sco.com/pub/security/UnixWare für UnixWare an.

Standardmäßig beträgt die maximale Dateigröße auf einem UnixWare 7.1.1-System 1 Gbyte, bei UnixWare 7.1.4 ist die Größe hingegen auf 1 Tbyte mit VXFS beschränkt. Einige Betriebssystem-Hilfsprogramme weisen eine Beschränkung auf 2 Gbyte auf. Die maximal mögliche Dateigröße unter UnixWare 7 beträgt 1 Tbyte mit VXFS.

Unter UnixWare 7.1.4 müssen Sie nichts tun, um in den Genuss der Unterstützung großer Dateien zu kommen. Bei Versionen vor UnixWare 7.1.x müssen Sie zu diesem Zweck `fsadm` ausführen.

    # fsadm -Fvxfs -o largefiles /
    # fsadm /         * Note
    # ulimit unlimited
    # cd /etc/conf/bin
    # ./idtune SFSZLIM 0x7FFFFFFF     ** Note
    # ./idtune HFSZLIM 0x7FFFFFFF     ** Note
    # ./idbuild -B

    * This should report "largefiles".
    ** 0x7FFFFFFF represents infinity for these values.

Starten Sie das System mit `shutdown` neu.

Standardmäßig haben die Einträge in `/etc/conf/cf.d/mtune` folgende Einstellungen:

    Value           Default         Min             Max
    -----           -------         ---             ---
    SVMMLIM         0x9000000       0x1000000       0x7FFFFFFF
    HVMMLIM         0x9000000       0x1000000       0x7FFFFFFF
    SSTKLIM         0x1000000       0x2000          0x7FFFFFFF
    HSTKLIM         0x1000000       0x2000          0x7FFFFFFF

Wir empfehlen die Einstellung folgender Werte:

    SDATLIM 0x7FFFFFFF
    HDATLIM 0x7FFFFFFF
    SSTKLIM 0x7FFFFFFF
    HSTKLIM 0x7FFFFFFF
    SVMMLIM 0x7FFFFFFF
    HVMMLIM 0x7FFFFFFF
    SFNOLIM 2048
    HFNOLIM 2048

Wir empfehlen eine Optimierung des Systems. Welche Parameterwerte allerdings hierzu geeignet sind, hängt von der Anzahl der Benutzer, die auf die Anwendung oder Datenbank zugreifen, und von der Größe der Datenbank selbst (d. h. dem verwendeten Pufferpool) ab. Das Folgende betrifft die Kernel-Parameter, die in `/etc/conf/cf.d/stune` definiert sind:

`SHMMAX` (Einstellempfehlung: 128 Mbyte) und `SHMSEG` (Einstellempfehlung: 15). Diese Parameter beeinflussen die MySQL-Datenbank-Engine bei der Erstellung der Benutzerpufferpools.

`SFNOLIM` und `HFNOLIM` sollten auf maximal 2048 gesetzt werden.

`NPROC` sollte (abhängig von der Anzahl der Benutzer) auf mindestens 3000/4000 gesetzt werden.

Ferner wird die Verwendung der folgenden Formel zur Berechnung der Werte für `SEMMSL`, `SEMMNS` und `SEMMNU` empfohlen:

    SEMMSL = 13

13 hat sich als optimaler Wert sowohl für Progress als auch für MySQL erwiesen.

`SEMMNS` = `SEMMSL` × Anzahl der auf dem System ausgeführten Server

Setzen Sie `SEMMNS` auf den Wert von `SEMMSL` multipliziert mit der maximalen Anzahl der Datenbankserver, die gleichzeitig auf Ihrem System ausgeführt werden.

`SEMMNU` = `SEMMNS`

`SEMMNU` setzen Sie dann auf den gleichen Wert wie `SEMMNS`. Wahrscheinlich würde hier auch ein Wert von 75 Prozent von `SEMMNS` ausreichen, aber dies ist eine konservative Schätzung.

### 2.12.6. Anmerkungen zu OS/2

MySQL verwendet eine ganze Menge offener Dateien. Aus diesem Grund sollten Sie Ihre Datei `CONFIG.SYS` um etwas in der Art des Folgenden ergänzen:

    SET EMXOPT=-c -n -h1024

Andernfalls könnte der folgende Fehler auftreten:

    File 'xxxx' not found (Errcode: 24)

Wenn Sie MySQL mit OS/2 Warp 3 verwenden, benötigen Sie FixPack 29 oder höher. Bei OS/2 Warp 4 ist FixPack 4 oder höher erforderlich. Dies ist eine Anforderung der Pthreads-Bibliothek. MySQL muss auf einer Partition eines Typs installiert sein, der lange Dateinamen benutzt (also etwa HPFS, FAT32 usw.).

Das Skript `INSTALL.CMD` muss aus der OS/2-eigenen `CMD.EXE` ausgeführt werden und funktioniert unter Ersatz-Shells wie `4OS2.EXE` unter Umständen nicht.

Das Skript `scripts/mysql-install-db` wurde umbenannt. Es heißt `install.cmd` und ist ein REXX-Skript, das die Standardsicherheitseinstellungen von MySQL einrichtet und die WorkPlace-Shell-Symbole für MySQL erstellt.

Dynamische Module sind einkompiliert, wurden aber nicht vollständig getestet. Dynamische Module sollten mit der Pthreads-Laufzeitbibliothek kompiliert werden.

    gcc -Zdll -Zmt -Zcrtdll=pthrdrtl -I../include -I../regex -I.. \
        -o example udf_example.cc -L../lib -lmysqlclient udf_example.def
    mv example.dll example.udf

Hinweis: Aufgrund der Beschränkungen in OS/2 dürfen UDF-Modulnamenstämme nicht länger als acht Zeichen sein. Module werden im Verzeichnis `/mysql2/udf` gespeichert, welches vom Skript `safe-mysqld.cmd` in der Umgebungsvariablen `BEGINLIBPATH` abgelegt wird. Wenn Sie UDF-Module verwenden, werden die angegebenen Erweiterungen ignoriert (es wird davon ausgegangen, dass diese ohnehin immer `.udf` lauten). Beispielsweise kann das gemeinsame Modul unter Unix `example.so` heißen; eine Funktion daraus würden Sie dann wie folgt laden:

    mysql> CREATE FUNCTION metaphon RETURNS STRING SONAME 'example.so';

Bei OS/2 hieße das Modul `example.udf`, aber Sie würden die Modulerweiterung nicht angeben:

    mysql> CREATE FUNCTION metaphon RETURNS STRING SONAME 'example';

## 2.13. Anmerkungen zur Perl-Installation

Die Perl-Unterstützung für MySQL erfolgt mithilfe der `DBI`-/`DBD`-Clientschnittstelle. Die Schnittstelle erfordert Perl 5.6.1 oder höher. Sie funktioniert nicht, wenn Sie eine ältere Perl-Version einsetzen.

Wenn Sie Transaktionen mit Perl DBI verwenden wollen, brauchen Sie `DBD::mysql` in der Version 1.2216 oder höher. Empfohlen wird `DBD::mysql` 2.9003 oder höher.

Sofern Sie MySQL 4.1 oder eine neuere Clientbibliothek verwenden, müssen Sie `DBD::mysql` 2.9003 oder höher in jedem Fall einsetzen.

Die Perl-Unterstützung ist nicht in den MySQL-Distributionen enthalten. Die erforderlichen Module für Unix erhalten Sie unter http://search.cpan.org bzw. für Windows durch Verwendung des ActiveState-Programms ppm. Die folgenden Abschnitte beschreiben die erforderlichen Abläufe.

Wenn Sie die MySQL-Benchmark-Skripten ausführen wollen, muss der Perl-Support für MySQL installiert sein. Siehe auch Abschnitt 7.1.4, „Die MySQL-Benchmark-Reihe“.

### 2.13.1. Installation von Perl unter Unix

Die Perl-Unterstützung durch MySQL setzt voraus, dass Sie die Unterstützung für die MySQL-Clientprogrammierung (Bibliotheken und Header-Dateien) installiert haben. Bei den meisten Installationsmethoden werden die notwendigen Dateien installiert. Haben Sie MySQL allerdings aus RPM-Dateien für Linux installiert, dann vergewissern Sie sich, dass Sie das Entwickler-RPM zur Installation verwendet haben. Die Clientprogramme befinden sich im Client-RPM, die Unterstützung für die Clientprogrammierung jedoch im Entwickler-RPM.

Wenn Sie die Perl-Unterstützung installieren wollen, erhalten Sie die erforderlichen Dateien beim CPAN (Comprehensive Perl Archive Network) unter http://search.cpan.org.

Die einfachste Möglichkeit, Perl-Module unter Unix zu installieren, besteht in der Verwendung des `CPAN`-Moduls. Ein Beispiel:

    shell> perl -MCPAN -e shell
    cpan> install DBI
    cpan> install DBD::mysql

Die `DBD::mysql`-Installation führt eine Anzahl von Tests durch. Bei diesen Tests wird versucht, unter Angabe der Standardwerte für Benutzername und Passwort eine Verbindung zum lokalen MySQL Server herzustellen. (Der Standardbenutzername ist unter Unix Ihr Anmeldename und unter Windows `ODBC`. Das Standardpasswort heißt „no password“.) Wenn Sie mit diesen Einstellungen keine Verbindung zum Server herstellen können, weil beispielsweise Ihr Konto ein Passwort hat, dann schlagen die Tests fehl. Sie können `force install DBD::mysql` verwenden, um fehlgeschlagene Tests zu ignorieren.

`DBI` benötigt das Modul `Data::Dumper`. Dieses ist unter Umständen bereits installiert, andernfalls sollten Sie es vor der Installation von `DBI` installieren.

Es ist auch möglich, die Moduldistributionen in Form komprimierter tar-Archive herunterzuladen und die Module manuell zu erstellen. Um beispielsweise eine DBI-Distribution zu entpacken und zu erstellen, verwenden Sie folgende Vorgehensweise:

1. Entpacken Sie die Distribution in das aktuelle Verzeichnis:

       shell> gunzip < DBI-VERSION.tar.gz | tar xvf -

   Dieser Befehl erstellt ein Verzeichnis namens `DBI-`VERSION``.

2. Wechseln Sie nun in das Stammverzeichnis der entpackten Distribution:

       shell> cd DBI-VERSION

3. Erstellen Sie die Distribution und kompilieren Sie alles:

       shell> perl Makefile.PL
       shell> make
       shell> make test
       shell> make install

Der Befehl make test ist wichtig, da mit ihm die Funktionsfähigkeit des Moduls verifiziert wird. Beachten Sie, dass der MySQL Server laufen muss, wenn Sie diesen Befehl während der `DBD::mysql`-Installation absetzen, um den Schnittstellencode auszuführen; andernfalls schlägt der Test fehl.

Sie sollten die `DBD::mysql`-Distribution bei jeder Installation eines neuen MySQL-Releases neu erstellen und installieren. Dies gilt insbesondere, wenn Sie beispielsweise feststellen, dass all Ihre `DBI`-Skripten nach der Aktualisierung von MySQL nicht mehr funktionieren.

Wenn Sie nicht die erforderlichen Berechtigungen zur Installation von Perl-Modulen im Systemverzeichnis haben oder lokale Perl-Module installieren wollen, ist die folgende Referenz für Ihre Belange vielleicht recht nützlich: http://servers.digitaldaze.com/extensions/perl/modules.html#modules

Lesen Sie dort das Kapitel „Installing New Modules that Require Locally Installed Modules“.

### 2.13.2. Installation von ActiveState-Perl unter Windows

Unter Windows müssen Sie Folgendes tun, um das `DBD`-Modul mit ActiveState-Perl zu installieren:

1. Beschaffen Sie sich ActiveState Perl unter http://www.activestate.com/Products/ActivePerl/ und installieren Sie es.

2. Öffnen Sie ein Konsolenfenster („Eingabeaufforderung“).

3. Stellen Sie ggf. die Variable `HTTP_proxy` ein. So kann etwa folgende Einstellung erforderlich sein:

       set HTTP_proxy=my.proxy.com:3128

4. Starten Sie das PPM-Programm:

       C:\> C:\perl\bin\ppm.pl

5. Installieren Sie `DBI`, sofern Sie dies nicht bereits getan haben:

       ppm> install DBI

6. Führen Sie, wenn alles geklappt hat, folgenden Befehl aus:

       install \
       ftp://ftp.de.uu.net/pub/CPAN/authors/id/JWIED/DBD-mysql-1.2212.x86.ppd

Diese Vorgehensweise sollte bei ActiveState Perl 5.6 oder höher funktionieren.

Klappt dies nicht, dann sollten Sie stattdessen den MyODBC-Treiber installieren und über ODBC eine Verbindung zum MySQL Server herstellen:

    use DBI;
    $dbh= DBI->connect("DBI:ODBC:$dsn",$user,$password) ||
      die "Got error $DBI::errstr when connecting to $dsn\n";

### 2.13.3. Probleme bei der Benutzung der `DBI`/`DBD`-Schnittstelle von Perl

Wenn Perl meldet, dass das Modul `../mysql/mysql.so` nicht gefunden werden kann, dann liegt das wahrscheinlich daran, dass Perl die gemeinsame Bibliothek `libmysqlclient.so` nicht findet. Sie sollten dieses Problem auf eine der folgenden Weisen lösen können:

- Kompilieren Sie die Distribution `DBD::mysql` mit `perl Makefile.PL -static -config` statt mit `perl Makefile.PL`.

- Kopieren Sie `libmysqlclient.so` in das Verzeichnis, in dem sich Ihre anderen gemeinsamen Bibliotheken befinden (dies ist wahrscheinlich `/usr/lib` oder `/lib`).

- Ändern Sie die `-L`-Optionen zur Kompilierung von `DBD::mysql` so ab, dass die tatsächliche Position von `libmysqlclient.so` berücksichtigt wird.

- Unter Linux können Sie den Pfadnamen des Verzeichnisses, in dem sich `libmysqlclient.so` befindet, zur Datei `/etc/ld.so.conf` hinzufügen.

- Fügen Sie den Pfadnamen des Verzeichnisses, in dem sich `libmysqlclient.so` befindet, der Umgebungsvariablen `LD_RUN_PATH` hinzu. Einige Systeme verwenden stattdessen `LD_LIBRARY_PATH`.

Beachten Sie, dass Sie möglicherweise auch die `-L`-Optionen ändern müssen, wenn auch andere Bibliotheken vom Linker nicht gefunden werden. Kann der Linker beispielsweise `libc` nicht finden, weil sich die Datei in `/lib` befindet, der Verknüpfungsbefehl aber `-L/usr/lib` angibt, dann ändern Sie die Option `-L` zu `-L/lib` oder fügen `-L/lib` zum vorhandenen Verknüpfungsbefehl hinzu.

Wenn Sie die folgenden Fehler von `DBD::mysql` erhalten, verwenden Sie wahrscheinlich gcc (oder eine alte Binärdatei, die mit gcc kompiliert wurde):

    /usr/bin/perl: can't resolve symbol '__moddi3'
    /usr/bin/perl: can't resolve symbol '__divdi3'

Fügen Sie `-L/usr/lib/gcc-lib/... -lgcc` zum Verknüpfungsbefehl hinzu, wenn die Bibliothek `mysql.so` erstellt wird (überprüfen Sie die Ausgabe von make bezüglich `mysql.so`, wenn Sie den Perl-Client kompilieren). Die `-L`-Option sollte den Pfadnamen des Verzeichnisses angeben, in dem `libgcc.a` auf Ihrem System gespeichert ist.

Eine andere Ursache dieses Problems könnte sein, dass nicht sowohl Perl als auch MySQL mit gcc kompiliert wurden. In diesem Fall können Sie die Nichtübereinstimmung beheben, indem Sie beide mit gcc kompilieren.

Wenn Sie die Tests ausführen, gibt `DBD::mysql` unter Umständen die folgende Fehlermeldung aus:

    t/00base............install_driver(mysql) failed:
    Can't load '../blib/arch/auto/DBD/mysql/mysql.so' for module DBD::mysql:
    ../blib/arch/auto/DBD/mysql/mysql.so: undefined symbol:
    uncompress at /usr/lib/perl5/5.00503/i586-linux/DynaLoader.pm line 169.

Dies bedeutet, dass Sie die Komprimierungsbibliothek `-lz` in der Verknüpfungszeile hinzufügen müssen. Dies können Sie tun, indem Sie in der Datei `lib/DBD/mysql/Install.pm` die Zeile

    $sysliblist .= " -lm";

wie folgt ändern:

    $sysliblist .= " -lm -lz";

Danach müssen Sie make realclean ausführen und nachfolgend von vorne mit der Installation beginnen.

Wenn Sie DBI unter SCO installieren wollen, müssen Sie `Makefile` in DBI-`xxx` und allen Unterverzeichnissen bearbeiten. Beachten Sie, dass das Folgende gcc 2.95.2 oder höher voraussetzt:

    OLD:                                  NEW:
    CC = cc                               CC = gcc
    CCCDLFLAGS = -KPIC -W1,-Bexport       CCCDLFLAGS = -fpic
    CCDLFLAGS = -wl,-Bexport              CCDLFLAGS =

    LD = ld                               LD = gcc -G -fpic
    LDDLFLAGS = -G -L/usr/local/lib       LDDLFLAGS = -L/usr/local/lib
    LDFLAGS = -belf -L/usr/local/lib      LDFLAGS = -L/usr/local/lib

    LD = ld                               LD = gcc -G -fpic
    OPTIMISE = -Od                        OPTIMISE = -O1

    OLD:
    CCCFLAGS = -belf -dy -w0 -U M_XENIX -DPERL_SCO5 -I/usr/local/include

    NEW:
    CCFLAGS = -U M_XENIX -DPERL_SCO5 -I/usr/local/include

Diese Änderungen sind erforderlich, weil der Perl-Dynaloader die `DBI`-Module nicht lädt, wenn diese mit icc oder cc kompiliert wurden.

Wollen Sie das Perl-Modul auf einem System verwenden, das keine dynamischen Verknüpfungen unterstützt (wie z. B. SCO), dann können Sie eine statische Perl-Version erzeugen, die `DBI` und `DBD::mysql` enthält. Dies funktioniert so, dass Sie eine Perl-Version mit verknüpftem `DBI`-Code erzeugen und diese über Ihre aktuelle Perl-Installation installieren. Dieses verwenden Sie dann zur Erstellung einer Perl-Version, die zusätzlich den verknüpften `DBD`-Code beinhaltet und die Sie dann installieren.

Unter SCO müssen Sie zuvor die folgenden Umgebungsvariablen einstellen:

    LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:/usr/progressive/lib

Oder:

    LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:\
        /usr/progressive/lib:/usr/skunk/lib
    LIBPATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:\
        /usr/progressive/lib:/usr/skunk/lib
    MANPATH=scohelp:/usr/man:/usr/local1/man:/usr/local/man:\
        /usr/skunk/man:

Sie erstellen zunächst eine Perl-Version, die ein statisch verknüpftes `DBI`-Modul enthält. Dies tun Sie durch Ausführen der folgenden Befehle in dem Verzeichnis, in dem Ihre `DBI`-Distribution gespeichert ist:

    shell> perl Makefile.PL -static -config
    shell> make
    shell> make install
    shell> make perl

Danach müssen Sie das neue Perl installieren. Die Ausgabe von make perl gibt den exakten make-Befehl an, den Sie ausführen müssen, um die Installation durchzuführen. Unter SCO heißt der Befehl make -f Makefile.aperl inst_perl MAP_TARGET=perl.

Als Nächstes verwenden Sie das gerade erstellte Perl zur Erstellung eines anderen Perl, welches auch ein statisch verknüpftes `DBD::mysql` enthält. Hierzu führen Sie die folgenden Befehle in dem Verzeichnis aus, in dem sich Ihre `DBD::mysql`-Distribution befindet:

    shell> perl Makefile.PL -static -config
    shell> make
    shell> make install
    shell> make perl

Abschließend sollten Sie dieses neue Perl installieren. Auch hier zeigt die Ausgabe von make perl den zu verwendenden Befehl an.

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.

Zurück |  | Weiter
Kapitel 1. Allgemeine Informationen über MySQL | Zum Anfang | Kapitel 3. Einführung in MySQL: ein MySQL-Tutorial