2.3 How to report bugs or problems

Writing a good bug report takes patience, but doing it right the first time saves time for us and for you. This section will help you write your report correctly so that you don't waste your time doing things that may not help us much or at all.

We encourage everyone to use the mysqlbug script to generate a bug report (or a report about any problem), if possible. mysqlbug can be found in the `scripts' directory in the source distribution, or, for a binary distribution, in the `bin' directory under your MySQL installation directory. If you are unable to use mysqlbug, you should still include all the necessary information listed in this section.

The mysqlbug script helps you generate a report by determining much of the following information automatically, but if something important is missing, please include it with your message! Please read this section carefully and make sure that all the information described here is included in your report.

Remember that it is possible to respond to a message containing too much information, but not to one containing too little. Often people omit facts because they think they know the cause of a problem and assume that some details don't matter. A good principle is: if you are in doubt about stating something, state it! It is a thousand times faster and less troublesome to write a couple of lines more in your report than to be forced to ask again and wait for the answer because you didn't include enough information the first time.

The most common errors are that people don't indicate the version number of the MySQL distribution they are using, or don't indicate what platform they have MySQL installed on (including the platform version number). This is highly relevant information and in 99 cases out of 100 the bug report is useless without it! Very often we get questions like ``Why doesn't this work for me?'' and then we find that the feature requested wasn't implemented in that MySQL version, or that a bug described in a report has been fixed already in newer MySQL versions. Sometimes the error is platform dependent; in such cases, it is next to impossible to fix anything without knowing the operating system and the version number of the platform.

Remember also to provide information about your compiler, if it is related to the problem. Often people find bugs in compilers and think the problem is MySQL related. Most compilers are under development all the time and become better version by version, too. To determine whether or not your problem depends on your compiler, we need to know what compiler is used. Note that every compiling problem should be regarded as a bug report and reported accordingly.

It is most helpful when a good description of the problem is included in the bug report. That is, a good example of all the things you did that led to the problem and the problem itself exactly described. The best reports are those that include a full example showing how to reproduce the bug or problem.

If a program produces an error message, it is very important to include the message in your report! If we try to search for something from the archives using programs, it is better that the error message reported exactly matches the one that the program produces. (Even the case sensitivity should be observed!) You should never try to remember what the error message was; instead, copy and paste the entire message into your report!

If you have a problem with MyODBC, you should try to genereate a MyODBC trace file. 16.6 Reporting problems with MyODBC

