Bevor Sie einen Bugreport zu einem Problem einreichen, stellen Sie zunächst sicher, dass es sich wirklich um einen Bug handelt und dass dieser nicht bereits gemeldet wurde:
Beginnen Sie mit der Suche im MySQL-Online-Manual unter http://dev.mysql.com/doc/. Wir versuchen, das Manual aktuell zu halten, indem wir es häufig mit Lösungen zu neu gefundenen Problemen aktualisieren. Die Änderungshistorie (http://dev.mysql.com/doc/mysql/en/news.html) kann besonders nützlich sein, da es durchaus möglich ist, dass eine neuere Version eine Lösung zu Ihrem Problem enthält.
Wenn beim Parsen einer SQL-Anweisung ein Fehler auftritt,
überprüfen Sie Ihre Syntax bitte sorgfältig. Wenn Sie keinen
Fehler erkennen können, ist es sehr wahrscheinlich, dass Ihre
gegenwärtige Version von MySQL Server die verwendete Syntax
nicht unterstützt. Wenn Sie die aktuelle Version verwenden und
das Manual die von Ihnen verwendete Syntax nicht behandelt, dann
unterstützt MySQL Server Ihre Anweisung nicht. In diesem Fall
bestehen Ihre Möglichkeiten darin, die Syntax selbst zu
implementieren oder eine E-Mail an
<licensing@mysql.com>
zu senden und darin um ein
Angebot für eine Implementierung zu bitten.
Wenn das Manual die von Ihnen verwendete Syntax behandelt, aber Sie mit einer älteren Version von MySQL Server arbeiten, überprüfen Sie in der MySQL-Änderungshistorie, wann die Syntax implementiert wurde. In diesem Fall können Sie auf eine neuere Version von MySQL Server aktualisieren.
Informationen zur Lösung einiger häufiger Probleme finden Sie unter Anhang A, Probleme und häufig auftretende Fehler.
Durchsuchen Sie die Bugdatenbank unter http://bugs.mysql.com/ und überprüfen Sie, ob der Bug gemeldet und ggf. behoben wurde.
Durchsuchen Sie die Archive der MySQL-Mailinglisten unter http://lists.mysql.com/. Siehe auch Abschnitt 1.7.1, „Die MySQL-Mailinglisten“.
Sie können auch über http://www.mysql.com/search/ alle Webseiten (einschließlich des Manuals) durchsuchen, die sich auf der Website von MySQL AB befinden.
Wenn Sie im Manual, der Bugdatenbank oder den Archiven der Mailinglisten keine Antwort finden, wenden Sie sich an Ihren lokalen MySQL-Fachmann. Erhalten Sie auch dort keine Antwort auf Ihre Frage, dann melden Sie den Bug bitte unter Beachtung der folgenden Verhaltensregeln.
Die normale Vorgehensweise zur Meldung von Bugs besteht in einem Besuch auf http://bugs.mysql.com/. Dies ist die Adresse unserer Bugdatenbank. Diese Datenbank ist öffentlich und kann von jedem gelesen und durchsucht werden. Wenn Sie sich am System anmelden, können Sie neue Meldungen eingeben. Haben Sie keinen Webzugang, dann können Sie mit dem Skript mysqlbug einen Bugreport erstellen. Das Skript ist am Ende dieses Abschnitts beschrieben.
Bugs, die in die Bugdatenbank unter http://bugs.mysql.com/ eingetragen sind und in einem gegebenen Release behoben wurden, sind in der Änderungshistorie vermerkt.
Wenn Sie einen sensiblen Sicherheitsbug in MySQL gefunden haben,
können Sie eine E-Mail an <security@mysql.com>
schicken.
Wenn Sie Probleme mit anderen Benutzern diskutieren wollen, können Sie zu diesem Zweck eine der MySQL-Mailinglisten verwenden. Abschnitt 1.7.1, „Die MySQL-Mailinglisten“.
Das Verfassen eines Bugreports erfordert Geduld. Wenn Sie dies aber zuallererst tun, sparen Sie sowohl sich selbst als auch uns Zeit. Ein guter Bugreport enthält einen vollständigen Testfall für den Bug, welcher es uns mit hoher Wahrscheinlichkeit ermöglichen wird, ihn bereits im nächsten Release zu beheben. Dieser Abschnitt soll Ihnen dabei helfen, Ihren Bugreport korrekt zu formulieren, sodass Sie keine Zeit mit Dingen verschwenden, die uns nur wenig oder gar nicht helfen. Bitte lesen Sie diesen Abschnitt aufmerksam durch und stellen Sie sicher, dass alle hier beschriebenen Angaben in Ihrem Report enthalten sind.
Sie sollten das Problem bevorzugt mit der aktuellen Produktions-
oder Entwicklungsversion von MySQL Server überprüfen, bevor Sie
den Report absenden. Der Bug sollte sich problemlos reproduzieren
lassen, indem einfach der Befehl mysql test <
script_file
für Ihren Testfall ausgeführt oder das
Shell- oder Perl-Skript gestartet wird, das Sie dem Bugreport
hinzufügen. Für jeden Bug, den wir reproduzieren können, stehen
die Chancen einer Behebung im nächsten MySQL-Release gut.
Am hilfreichsten ist es, wenn eine gute Beschreibung des Problems dem Bugreport beiliegt. Das bedeutet: Geben Sie ein gutes Beispiel für alles an, was Sie taten, als das Problem auftrat, und beschreiben Sie möglichst detailliert das Problem selbst. Die besten Reports sind diejenigen, die eine vollständige Beschreibung enthalten, wie der Bug oder das Problem reproduziert werden können. Siehe auch Abschnitt E.1.6, „Erzeugen eines Testfalls, wenn Sie Tabellenbeschädigung feststellen“.
Bedenken Sie, dass wir zwar einen Report bearbeiten können, der zu viele Angaben enthält, nicht aber einen solchen, der zu wenig Informationen umfasst. Es kommt häufig vor, dass Tatsachen weggelassen werden, weil der Einreicher annimmt, dass wir das Problem kennen und die Details keine Rolle spielen. Eine Faustregel, der Sie folgen können, lautet: Wenn Sie im Zweifel sind, ob Sie etwas angeben wollen, dann geben Sie es lieber an. Es geht schneller und ist weniger mühsam, ein paar Zeilen mehr in Ihren Report zu schreiben, als länger auf die Antwort warten zu müssen, weil wir bei Ihnen Angaben erfragen müssen, die im eingereichten Bugreport nicht enthalten waren.
Die meistgemachten Fehler in Bugreports bestehen darin, dass (a) die Versionsnummer der verwendeten MySQL-Distribution nicht enthalten und (b) die Plattform, auf der der MySQL Server installiert ist, nicht vollständig (einschließlich der Angaben zu Typ und Versionsnummer der Plattform) beschrieben ist. Dies sind extrem wichtige Informationen, und in 99 von 100 Fällen ist der Bugreport ohne sie wertlos. Sehr oft erhalten wir Fragen wie „Warum funktioniert das bei mir nicht?“. Dann stellen wir fest, dass die angeforderte Funktionalität in der betreffenden MySQL-Version gar nicht implementiert war oder dass ein in einem Report beschriebener Bug in einer neueren MySQL-Version bereits behoben ist. Fehler sind häufig plattformspezifisch. In solchen Fällen ist es praktisch unmöglich für uns, irgendetwas zu beheben, wenn wir weder das Betriebssystem noch die Versionsnummer der Plattform kennen.
Wenn Sie MySQL aus dem Quellcode kompiliert haben, denken Sie bitte auch daran, Angaben zu Ihrem Compiler hinzuzufügen, sofern dies für das Problem relevant ist. Häufig finden Benutzer Bugs in Compilern und glauben dann, dass das Problem MySQL-spezifisch ist. Die meisten Compiler werden fortlaufend weiterentwickelt und von Version zu Version besser. Um zu ermitteln, ob Ihr Problem von Ihrem Compiler abhängt, müssen wir wissen, welchen Compiler Sie verwendet haben. Beachten Sie, dass jedes Kompilierungsproblem als Bug betrachtet und entsprechend gemeldet werden sollte.
Wenn ein Programm eine Fehlermeldung erzeugt, ist es sehr wichtig, auch diese Meldung in Ihrem Report zu erwähnen. Wenn wir versuchen, Erkundigungen in den Archiven einzuziehen, dann ist es am besten, wenn Sie die Fehlermeldung exakt so angeben, wie das Programm sie erzeugt hat. (Beachten Sie im Zweifelsfall auch die Groß-/Kleinschreibung.) Am besten kopieren Sie die gesamte Fehlermeldung über die Zwischenablage in Ihren Report. Versuchen Sie bitte nicht, die Fehlermeldung aus dem Gedächtnis zu rekonstruieren.
Wenn Sie ein Problem in Zusammenhang mit Connector/ODBC (MyODBC) haben, versuchen Sie bitte, eine Trace-Datei zu erzeugen, und schicken diese mit Ihrem Report. Siehe auch Abschnitt 25.1.7.2, „Melden von MyODBC-Problemen und -Fehlern“.
Wenn Ihr Report lange Abfrageausgabezeilen aus Testfällen enthält,
die Sie mit dem Befehlszeilen-Tool mysql
ausgeführt haben, dann können Sie die Leserlichkeit der Ausgabe
mit der Option --vertical
oder dem Abschlusszeichen
\G
erhöhen. Das weiter unten folgende Beispiel
für EXPLAIN SELECT
demonstriert die Verwendung
von \G
.
Bitte legen Sie Ihrem Report die folgenden Angaben bei:
Die Versionsnummer der von Ihnen verwendeten MySQL-Distribution
(z. B. MySQL 5.0.19). Die Versionsnummer ermitteln Sie durch
Ausführen von mysqladmin version. Das
Programm mysqladmin finden Sie im Verzeichnis
bin
im MySQL-Installationsverzeichnis.
Den Hersteller und das Modell des Computers, auf dem das Problem aufgetreten ist.
Name und Version des Betriebssystems. Wenn Sie mit Windows
arbeiten, erhalten Sie Namen und Versionsnummer, indem Sie auf
das Arbeitsplatz-Symbol doppelklicken und dann den Eintrag
„Hilfe/Über Windows“ auswählen. Bei den meisten
UNIX-Derivaten gelangen Sie an diese Angaben, indem Sie den
Befehl uname -a
ausführen.
In bestimmten Fällen ist die Menge des (physischen und virtuellen) Speichers relevant. Geben Sie diese Werte im Zweifelsfall auch an.
Wenn Sie eine Quelldistribution der MySQL-Software verwenden, geben Sie Namen und Versionsnummer des verwendeten Compilers an. Im Falle einer Binärdistribution nennen Sie den Distributionsnamen.
Tritt das Problem während der Kompilierung auf, dann fügen Sie die exakten Fehlermeldungen sowie ein paar Zeilen Kontext im Bereich des problematischen Codes in der Datei hinzu, in dem der Fehler auftritt.
Wenn mysqld abstürzt, sollten Sie auch die Anweisung angeben, mit der mysqld zum Absturz gebracht wurde. Diese Information erhalten Sie normalerweise, wenn Sie mysqld mit aktiviertem Abfragelog starten und die Logdatei überprüfen, nachdem mysqld abgestürzt ist. Siehe auch Abschnitt E.1.5, „Logdateien benutzen, um Ursachen für Fehler in mysqld zu finden“.
Wenn eine Datenbanktabelle mit dem Problem in Zusammenhang
steht, geben Sie die Ausgabe der Anweisung SHOW CREATE
TABLE
im Bugreport an. Dies stellt eine sehr einfache Möglichkeit
dar, die Definition einer beliebigen Tabelle in der Datenbank zu
ermitteln. Mithilfe dieser Information können wir die
Situation, in der das Problem bei Ihnen auftrat, auf unseren
Systemen nachstellen.
db_name
.tbl_name
Bei leistungsspezifischen Bugs oder Problemen mit
SELECT
-Anweisungen sollten Sie außerdem die
Ausgabe von EXPLAIN SELECT ...
und zumindest
die Anzahl der Datensätze angeben, die die
SELECT
-Anweisung erzeugt. Ferner hinzufügen
sollten Sie die Ausgabe von SHOW CREATE TABLE
für jede
betroffene Tabelle. Je mehr Angaben Sie über die Umstände
machen, desto größer ist die Wahrscheinlichkeit, dass wir
Ihnen helfen können.
tbl_name
Nachfolgend finden Sie ein Beispiel für einen sehr guten
Bugreport. Die Anweisungen werden mit dem Befehlszeilen-Tool
mysql ausgeführt. Beachten Sie die
Verwendung des Abschlusszeichens \G
bei
Anweisungen, die andernfalls sehr lange, schwierig zu lesende
Ausgabezeilen erzeugen würden.
mysql>SHOW VARIABLES;
mysql>SHOW COLUMNS FROM ...\G
<output from SHOW COLUMNS>
mysql>EXPLAIN SELECT ...\G
<output from EXPLAIN>
mysql>FLUSH STATUS;
mysql>SELECT ...;
<A short version of the output from SELECT, including the time taken to run the query>
mysql>SHOW STATUS;
<output from SHOW STATUS>
Wenn während der Ausführung von mysqld ein Bug oder Problem auftritt, dann versuchen Sie, ein Eingabeskript hinzuzufügen, welches die Anomalie reproduziert. Dieses Skript sollte alle erforderlichen Quellcodedateien enthalten. Je exakter das Skript die betreffende Situation reproduzieren kann, umso besser. Wenn Sie einen reproduzierbaren Test erstellen können, sollten Sie diesen als Anhang an den Bugreport anhängen.
Können Sie kein Skript erstellen, dann sollten Sie Ihrem Report zumindest die Ausgabe von mysqladmin variables extended-status processlist hinzufügen, damit wir einige Anhaltspunkte dazu erhalten, wie Ihr System arbeitet.
Können Sie keinen Testfall mit nur wenigen Datensätzen
erstellen oder ist die Testtabelle zu groß, um in den Bugreport
eingefügt werden zu können (d. h., sie umfasst mehr als zehn
Datensätze), dann sollten Sie Ihre Tabellen mit
mysqldump speichern und eine
README
-Datei erstellen, die Ihr Problem
beschreibt. Erstellen Sie ein komprimiertes Archiv Ihrer Dateien
mithilfe von tar und gzip
oder zip und übertragen Sie das Archiv dann
via FTP an ftp://ftp.mysql.com/pub/mysql/upload/.
Tragen Sie das Problem danach in unsere Bugdatenbank unter
http://bugs.mysql.com/ ein.
Wenn Sie der Ansicht sind, dass der MySQL Server ein merkwürdiges Ergebnis für die Anweisung erzeugt, fügen Sie nicht nur dieses, sondern auch Ihre Ansicht bezüglich des von Ihnen erwarteten Ergebnisses und eine Beschreibung der Grundlage dieser Ansicht hinzu.
Wenn Sie ein Beispiel des Problems angeben, sollten Sie am besten Tabellennamen, Variablennamen usw. verwenden, die in Ihrer tatsächlichen Situation zum Einsatz kommen, statt neue Namen einzuführen. Das Problem könnte auch mit dem Namen einer Tabelle oder Variablen zusammenhängen. Solche Fälle mögen selten sein, aber besser ist es, auf der sicheren Seite zu stehen. Schließlich sollte es für Sie einfacher sein, ein Beispiel anzugeben, das Ihre tatsächlichen Umstände verwendet, und für uns ist dies in jedem Fall besser. Wenn Sie wollen, dass bestimmte Daten im Bugreport für Dritte unsichtbar bleiben, können Sie ihn via FTP an ftp://ftp.mysql.com/pub/mysql/upload/ übertragen. Sind die Daten wirklich derart geheim, dass Sie sie noch nicht einmal uns zeigen wollen, dann können Sie auch ein Beispiel unter Verwendung anderer Namen erstellen; dies stellt allerdings nur den letzten Ausweg dar.
Fügen Sie, sofern möglich, alle Optionen an, die Sie für die
betreffenden Programme angegeben hatten. Geben Sie etwa die
Optionen an, die Sie beim Start des Servers
mysqld verwenden, sowie auch solche, die Sie
bei der Ausführung von MySQL-Clientprogrammen verwendet haben.
Die Optionen für Programme wie mysqld und
mysql sowie für das Skript
configure sind für die Behebung von
Problemen häufig unentbehrlich, und es kann nie schaden, sie
hinzuzufügen. Wenn Ihr Problem in Zusammenhang mit einem
Programm steht, das in einer Sprache wie Perl oder PHP
geschrieben ist, fügen Sie bitte die Versionsnummer des
Sprachprozessors sowie die Versionen aller Module an, die das
Programm verwendet. Setzen Sie beispielsweise ein Perl-Skript
ein, das die Module DBI
und
DBD::mysql
benutzt, dann müssen Sie die
Versionsnummern von Perl, DBI
und
DBD::mysql
angeben.
Bezieht sich Ihre Frage auf das Berechtigungssystem, dann
führen Sie bitte die Ausgaben von
mysqlaccess und mysqladmin
reload sowie alle Fehlermeldungen an, die Sie beim
Verbindungsversuch erhalten. Wenn Sie Ihre Berechtigungen
testen, sollten Sie zunächst mysqlaccess
ausführen. Nachfolgend starten Sie mysqladmin reload
version und versuchen, eine Verbindung mit dem
problematischen Programm herzustellen. Das Programm
mysqlaccess finden Sie im Verzeichnis
bin
im MySQL-Installationsverzeichnis.
Wenn Sie einen Patch für einen Bug haben, fügen Sie ihn hinzu. Gehen Sie aber nicht davon aus, dass wir lediglich diesen Patch benötigen oder dass wir ihn verwenden können, wenn Sie bestimmte Angaben wie etwa Testfälle weglassen, die den Bug demonstrieren, den Sie mit Ihrem Patch beheben. Unter Umständen stellen wir Probleme bei Ihrem Patch fest oder verstehen ihn überhaupt nicht. In diesem Fall können wir ihn natürlich nicht verwenden.
Wenn wir den Zweck des Patches nicht exakt verifizieren können, verwenden wir ihn auch nicht. In diesem Fall sind Testfälle sehr hilfreich. Zeigen Sie, dass der Patch das Problem in allen Situationen behebt, die auftreten können. Können wir einen (ggf. auch seltenen) Fall ermitteln, in dem der Patch nicht funktioniert, dann ist er möglicherweise nutzlos.
Mutmaßungen bezüglich des Wesens, der Ursache oder der Abhängigkeiten eines Bugs sind in der Regel falsch. Sogar das MySQL-Team kann solche Dinge nicht erraten, sondern muss zunächst einmal mit einem Debugger die wirkliche Ursache des Bugs ermitteln.
Geben Sie in Ihrem Bugreport an, dass Sie das Referenzmaterial und das Mailarchiv überprüft haben, damit andere wissen, dass Sie zunächst versucht haben, das Problem selbst zu lösen.
Wenn das Problem darin besteht, dass Ihre Daten beschädigt zu
sein scheinen oder Sie Fehler erhalten, wenn Sie auf eine
bestimmte Tabelle zugreifen, dann sollten Sie Ihre Tabellen
zuerst überprüfen und dann versuchen, sie zu reparieren.
Hierzu verwenden Sie CHECK TABLE
und
REPAIR TABLE
oder aber
myisamchk. Siehe auch
Kapitel 5, Datenbankverwaltung.
Wenn Sie Windows verwenden, überprüfen Sie bitte den Wert von
lower_case_table_names
mit dem Befehl
SHOW VARIABLES LIKE 'lower_case_table_names'
.
Diese Variable beeinflusst, wie der Server die
Groß-/Kleinschreibung von Datenbank- und Tabellennamen
behandelt. Die Auswirkung auf einen gegebenen Wert sollte so
sein wie in Abschnitt 9.2.2, „Groß-/Kleinschreibung in Namen“,
beschrieben.
Wenn Fälle beschädigter Tabellen bei Ihnen häufig auftreten,
sollten Sie herausfinden, wann und warum dies passiert. In
diesem Fall enthält das Fehlerlog im MySQL-Datenverzeichnis
unter Umständen Informationen dazu, was geschehen ist. (Es
handelt sich um die Datei mit dem Suffix
.err
im Dateinamen.) Siehe auch
Abschnitt 5.12.1, „Die Fehler-Logdatei“. Bitte fügen Sie alle relevanten
Angaben aus dieser Datei in Ihrem Bugreport an. Normalerweise
sollte mysqld eine Tabelle
niemals zum Absturz bringen, sofern es
nicht während eines laufenden Updates terminiert wurde. Wenn
Sie erkennen können, warum mysqld terminiert
wird, dann ist es für uns viel einfacher, Ihnen einen Fix für
dieses Problem zur Verfügung zu stellen. Siehe auch
Abschnitt A.1, „Wie man feststellt, was Probleme verursacht“.
Laden Sie, sofern möglich, die aktuellste Version von MySQL Server herunter und installieren Sie sie. Überprüfen Sie dann, ob Ihr Problem auf diese Weise gelöst wird. Alle Versionen der MySQL-Software wurden umfassend getestet und sollten problemlos funktionieren. Wir achten bei unseren Entwicklungen auf größtmögliche Abwärtskompatibilität, d. h., Sie sollten problemlos zwischen verschiedenen MySQL-Versionen wechseln können. Siehe auch Abschnitt 2.1.2, „Welche MySQL-Version Sie benutzen sollten“.
Wenn Sie keinen Webzugang haben und einen Bug nicht auf
http://bugs.mysql.com/ melden können, erzeugen Sie
mit dem Skript mysqlbug einen Bugreport (oder
einen Report zu einem beliebigen anderen Problem).
mysqlbug unterstützt Sie bei der Erzeugung eines
Reports, denn ein Großteil der erforderlichen Informationen wird
automatisch ermittelt. Sollte jedoch etwas fehlen, dann fügen Sie
es Ihrer Meldung bitte hinzu. mysqlbug finden Sie
im Verzeichnis scripts
(Quelldistribution) bzw.
im Verzeichnis bin
unter Ihrem
MySQL-Installationsverzeichnis (Binärdistribution).
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.