Please include the following information in your report:

  • The version number of the MySQL distribution you are using (for example, MySQL 3.22.22). You can find out which version you are running by executing mysqladmin version. mysqladmin can be found in the `bin' directory under your MySQL installation directory.
  • The manufacturer and model of the machine you are working on.
  • The operating system name and version. For most operating systems, you can get this information by executing the Unix command uname -a.
  • Sometimes the amount of memory (real and virtual) is relevant. If in doubt, include these values.
  • If you are using a source distribution of MySQL, the name and version number of the compiler used is needed. If you have a binary distribution, the distribution name is needed.
  • If the problem occurs during compilation, include the exact error message(s) and also a few lines of context around the offending code in the file where the error occurred.
  • If any database table is related to the problem, include the output from mysqldump --no-data db_name tbl_name1 tbl_name2 ... This is very easy to do and is a powerful way to get information about any table in a database that will help us create a situation matching the one you have.
  • For speed-related bugs or problems with SELECT statements, you should always include the output of EXPLAIN SELECT ..., and at least the number of rows that the SELECT statement produces. The more information you give about your situation, the more likely it is that someone can help you! For example, the following is an example of a very good bug report (it should of course be posted with the mysqlbug script): Example run under the mysql command line tool:
    mysql> SHOW VARIABLES;
    mysql> EXPLAIN SELECT ...
           <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>
    
  • If a bug or problem occurs while running MySQL, try to provide an input script that will reproduce the anomaly. This script should include any necessary source files. The more closely the script can reproduce your situation, the better. If you can't provide a script, you should at least include the output from mysqladmin variables extended-status processlist in your mail to provide some information of how your system is performing!
  • If you think that MySQL produces a strange result from a query, include not only the result, but also your opinion of what the result should be and an account describing the basis for your opinion.
  • When giving an example of the problem, it's better to use the variable names, table names, etc., that exist in your actual situation than to come up with new names. The problem could be related to the name of a variable, table, etc.! These cases are rare, perhaps, but it is better to be safe than sorry. After all, it should be easier for you to provide an example that uses your actual situation and it is by all means better for us. In case you have data you don't want to show to others, you can use ftp to transfer it to ftp://www.mysql.com/pub/mysql/secret/. If the data are really top secret and you don't want to show them even to us, then go ahead and provide an example using other names, but please regard this as the last choice.
  • Include all the options given to the relevant programs, if possible. For example, indicate the options that you use when you start the mysqld daemon and that you use to run any MySQL client programs. The options to programs like mysqld and mysql, and to the configure script are often keys to answers and very relevant! It is never a bad idea to include them anyway! If you use any modules, such as Perl or PHP, please include the version number(s) of those as well.
  • If you can't produce a test case in a few rows, or if the test table is too big to be mailed to the mailing list (more than 10 rows), you should dump your tables using mysqldump and create a `README' file that describes your problem. Create a compressed archive of your files using tar and gzip or zip, and use ftp to transfer the archive to ftp://www.mysql.com/pub/mysql/secret/. Then send a short description of the problem to mysql@lists.mysql.com.
  • If your question is related to the privilege system, please include the output of mysqlaccess, the output of mysqladmin reload and all the error messages you get when trying to connect! When you test your privileges, you should first run mysqlaccess. After this, execute mysqladmin reload version, and last you should try to connect with the program that gives you trouble. mysqlaccess can be found in the `bin' directory under your MySQL installation directory.
  • If you have a patch for a bug, that is good. But don't assume the patch is all we need or that we will use it even if you don't provide some necessary information such as test cases showing the bug that your patch fixes. We might find problems with your patch or we might not understand it at all; if so, we can't use it. If we can't verify exactly what the patch is meant for, we won't use it. Test cases will help us here. Show that the patch will handle all the situations that may occur. If we find a borderline case (even a rare one) where the patch won't work, the patch may be useless.
  • Guesses about what the bug is, why it occurs, or what it depends on, are usually wrong. Even we can't guess such things without first using a debugger to determine the real cause of a bug.
  • Indicate in your mail message that you have checked the reference manual and mail archive so others know that you have tried to solve your problem yourself.
  • If you get a parse error, please check your syntax closely! If you can't find something wrong with it, it's extremely likely that your current version of MySQL doesn't support the query you are using. If you are using the current version and the manual at http://www.mysql.com/doc.html doesn't cover the syntax you are using, MySQL doesn't support your query. In this case, your only options are to implement the syntax yourself or email If the manual covers the syntax you are using, but you have an older version of MySQL, you should check the MySQL change history to see when the syntax was implemented. D MySQL change history. In this case, you have the option of upgrading to a newer version of MySQL.
  • If you have a problem such that your data appears corrupt or you get errors when you access some particular table, you should first check and then try repairing your tables with isamchk. 13 Maintaining a MySQL installation.
  • If you often get corrupted tables you should try to find out when and why this happens! In this case, the `mysql-data-directory/'hostname'.err' file may contain some information about what happened. Please include any relevant information from this file in your bug report! Normally mysqld should NEVER crash a table if nothing killed it in the middle of an update! If you can find the source of why mysqld dies, it's much easier for us to provide you with a fix for the problem!
  • If possible, download the most recent version of MySQL and check whether or not it solves your problem. All versions of MySQL are thoroughly tested and should work without problems! We believe in making everything as backward compatible as possible and you should be able to switch MySQL versions in minutes! 4.3 Which MySQL version to use.

If you are a support customer, please cross-post the bug report to the appropriate mailing list to see if someone else has experienced (and perhaps solved) the problem.

For information on reporting bugs in MyODBC, see 16.2 How to report problems with MyODBC.

For solutions to some common problems, see 18 Problems and common errors.

When answers are sent to you individually and not to the mailing list, it is considered good etiquette to summarize the answers and send the summary to the mailing list so that others may have the benefit of responses you received that helped you solve your problem!