Online Documentation Server
 ПОИСК
ods.com.ua Web
 КАТЕГОРИИ
Home
Programming
Net technology
Unixes
Security
RFC, HOWTO
Web technology
Data bases
Other docs

 РЕКЛАМА

 ПОДПИСКА

 ССЫЛКИ
Colocation
Скоростной интернет
Бесплатный интернет
Wi-Fi
Работа в Киеве
Доставка цветов
Мобильные телефоны
VoIP Billing
Музыка и фильмы
AS numbers, IP addresses
Строительные материалы, кирпич, цемент
Flowers delivery Kiev

 АНКЕТА
Как Вам ODS?

 О КОПИРАЙТАХ
Вся предоставленная на этом сервере информация собрана нами из разных источников. Если Вам кажется, что публикация каких-то документов нарушает чьи-либо авторские права, сообщите нам об этом.

 РЕКЛАМА

[Links] [Работа в Киеве] [mp3] [Рефераты] [WiFiver.com

Contents | Next

1 General Information about MySQL

This is the MySQL reference manual; it documents MySQL version 3.22.29.

MySQL is a very fast, multi-threaded, multi-user and robust SQL (Structured Query Language) database server.

For Unix and OS/2 platforms, MySQL is basically free; for Microsoft platforms you must get a MySQL license after a trial time of 30 days. See section 3 MySQL licensing and support.

The MySQL home page provides the latest information about MySQL.

For a discussion of MySQL's capabilities, see section 1.5 The main features of MySQL.

For installation instructions, see section 4 Installing MySQL. For tips on porting MySQL to new machines or operating systems, see section G Comments on porting to other systems.

For information about upgrading from a 3.21 release, see section 4.16.2 Upgrading from a 3.21 version to 3.22.

For a tutorial introduction to MySQL, see section 8 MySQL Tutorial.

For examples of SQL and benchmarking information, see the benchmarking directory ('sql-bench' in the distribution).

For a history of new features and bug fixes, see section D MySQL change history.

For a list of currently known bugs and misfeatures, see section E Known errors and design deficiencies in MySQL.

For future plans, see section F List of things we want to add to MySQL in the future (The TODO).

For a list of all the contributors to this project, see section C Contributors to MySQL.

IMPORTANT:

Send bug (error) reports, questions and comments to the mailing list at

For source distributions, the mysqlbug script can be found in the 'scripts' directory. For binary distributions, mysqlbug can be found in the 'bin' directory.

If you have any suggestions concerning additions or corrections to this manual, please send them to the manual team at (docs@mysql.com).

1.1 What is MySQL?

MySQL is a true multi-user, multi-threaded SQL database server. SQL (Structured Query Language) is the most popular and standardized database language in the world. MySQL is a client/server implementation that consists of a server daemon mysqld and many different client programs and libraries.

SQL is a standardized language that makes it easy to store, update and access information. For example, you can use SQL to retrieve product information and store customer information for a web site. MySQL is also fast and flexible enough to allow you to store logs and pictures in it.

The main goals of MySQL are speed, robustness and ease of use. MySQL was originally developed because we needed a SQL server that could handle very large databases an order of magnitude faster than what any database vendor could offer to us on inexpensive hardware. We have now been using MySQL since 1996 in an environment with more than 40 databases containing 10,000 tables, of which more than 500 have more than 7 million rows. This is about 100 gigabytes of mission-critical data.

The base upon which MySQL is built is a set of routines that have been used in a highly demanding production environment for many years. Although MySQL is still under development, it already offers a rich and highly useful function set.

The official way to pronounce MySQL is "My Ess Que Ell" (Not MY-SEQUEL).

1.2 About this manual

This manual is currently available in Texinfo, plain text, Info, HTML, PostScript and PDF versions. Because of their size, PostScript and PDF versions are not included with the main MySQL distribution, but are available for separate download at http://www.mysql.com.

The primary document is the Texinfo file. The HTML version is produced automatically with a modified version of texi2html. The plain text and Info versions are produced with makeinfo. The Postscript version is produced using texi2dvi and dvips. The PDF version is produced with pdftex.

This manual is written and maintained by David Axmark, Michael (Monty) Widenius, Paul DuBois and Kim Aldale. For other contributors, see section C Contributors to MySQL.

1.2.1 Conventions used in this manual

This manual uses certain typographical conventions:

constant
Constant-width font is used for command names and options; SQL statements; database, table and column names; C and Perl code; and environment variables. Example: "To see how mysqladmin works, invoke it with the --help option."
'filename'
Constant-width font with surrounding quotes is used for filenames and pathnames. Example: "The distribution is installed under the '/usr/local/' directory."
'c'
Constant-width font with surrounding quotes is also used to indicate character sequences. Example: "To specify a wildcard, use the '%' character."
italic
Italic font is used for emphasis, like this.
boldface
Boldface font is used for access privilege names (e.g., "do not grant the process privilege lightly") and to convey especially strong emphasis.

When commands are shown that are meant to be executed by a particular program, the program is indicated by the prompt shown with the command. For example, shell> indicates a command that you execute from your login shell, and mysql> indicates a command that you execute from the mysql client:

shell> type a shell command here
mysql> type a mysql command here

Shell commands are shown using Bourne shell syntax. If you are using a csh-style shell, you may need to issue commands slightly differently. For example, the sequence to set an environment variable and run a command looks like this in Bourne shell syntax:

shell> VARNAME=value some_command

For csh, you would execute the sequence like this:

shell> setenv VARNAME value
shell> some_command

Database, table and column names often must be substituted into commands. To indicate that such substitution is necessary, this manual uses db_name, tbl_name and col_name. For example, you might see a statement like this:

mysql> SELECT col_name FROM db_name.tbl_name;

This means that if you were to enter a similar statement, you would supply your own database, table and column names, perhaps like this:

mysql> SELECT author_name FROM biblio_db.author_list;

SQL statements may be written in uppercase or lowercase. When this manual shows a SQL statement, uppercase is used for particular keywords if those keywords are under discussion (to emphasize them) and lowercase is used for the rest of the statement. So you might see the following in a discussion of the SELECT statement:

mysql> SELECT count(*) FROM tbl_name;

On the other hand, in a discussion of the COUNT() function, the statement would be written like this:

mysql> select COUNT(*) from tbl_name;

If no particular emphasis is intended, all keywords are written uniformly in uppercase.

In syntax descriptions, square brackets ('[' and ']') are used to indicate optional words or clauses:

DROP TABLE [IF EXISTS] tbl_name

When a syntax element consists of a number of alternatives, the alternatives are separated by vertical bars ('|'). When one member from a set of choices may be chosen, the alternatives are listed within square brackets. When one member from a set of choices must be chosen, the alternatives are listed within braces ('{' and '}'):

TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)
{DESCRIBE | DESC} tbl_name {col_name | wild}

1.3 History of MySQL

We once started off with the intention of using mSQL to connect to our tables using our own fast low-level (ISAM) routines. However, after some testing we came to the conclusion that mSQL was not fast enough or flexible enough for our needs. This resulted in a new SQL interface to our database but with almost the same API interface as mSQL. This API was chosen to ease porting of third-party code.

The derivation of the name MySQL is not perfectly clear. Our base directory and a large number of our libraries and tools have had the prefix "my" for well over 10 years. However, Monty's daughter (some years younger) is also named My. So which of the two gave its name to MySQL is still a mystery, even for us.

1.4 Books about MySQL

While this manual is still the right place for up to date techical information, its primary goal is to contain everything there is to know about MySQL. And it is sometimes nice to have a bound book to read in bed or while you travel. Here are a list of books about MySQL (in English).

Title MySQL
Publisher New Riders
Author Paul DuBois
Pub Date 1st Edition December 1999
ISBN 0735709211
Pages 800
Price $49.99 US

Foreword by Michael "Monty" Widenius, MySQL Moderator

In MySQL, Paul DuBois provides you with a comprehensive guide to one of the most popular relational database systems. Paul has contributed to the online documentation for MySQL, and is an active member of the MySQL community. The principal MySQL developer, Monty Widenius, and a network of his fellow developers reviewed the manuscript, providing Paul with the kind of insight no one else could supply.

Instead of merely giving you a general overview of MySQL, Paul teaches you how to make the most of its capabilities. Through two sample database applications that run throughout the book, he gives you solutions to problems you're sure to face. He helps you integrate MySQL efficiently with third-party tools, such as PHP and Perl, enabling you to generate dynamic Web pages through database queries. He teaches you to write programs that access MySQL databases, and also provides a comprehensive set of references to column types, operators, functions, SQL syntax, MySQL programming, C API, Perl DBI, and PHP API. MySQL simply gives you the kind of information you won't find anywhere else.

If you use MySQL, this book provides you with:

  • An introduction to MySQL and SQL
  • Coverage of MySQL's data types and how to use them
  • Thorough treatment of how to write client programs in C
  • A guide to using the Perl DBI and PHP APIs for developing command-line and Web-based applications
  • Tips on administrative issues such as user accounts, backup, crash recovery, and security
  • Help in choosing an ISP for MySQL access
  • A comprehensive reference for MySQL's data types, operators, functions, and SQL statements and utilities
  • Complete reference guides for MySQL's C API, the Perl DBI API, and PHP's MySQL-related functions
Title MySQL & mSQL
Publisher O'Reilly
Authors Randy Jay Yarger, George Reese & Tim King
Pub Date 1st Edition July 1999
ISBN 1-56592-434-7, Order Number: 4347
Pages 506
Price $34.95

This book teaches you how to use MySQL and mSQL, two popular and robust database products that support key subsets of SQL on both Linux and UNIX systems. Anyone who knows basic C, Java, Perl, or Python can write a program to interact with a database, either as a stand-alone application or through a Web page. This book takes you through the whole process, from installation and configuration to programming interfaces and basic administration. Includes ample tutorial material.

1.5 The main features of MySQL

The following list describes some of the important characteristics of MySQL:

  • Fully multi-threaded using kernel threads. That means it easily can use multiple CPUs if available.
  • C, C++, Eiffel, Java, Perl, PHP, Python and TCL APIs. See section 20 MySQL client tools and APIs.
  • Works on many different platforms. See section 4.2 Operating systems supported by MySQL.
  • Many column types: signed/unsigned integers 1, 2, 3, 4 and 8 bytes long, FLOAT, DOUBLE, CHAR, VARCHAR, TEXT, BLOB, DATE, TIME, DATETIME, TIMESTAMP, YEAR, SET and ENUM types. See section 7.3 Column types.
  • Very fast joins using an optimized one-sweep multi-join.
  • Full operator and function support in the SELECT and WHERE parts of queries. Example:
    mysql> SELECT CONCAT(first_name, " ", last_name) FROM tbl_name
     WHERE income/dependents > 10000 AND age > 30;
    
  • SQL functions are implemented through a highly-optimized class library and should be as fast as they can get! Usually there shouldn't be any memory allocation at all after query initialization.
  • Full support for SQL GROUP BY and ORDER BY clauses. Support for group functions (COUNT(), COUNT(DISTINCT), AVG(), STD(), SUM(), MAX() and MIN()).
  • Support for LEFT OUTER JOIN with ANSI SQL and ODBC syntax.
  • You can mix tables from different databases in the same query (as of version 3.22).
  • A privilege and password system which is very flexible and secure, and which allows host-based verification. Passwords are secure since all password traffic when connecting to a server is encrypted.
  • ODBC (Open-DataBase-Connectivity) for Windows95 (with source). All ODBC 2.5 functions and many others. You can, for example, use Access to connect to your MySQL server. See section 16 MySQL ODBC Support.
  • Very fast B-tree disk tables with index compression.
  • 16 indexes per table are allowed. Each index may consist of 1 to 16 columns or parts of columns. The maximum index length is 256 bytes (this may be changed when compiling MySQL). An index may use a prefix of a CHAR or VARCHAR field.
  • Fixed-length and variable-length records.
  • In-memory hash tables which are used as temporary tables.
  • Handles large databases. We are using MySQL with some databases that contain 50,000,000 records.
  • All columns have default values. You can use INSERT to insert a subset of a table's columns; those columns that are not explicitly given values are set to their default values.
  • Uses GNU Automake, Autoconf, and libtool for portability.
  • Written in C and C++. Tested with a broad range of different compilers.
  • A very fast thread-based memory allocation system.
  • No memory leaks. Tested with a commercial memory leakage detector (purify).
  • Includes myisamchk, a very fast utility for table checking, optimization and repair. See section 13 Maintaining a MySQL installation.
  • Full support for the ISO-8859-1 Latin1 character set. For example, the Scandinavian characters @ringaccent{a}, @"a and @"o are allowed in table and column names.
  • All data are saved in ISO-8859-1 Latin1 format. All comparisons for normal string columns are case insensitive.
  • Sorting is done according to the ISO-8859-1 Latin1 character set (the Swedish way at the moment). It is possible to change this in the source by adding new sort order arrays. To see an example of very advanced sorting, look at the Czech sorting code. MySQL supports many different character sets that can be specified at compile time.
  • Aliases on tables and columns as in the SQL92 standard.
  • DELETE, INSERT, REPLACE, and UPDATE return how many rows were changed (affected).
  • Function names do not clash with table or column names. For example, ABS is a valid column name. The only restriction is that for a function call, no spaces are allowed between the function name and the '(' that follows it. See section 7.31 Is MySQL picky about reserved words?.
  • All MySQL programs can be invoked with the --help or -? options to obtain online assistance.
  • The server can provide error messages to clients in many languages. See section 9.1 What languages are supported by MySQL?.
  • Clients connect to the MySQL server using TCP/IP connections or Unix sockets, or named pipes under NT.
  • The MySQL-specific SHOW command can be used to retrieve information about databases, tables and indexes. The EXPLAIN command can be used to determine how the optimizer resolves a query.

1.6 How stable is MySQL?

This section addresses the questions, "how stable is MySQL?" and, "can I depend on MySQL in this project?" Here we will try to clarify some issues and to answer some of the more important questions that seem to concern many people. This section has been put together from information gathered from the mailing list (which is very active in reporting bugs).

At TcX, MySQL has worked without any problems in our projects since mid-1996. When MySQL was released to a wider public, we noticed that there were some pieces of "untested code" that were quickly found by the new users who made queries in a manner different than our own. Each new release has had fewer portability problems than the previous one (even though each has had many new features), and we hope that it will be possible to label one of the next releases "stable".

Each release of MySQL has been usable and there have been problems only when users start to use code from "the gray zones". Naturally, outside users can't know what the gray zones are; this section attempts to indicate those that are currently known. The descriptions deal with the 3.22.x version of MySQL. All known and reported bugs are fixed in the latest version, with the exception of the bugs listed in the bugs section, which are things that are "design"-related. See section E Known errors and design deficiencies in MySQL.

MySQL is written in multiple layers and different independent modules. These modules are listed below with an indication of how well-tested each of them is:

The ISAM table handler -- Stable
This manages storage and retrieval of all data in MySQL 3.22 and earlier versions. In all MySQL releases there hasn't been a single (reported) bug in this code. The only known way to get a corrupted table is to kill the server in the middle of an update. Even that is unlikely to destroy any data beyond rescue, because all data are flushed to disk between each query. There hasn't been a single bug report about lost data because of bugs in MySQL, either.
The MyISAM table handler -- Beta
This is new in MySQL 3.23. It's largely based on the ISAM table code but has a lot of new very useful features.
The parser and lexical analyser -- Stable
There hasn't been a single reported bug in this system for a long time.
The C client code -- Stable
No known problems. In early 3.20 releases, there were some limitations in the send/receive buffer size. As of 3.21.x, the buffer size is now dynamic up to a default of 24M.
Standard client programs -- Stable
These include mysql, mysqladmin and mysqlshow, mysqldump, and mysqlimport.
Basic SQL -- Stable
The basic SQL function system and string classes and dynamic memory handling. Not a single reported bug in this system.
Query optimizer -- Stable
Range optimizer -- Gamma
Join optimizer -- Stable
Locking -- Gamma
This is very system-dependent. On some systems there are big problems using standard OS locking (fcntl()). In these cases, you should run the MySQL daemon with the --skip-locking flag. Problems are known to occur on some Linux systems and on SunOS when using NFS-mounted file systems.
Linux threads -- Gamma
The only problem found has been with the fcntl() call, which is fixed by using the --skip-locking option to mysqld. Some people have reported lockup problems with the 0.5 release.
Solaris 2.5+ pthreads -- Stable
We use this for all our production work.
MIT-pthreads (Other systems) -- Gamma
There have been no reported bugs since 3.20.15 and no known bugs since 3.20.16. On some systems, there is a "misfeature" where some operations are quite slow (a 1/20 second sleep is done between each query). Of course, MIT-pthreads may slow down everything a bit, but index-based SELECT statements are usually done in one time frame so there shouldn't be a mutex locking/thread juggling.
Other thread implementions -- Alpha - Beta
The ports to other systems are still very new and may have bugs, possibly in MySQL, but most often in the thread implementation itself.
LOAD DATA ..., INSERT ... SELECT -- Stable
Some people have thought they have found bugs here, but these usually have turned out to be misunderstandings. Please check the manual before reporting problems!
ALTER TABLE -- Stable
Small changes in 3.22.12.
DBD -- Stable
Now maintained by Jochen Wiedmann
mysqlaccess -- Stable
Written and maintained by Yves Carlier
GRANT -- Gamma
Big changes made in MySQL 3.22.12.
MyODBC (uses ODBC SDK 2.5) -- Gamma
It seems to work well with some programs.

TcX provides email support for paying customers, but the MySQL mailing list usually provides answers to common questions. Bugs are usually fixed right away with a patch; for serious bugs, there is almost always a new release.

1.7 Year 2000 compliance

MySQL itself has no problems with Year 2000 (Y2K) compliance:

  • MySQL uses Unix time functions and has no problems with dates until 2069; all 2-digit years are regarded to be in the range 1970 to 2069, which means that if you store 01 in a year column, MySQL treats it as 2001.
  • All MySQL date functions are stored in one file 'sql/time.cc' and coded very carefully to be year 2000-safe.
  • In MySQL 3.22 and later versions, the new YEAR column type can store years 0 and 1901 to 2155 in 1 byte and display them using 2 or 4 digits.

You may run into problems with applications that use MySQL in a way that is not Y2K-safe. For example, many old applications store or manipulate years using 2-digit values (which are ambiguous) rather than 4-digit values. This problem may be compounded by applications that use values such as 00 or 99 as "missing" value indicators.

Unfortunately, these problems may be difficult to fix, since different applications may be written by different programmers, each of whom may use a different set of conventions and date-handling functions.

Here is a simple demonstration illustrating that MySQL doesn't have any problems with dates until the year 2030!

mysql> DROP TABLE IF EXISTS y2k;
mysql> CREATE TABLE y2k (date date, date_time datetime, time_stamp timestamp);
mysql> INSERT INTO y2k VALUES ("1998-12-31","1998-12-31 23:59:59",19981231235959);
mysql> INSERT INTO y2k VALUES ("1999-01-01","1999-01-01 00:00:00",19990101000000);
mysql> INSERT INTO y2k VALUES ("1999-09-09","1999-09-09 23:59:59",19990909235959);
mysql> INSERT INTO y2k VALUES ("2000-01-01","2000-01-01 00:00:00",20000101000000);
mysql> INSERT INTO y2k VALUES ("2000-02-28","2000-02-28 00:00:00",20000228000000);
mysql> INSERT INTO y2k VALUES ("2000-02-29","2000-02-29 00:00:00",20000229000000);
mysql> INSERT INTO y2k VALUES ("2000-03-01","2000-03-01 00:00:00",20000301000000);
mysql> INSERT INTO y2k VALUES ("2000-12-31","2000-12-31 23:59:59",20001231235959);
mysql> INSERT INTO y2k VALUES ("2001-01-01","2001-01-01 00:00:00",20010101000000);
mysql> INSERT INTO y2k VALUES ("2004-12-31","2004-12-31 23:59:59",20041231235959);
mysql> INSERT INTO y2k VALUES ("2005-01-01","2005-01-01 00:00:00",20050101000000);
mysql> INSERT INTO y2k VALUES ("2030-01-01","2030-01-01 00:00:00",20300101000000);
mysql> INSERT INTO y2k VALUES ("2050-01-01","2050-01-01 00:00:00",20500101000000);
mysql> SELECT * FROM y2k;
+------------+---------------------+----------------+
| date       | date_time           | time_stamp     |
+------------+---------------------+----------------+
| 1998-12-31 | 1998-12-31 23:59:59 | 19981231235959 |
| 1999-01-01 | 1999-01-01 00:00:00 | 19990101000000 |
| 1999-09-09 | 1999-09-09 23:59:59 | 19990909235959 |
| 2000-01-01 | 2000-01-01 00:00:00 | 20000101000000 |
| 2000-02-28 | 2000-02-28 00:00:00 | 20000228000000 |
| 2000-02-29 | 2000-02-29 00:00:00 | 20000229000000 |
| 2000-03-01 | 2000-03-01 00:00:00 | 20000301000000 |
| 2000-12-31 | 2000-12-31 23:59:59 | 20001231235959 |
| 2001-01-01 | 2001-01-01 00:00:00 | 20010101000000 |
| 2004-12-31 | 2004-12-31 23:59:59 | 20041231235959 |
| 2005-01-01 | 2005-01-01 00:00:00 | 20050101000000 |
| 2030-01-01 | 2030-01-01 00:00:00 | 20300101000000 |
| 2050-01-01 | 2050-01-01 00:00:00 | 00000000000000 |
+------------+---------------------+----------------+

13 rows in set (0.00 sec)

This shows that the DATE and DATETIME types are will not give any problems with future dates (they handle dates until the year 9999).

The TIMESTAMP type, that is used to store the current time, has a range up to only 2030-01-01. TIMESTAMP has a range of 1970 to 2030 on 32-bit machines (signed value). On 64-bit machines it handles times up to 2106 (unsigned value).

Even though MySQL is Y2K-compliant, it is your responsibility to provide unambiguous input. See section 7.3.6.1 Y2K issues and date types for MySQL's rules for dealing with ambiguous date input data (data containing 2-digit year values).

1.8 General SQL information and tutorials

This book has been recommended by a several people on the MySQL mailing list:

Judith S. Bowman, Sandra L. Emerson and Marcy Darnovsky
The Practical SQL Handbook: Using Structured Query Language
Second Edition
Addison-Wesley
ISBN 0-201-62623-3
http://www.awl.com

This book has also received some recommendations by MySQL users:

Martin Gruber
Understanding SQL
ISBN 0-89588-644-8
Publisher Sybex 510 523 8233
Alameda, CA USA

A SQL tutorial is available on the net at http://www.geocities.com/SiliconValley/Vista/2207/sql1.html

SQL in 21 Tagen (online book in German language): http://www.mut.de/leseecke/buecher/sql/inhalt.htm

1.9 Useful MySQL-related links

1.9.1 Tutorials

1.9.2 Porting MySQL / Using MySQL on different systems

1.9.3 Perl related links

1.9.4 MySQL discussion forums

1.9.5 Commercial applications that support MySQL

1.9.6 SQL Clients/Report writers

1.9.7 Web development tools that support MySQL

1.9.8 Databse design tools with MySQL support

1.9.9 Web servers with MySQL tools

1.9.10 Extensions for other programs

1.9.11 Using MySQL with other programs

1.9.12 ODBC related links

1.9.13 API related links

1.9.14 Other MySQL-related links

1.9.15 SQL and database interfaces

1.9.16 Examples of MySQL use

1.9.17 General database links

There are also many web pages that use MySQL. See section A Some MySQL users. Send any additions to this list to MySQL logo somewhere (It is okay to have it on a "used tools" page or something similar) to be added.

2 MySQL mailing lists and how to ask questions or report errors (bugs)

2.1 The MySQL mailing lists

To subscribe to the main MySQL mailing list, send a message to the electronic mail address mysql-subscribe@lists.mysql.com.

To unsubscribe from the main MySQL mailing list, send a message to the electronic mail address mysql-unsubscribe@lists.mysql.com.

Only the address to which you send your messages is significant. The subject line and the body of the message are ignored.

If your reply address is not valid, you can specify your address explicitly. Adding a hyphen to the subscribe or unsubscribe command word, followed by your address with the '@' character in your address replaced by a '='. For example, to subscribe john@host.domain, send a message to mysql-subscribe-john=host.domain@lists.mysql.com.

Mail to mysql-subscribe@lists.mysql.com or ezmlm mailing list processor. Information about ezmlm is available at the ezmlm Website.

To post a message to the list itself, send your message to mysql@lists.mysql.com. However, please do not send mail about subscribing or unsubscribing to mysql@lists.mysql.com, since any mail sent to that address is distributed automatically to thousands of other users.

Your local site may have many subscribers to mysql@lists.mysql.com. If so, it may have a local mailing list, so that messages sent from lists.mysql.com to your site are propagated to the local list. In such cases, please contact your system administrator to be added to or dropped from the local MySQL list.

The following MySQL mailing lists exist:

announce
This is for announcement of new versions of MySQL and related programs. This is a low volume list that we think all MySQL users should be on.
mysql
The main list for general MySQL discussion. Please note that some topics are better discussed on the more-specialized lists. If you post to the wrong list, you may not get an answer!
mysql-digest
The mysql list in digest form. That means you get all individual messages, sent as one large mail message once a day.
java
Discussion about MySQL and Java. Mostly about the JDBC drivers.
java-digest
A digest version of the java list.
win32
All things concerning MySQL on Microsoft operating systems such as Windows NT.
win32-digest
A digest version of the win32 list.
myodbc
All things concerning connecting to MySQL with ODBC.
myodbc-digest
A digest version of the myodbc list.
msql-mysql-modules
A list about the Perl support in MySQL.
msql-mysql-modules-digest
A digest version of the msql-mysql-modules list.
developer
A list for people who work on the MySQL code.
developer-digest
A digest version of the developer list.

You subscribe or unsubscribe to all lists in the same way as described above. In your subscribe or unsubscribe message, just put the appropriate mailing list name rather than mysql. For example, to subscribe to or unsubscribe from the myodbc list, send a message to

2.2 Asking questions or reporting bugs

Before posting a bug report or question, please do the following:

If you can't find an answer in the manual or the archives, check with your local MySQL expert. If you still can't find an answer to your question, go ahead and read the next section about how to send mail to

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. See section 16.6 Reporting problems with MyODBC.

Please remember that many of the people who will read your report will do so using an 80-column display. When generating reports or examples using the mysql command line tool, you should therefore use the --vertical option (or the \G statement terminator) for output which would exceed the available width for such a display (for example, with the EXPLAIN SELECT statement; see the example below).

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 using the mysql command line tool (note the use of the \G statement terminator for statements whose output width would otherwise exceed that of an 80-column display device):
    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>
    
  • 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. See section 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 myisamchk. See section 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! See section 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 section 16.2 How to report problems with MyODBC.

For solutions to some common problems, see See section 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!

2.4 Guidelines for answering questions on the mailing list

If you consider your answer to have broad interest, you may want to post it to the mailing list instead of replying directly to the individual who asked. Try to make your answer general enough that people other than the original poster may benefit from it. When you post to the list, please make sure that your answer is not a duplication of a previous answer.

Try to summarize the essential part of the question in your reply; don't feel obliged to quote the entire original message.

Please don't post mail messages from your browser with HTML mode turned on! Many users doesn't read mail with a browser!

3 MySQL licensing and support

This chapter describes MySQL licensing and support arrangements, including:

3.1 MySQL licensing policy

The formal terms of the license for non-Microsoft operating systems such as Unix or OS/2 are specified in section J The MySQL server license for non Microsoft operating systems. Basically, our licensing policy is as follows:

  • For normal internal use, MySQL generally costs nothing. You do not have to pay us if you do not want to.
  • A license is required if:
    • You sell the MySQL server directly or as a part of another product or service
    • You charge for installing and maintaining a MySQL server at some client site
    • You include MySQL in a distribution that is non redistributable and you charge for some part of that distribution
  • For circumstances under which a MySQL license is required, you need a license per machine that runs the mysqld server. However, a multiple-CPU machine counts as a single machine, and there is no restriction on the number of MySQL servers that run on one machine, or on the number of clients concurrently connected to a server running on that machine!
  • You do not need a license to include client code in commercial programs. The client access part of MySQL is in the public domain. The mysql command line client includes code from the readline library that is under the GNU Public License.
  • For customers who have purchased 1 license or MySQL support, we provide additional functionality. Currently, this means we provide the myisampack utility for creating fast compressed read-only databases. (The server includes support for reading such databases but not the packing tool used to create them.) When support agreements generate sufficient revenue, we will release this tool under the same license as the MySQL server.
  • If your use of MySQL does not require a license, but you like MySQL and want to encourage further development, you are certainly welcome to purchase a license anyway.
  • If you use MySQL in a commercial context such that you profit by its use, we ask that you further the development of MySQL by purchasing some level of support. We feel that if MySQL helps your business, it is reasonable to ask that you help MySQL. (Otherwise, if you ask us support questions, you are not only using for free something into which we've put a lot a work, you're asking us to provide free support, too.)

For use under Microsoft operating systems (Win95/Win98/WinNT), you need a MySQL license after a trial period of 30 days, with the exception that licenses may be obtained upon request at no cost for educational use or for university- or government-sponsored research settings. See section K The MySQL license for Microsoft operating systems. A shareware version of MySQL-Win32 that you can try before buying is available at http://www.mysql.com/mysql_w32.htmy. After you have paid, you will get a password that will enable you to access the newest MySQL-Win32 version.

If you have any questions as to whether or not a license is required for your particular use of MySQL, please contact us. See section 3.5.2 Contact information.

If you require a MySQL license, the easiest way to pay for it is to use the license form at TcX's secure server at https://www.mysql.com/license.htmy. Other forms of payment are discussed in section 3.5.1 Payment information.

3.2 Copyrights used by MySQL

There are several different copyrights on the MySQL distribution:

  1. The MySQL-specific source needed to build the mysqlclient library and programs in the 'client' directory is in the public domain. Each file that is in the public domain has a header which clearly states so. This includes everything in the 'client' directory and some parts of the mysys, mystring and dbug libraries.
  2. Some small parts of the source (GNU getopt) are covered by the "GNU LIBRARY LIBRARY GENERAL PUBLIC LICENSE". See the 'mysys/COPYING.LIB' file.
  3. Some small parts of the source (GNU readline) are covered by the "GNU GENERAL PUBLIC LICENSE". See the 'readline/COPYING' file.
  4. Some parts of the source (the regexp library) are covered by a Berkeley style copyright.
  5. The other source needed for the MySQL server on non-Microsoft platforms is covered by the "MySQL FREE PUBLIC LICENSE", which is based on the "Aladdin FREE PUBLIC LICENSE." See section J The MySQL server license for non Microsoft operating systems. When running MySQL on any Microsoft operating system, other licensing applies.

The following points set forth the philosophy behind our copyright policy:

  • The SQL client library should be totally free so that it can be included in commercial products without limitations.
  • People who want free access to the software into which we have put a lot of work can have it, so long as they do not try to make money directly by distributing it for profit.
  • People who want the right to keep their own software proprietary, but also want the value from our work, can pay for the privilege.
  • That means normal in-house use is FREE. But if you use MySQL for something important to you, you may want to help further its development by purchasing a license or a support contract. See section 3.6 Types of commercial support.

3.2.1 Possible future copyright changes

We may choose to distribute older versions of MySQL with the GPL in the future. However, these versions will be identified as GNU MySQL. Also, all copyright notices in the relevant files will be changed to the GPL.

3.3 Distributing MySQL commercially

This section is a clarification of the license terms that are set forth in the "MySQL FREE PUBLIC LICENSE" (FPL). See section J The MySQL server license for non Microsoft operating systems.

MySQL may be used freely, including by commercial entities for evaluation or unsupported internal use. However, distribution for commercial purposes of MySQL, or anything containing or derived from MySQL in whole or in part, requires a written commercial license from TcX AB, the sole entity authorized to grant such licenses.

You may not include MySQL "free" in a package containing anything for which a charge is being made, except as noted below.

The intent of the exception provided in the second clause of the license is to allow commercial organizations operating an FTP server or a bulletin board to distribute MySQL freely from it, provided that:

  1. The organization complies with the other provisions of the FPL, which include among other things a requirement to distribute the full source code of MySQL and of any derived work, and to distribute the FPL itself along with MySQL;
  2. The only charge for downloading MySQL is a charge based on the distribution service and not one based on the content of the information being retrieved (i.e., the charge would be the same for retrieving a random collection of bits of the same size);
  3. The server or BBS is accessible to the general public, i.e., the phone number or IP address is not kept secret, and anyone may obtain access to the information (possibly by paying a subscription or access fee that is not dependent on or related to purchasing anything else).

If you want to distribute software in a commercial context that incorporates MySQL and you do not want to meet these conditions, you should contact TcX AB to find out about commercial licensing, which involves a payment. The only ways you legally can distribute MySQL or anything containing MySQL are by distributing MySQL under the requirements of the FPL, or by getting a commercial license from TcX AB.

3.4 Example licensing situations

This section describes some situations illustrating whether or not you must license the MySQL server. Generally these examples involve providing MySQL as part of a product or service that you are selling to a customer, or requiring that MySQL be used in conjunction with your product. In such cases, it is your responsibility to obtain a license for the customer if one is necessary. (This requirement is waived if your customer already has a MySQL license. But the seller must send customer information and the license number to TcX, and the license must be a full license, not an OEM license.)

Note that a single MySQL license covers any number of CPUs/users/customers/mysqld servers on a machine!

3.4.1 Selling products that use MySQL

To determine whether or not you need a MySQL license when selling your application, you should ask whether the proper functioning of your application is contingent on the use of MySQL and whether you include MySQL with your product. There are several cases to consider:

  • Does your application require MySQL to function properly? If your product requires MySQL, you need a license for any machine that runs the mysqld server. For example, if you've designed your application around MySQL, then you've really made a commercial product that requires the engine, so you need a license. If your application does not require MySQL, you need not obtain a license. For example, if MySQL just added some new optional features to your product (such as adding logging to a database if MySQL is used rather than logging to a text file), it should fall within normal use, and a license would not be required. In other words, you need a license if you sell a product designed specifically for use with MySQL or that requires the MySQL server to function at all. This is true whether or not you provide MySQL for your client as part of your product distribution. It also depends on what you're doing for the client. Do you plan to provide your client with detailed instructions on installing MySQL with your software? Then your product may be contingent on the use of MySQL; if so, you need to buy a license. If you are simply tying into a database that you expect already to have been installed by the time your software is purchased, then you probably don't need a license.
  • Do you include MySQL in a distribution and charge for that distribution? If you include MySQL with a distribution that you sell to customers, you will need a license for any machine that runs the mysqld server, because in this case you are selling a system that includes MySQL. This is true whether the use of MySQL with your product is required or optional.
  • Do you neither require for your product nor include MySQL with it? Suppose you want to sell a product that is designed generally to use "some database" and that can be configured to use any of several supported alternative database systems (MySQL, PostgreSQL, or something else). That is, your product does not not require MySQL, but can support any database with a base level of functionality, and you don't rely on anything that only MySQL supports. Does one of you owe us money if your customer actually does choose to use MySQL? In this case, if you don't provide, obtain or set up MySQL for the customer should the customer decide to use it, neither of you need a license. If you do perform that service, see section 3.4.2 Selling MySQL-related services.

3.4.2 Selling MySQL-related services

If you perform MySQL installation on a client's machine and any money changes hands for the service (directly or indirectly), then you must buy a MySQL license.

If you sell an application for which MySQL is not strictly required but can be used, a license may be indicated, depending on how MySQL is set up. Suppose your product neither requires MySQL nor includes it in your product distribution, but can be configured to use MySQL for those customers who so desire. (This would be the case, for example, if your product can use any of a number of database engines.)

If the customer obtains and installs MySQL, no license is needed. If you perform that service for your customer, then a license is needed because then you are selling a service that includes MySQL.

3.4.3 ISP MySQL services

Internet Service Providers (ISPs) often host MySQL servers for their customers.

If you are an ISP that allows customers to install and administer MySQL for themselves on your machine with no assistance from you, neither you nor your customer need a MySQL license.

If you charge for MySQL installation and administrative support as part of your customer service, then you need a license because you are selling a service that includes MySQL.

3.4.4 Running a web server using MySQL

If you use MySQL in conjunction with a web server, you don't have to pay for a license.

This is true even if you run a commercial web server that uses MySQL, since you are not selling MySQL itself. However, in this case we would like you to purchase MySQL support, because MySQL is helping your enterprise.

3.5 MySQL licensing and support costs

Our current license prices are shown below. All prices are in US Dollars. If you pay by credit card, the currency is EURO (European Union Euro) so the prices will differ slightly.

Number of licenses Price per copy Total
1 US $200 US $200
10 pack US $150 US $1500
50 pack US $120 US $6000

For high volume (OEM) purchases, the following prices apply:

Number of licenses Price per copy Minimum at one time Minimum payment
100-999 US $40 100 US $4000
1000-2499 US $25 200 US $5000
2500-4999 US $20 400 US $8000

For OEM purchases, you must act as the middle-man for eventual problems or extension requests from your users. We also require that OEM customers have at least an extended email support contract.

If you have a low-margin high-volume product, you can always talk to us about other terms (for example, a percent of the sale price). If you do, please be informative about your product, pricing, market and any other information that may be relevant.

After buying 1 MySQL license, you will get a personal copy of the myisampack utility. You are not allowed to redistribute this utility but you can distribute tables packed with it.

A full-price license is not a support agreement and includes very minimal support. This means that we try to answer any relevant question. If the answer is in the documentation, we will direct you to the appropriate section. If you have not purchased a license or support, we probably will not answer at all.

If you discover what we consider a real bug, we are likely to fix it in any case. But if you pay for support we will notify you about the fix status instead of just fixing it in a later release.

More comprehensive support is sold separately. Descriptions of what each level of support includes are given in section 3.6 Types of commercial support. Costs for the various types of commercial support are shown below. Support level prices are in EURO (European Union Euro). One EURO is about 1.17 USD.

Type of support Cost per year
Basic email support EURO 170
Extended email support EURO 1000
Login support EURO 2000
Extended login support EURO 5000

You may upgrade from any lower level of support to a higher level of support for the difference between the prices of the two support levels.

3.5.1 Payment information

Currently we can take SWIFT payments, cheques or credit cards.

Payment should be made to:

Postgirot Bank AB
105 06 STOCKHOLM, SWEDEN

TCX DataKonsult AB
BOX 6434
11382 STOCKHOLM, SWEDEN

SWIFT address: PGSI SESS
Account number: 96 77 06 - 3

Specify: license and/or support and your name and email address.

In Europe and Japan you can use EuroGiro (that should be less expensive) to the same account.

If you want to pay by cheque, make it payable to "Monty Program KB" and mail it to the address below:

TCX DataKonsult AB
BOX 6434, Torsgatan 21
11382 STOCKHOLM, SWEDEN

If you want to pay by credit card over the Internet, you can use TcX's secure license form.

You can also print a copy of the license form, fill it in and send it by fax to:

+46-8-729 69 05

If you want us to bill you, you can use the license form and write "bill us" in the comment field. You can also mail a message to with your company information and ask us to bill you.

3.5.2 Contact information

For commercial licensing, or if you have any questions about any of the information in this section, please contact the MySQL licensing team. The much preferred method is by E-Mail to these may take much longer (Fax +46-8-729 69 05).

David Axmark
Detron HB
Kungsgatan 65 B
753 21 UPPSALA
SWEDEN
Voice Phone +46-18-10 22 80     (Timezone GMT+1. Swedish and English spoken)

3.6 Types of commercial support

3.6.1 Basic email support

Basic email support is a very inexpensive support option and should be thought of more as a way to support our development of MySQL than as a real support option.

At this support level, the MySQL mailing lists are the preferred means of communication. Questions normally should be mailed to the primary mailing list (mysql@lists.mysql.com) or one of the other regular lists (for example, mysql-win32@lists.mysql.com for Windows-related MySQL questions), as someone else already may have experienced and solved the problem you have. See section 2.2 Asking questions or reporting bugs.

However, by purchasing basic email support, you also have access to the support address mysql-support@mysql.com, which is not available as part of the minimal support that you get by purchasing a MySQL license. This means that for especially critical questions, you can cross-post your message to mysql-support@mysql.com. (If the message contains sensitive data, you should post only to mysql-support@mysql.com.)

REMEMBER! to ALWAYS include your registration number and expiration date when you send a message to

Basic email support includes the following types of service:

  • If your question is already answered in the manual, we will inform you of the correct section in which you can find the answer. If the answer is not in the manual, we will point you in the right direction to solve your problem.
  • We guarantee a timely answer for your email messages. We can't guarantee that we can solve any problem, but at least you will receive an answer if we can contact you by email.
  • We will help with unexpected problems when you install MySQL from a binary distribution on supported platforms. This level of support does not cover installing MySQL from a source distribution. "Supported" platforms are those for which MySQL is known to work. See section 4.2 Operating systems supported by MySQL.
  • We will help you with bugs and missing features. Any bugs that are found are fixed for the next MySQL release. If the bug is critical for you, we will mail you a patch for it as soon the bug is fixed. Critical bugs always have the highest priority for us, to ensure that they are fixed as soon as possible.
  • Your suggestions for the further development of MySQL will be taken into consideration. By taking email support you have already helped the further development of MySQL. If you want to have more input, upgrade to a higher level of support.
  • If you want us to help optimize your system, you must upgrade to a higher level of support.
  • We include a binary version of the myisampack packing tool for creating fast compressed read-only databases. The current server includes support for reading such databases but not the packing tool used to create them.

3.6.2 Extended email support

Extended email support includes everything in basic email support with these additions:

  • Your email will be dealt with before mail from basic email support users and non-registered users.
  • Your suggestions for the further development of MySQL will receive strong consideration. Simple extensions that suit the basic goals of MySQL are implemented in a matter of days. By taking extended email support you have already helped the further development of MySQL.
  • Typical questions that are covered by extended email support are:
    • We will answer and (within reason) solve questions that relate to possible bugs in MySQL. As soon as the bug is found and corrected, we will mail a patch for it.
    • We will help with unexpected problems when you install MySQL from a source or binary distribution on supported platforms.
    • We will answer questions about missing features and offer hints how to work around them.
    • We will provide hints on optimizing mysqld for your situation.
  • You are allowed to influence the priority of items on the MySQL TODO. This will ensure that the features you really need will be implemented sooner than they might be otherwise.

3.6.3 Login support

Login support includes everything in extended email support with these additions:

  • Your email will be dealt with even before mail from extended email support users.
  • Your suggestions for the further development of MySQL will be taken into very high consideration. Realistic extensions that can be implemented in a couple of hours and that suit the basic goals of MySQL will be implemented as soon as possible.
  • If you have a very specific problem, we can try to log in on your system to solve the problem "in place."
  • Like any database vendor, we can't guarantee that we can rescue any data from crashed tables, but if the worst happens we will help you rescue as much as possible. MySQL has proven itself very reliable, but anything is possible due to circumstances beyond our control (for example, if your system crashes or someone kills the server by executing a kill -9 command).
  • We will provide hints on optimizing your system and your queries.
  • You are allowed to call a MySQL developer (in moderation) and discuss your MySQL-related problems.

3.6.4 Extended login support

Extended login support includes everything in login support with these additions:

  • Your email has the highest possible priority.
  • We will actively examine your system and help you optimize it and your queries. We may also optimize and/or extend MySQL to better suit your needs.
  • You may also request special extensions just for you. For example:
    mysql> select MY_CALCULATION(col_name1,col_name2) from tbl_name;
    
  • We will provide a binary distribution of all important MySQL releases for your system, as long as we can get an account on a similar system. In the worst case, we may require access to your system to be able to create a binary distribution.
  • If you can provide accommodations and pay for traveler fares, you can even get a MySQL developer to visit you and offer you help with your troubles. Extended login support entitles you to one personal encounter per year, but we are as always very flexible towards our customers!

4 Installing MySQL

This chapter describes how to obtain and install MySQL:

4.1 How to get MySQL

Check the MySQL home page for information about the current version and for downloading instructions.

However, the Internet connection at TcX is not so fast; we would prefer that you do the actual downloading from one of the mirror sites listed below.

Please report bad or out of date mirrors to webmaster@mysql.com.

Europe:

North America:

  • Canada [Tryc] WWW
  • Canada [Cyberus] WWW FTP
  • USA [Hurricane Electric/San Jose] WWW
  • USA [Circle Net/North Carolina] WWW
  • USA [Gina net/Florida] WWW
  • USA [pingzero/Los Angeles] WWW
  • USA [Wisconsin University/Wisconsin] WWW FTP
  • USA [DIGEX] FTP

South America:

  • Brazil [Matrix] WWW
  • Chile [Vision] WWW

Asia:

Australia:

  • Australia [AARNet/Queensland] WWW FTP
  • Australia [Tas] WWW FTP
  • Australia [Blue Planet/Melbourne] WWW
  • Australia [ITworks Consulting/Victoria] WWW

Africa:

  • South-Africa [Mweb/] WWW
  • South-Africa [The Internet Solution/Johannesburg] FTP

4.2 Operating systems supported by MySQL

We use GNU Autoconf so it is possible to port MySQL to all modern systems with working Posix threads and a C++ compiler. (To compile only the client code, a C++ compiler is required but not threads.) We use and develop the software ourselves primarily on Sun Solaris (versions 2.5 & 2.6) and to a lesser extent on RedHat Linux 5.0.

MySQL has been reported to compile sucessfully on the following operating system/thread package combinations. Note that for many operating systems, the native thread support works only in the latest versions.

  • AIX 4.x with native threads
  • BSDI 2.x with the included MIT-pthreads package
  • BSDI 3.0, 3.1 and 4.x with native threads
  • DEC UNIX 4.x with native threads
  • FreeBSD 2.x with the included MIT-pthreads package
  • FreeBSD 3.x with native threads
  • HP-UX 10.20 with the included MIT-pthreads package
  • HP-UX 11.x with the native threads.
  • Linux 2.0+ with LinuxThreads 0.7.1 or glibc 2.0.7
  • MacOS X Server
  • NetBSD 1.3/1.4 Intel and NetBSD 1.3 Alpha (Requires GNU make)
  • OpenBSD 2.x with the included MIT-pthreads package
  • OS/2 Warp 3, FixPack 29 and OS/2 Warp 4, FixPack 4
  • SGI Irix 6.x with native threads
  • Solaris 2.5, 2.6 and 2.7 with native threads on SPARC and x86
  • SunOS 4.x with the included MIT-pthreads package
  • SCO OpenServer with a recent port of the FSU Pthreads package
  • SCO UnixWare 7.0.1
  • Tru64 Unix
  • Win95, Win98 and NT (the newest version is currently available only for users with a MySQL license or MySQL email support). For those who wish to test before they buy, we have released MySQL 3.21.29 (an older version) as shareware.

4.3 Which MySQL version to use

The first decision to make is whether you want to use the latest development release or the last stable release:

  • Normally, if you are beginning to use MySQL for the first time or trying to port it to some system for which there is no binary distribution, we recommend going with the development release (currently 3.22.x). This is because there are usually no really serious bugs in the development release, and you can easily test it on your machine with the crash-me and benchmark tests. See section 10.8 Using your own benchmarks.
  • Otherwise, if you are running an old system and want to upgrade, but don't want to take chances with 3.22, you should upgrade to 3.21.33. We have tried to fix only fatal bugs and make small, relatively safe changes to that version.

The second decision to make is whether you want to use a source distribution or a binary distribution:

  • If you want to run MySQL on a platform for which a current binary distribution exists, use that. Generally, it will be easier to install than a source distribution.
  • If you want to read (and/or modify) the C and C++ code that makes up MySQL, you should get a source distribution. The source code is always the ultimate manual. Source distributions also contain more tests and examples than binary distributions.

The MySQL naming scheme uses release numbers that consist of three numbers and a suffix. For example, a release name like mysql-3.21.17-beta is interpreted like this:

  • The first number (3) describes the file format. All version 3 releases have the same file format. When a version 4 appears, every table will have to be converted to the new format (nice tools for this will be included, of course).
  • The second number (21) is the release level. Normally there are two to choose from. One is the release/stable branch (currently 21) and the other is the development branch (currently 22) . Normally both are stable, but the development version may have quirks, missing documentation on new features or may fail to compile on some systems.
  • The third number (17) is the version number within the release level. This is incremented for each new distribution. Usually you want the latest version for the release level you have choosen.
  • The suffix (beta) indicates the stability level of the release. The possible suffixes are:
    • alpha indicates that the release contains some large section of new code that hasn't been 100% tested. Known bugs (usually there are none) should be documented in the News section. See section D MySQL change history. There are also new commands and extensions in most alpha releases.
    • beta means that all new code has been tested. No major new features were added. There should be no known bugs.
    • gamma is a beta that has been around a while and seems to work fine. This is what many other companies call a release.
    • If there is no suffix, it means that the version has been run for a while at many different sites with no reports of bugs other than platform-specific bugs. This is what we call a stable release.

All versions of MySQL are run through our standard tests and benchmarks to ensure that they are relatively safe to use. Since the standard tests are extended over time to check for all previously found bugs, the test suite keeps getting better.

Note that all releases have been tested at least with:

An internal test suite
This is part of a production system for a customer. It has many tables with hundreds of megabytes of data.
The MySQL benchmark suite
This runs a range of common queries. It is also a test to see whether the latest batch of optimizations actually made the code faster. See section 10.8 Using your own benchmarks.
The crash-me test
This tries to determine what features the database supports and what its capabilities and limitations are. See section 10.8 Using your own benchmarks.

Another test is that we use the newest MySQL version in our internal production environment, on at least one machine. We have more than 100 gigabytes of data to work with.

4.4 How and when updates are released

MySQL is evolving quite rapidly here at TcX and we want to share this with other MySQL users. We try to make a release when we have very useful features that others seem to have a need for.

We also try to help out users who request features that are easy to implement. We also take note of what our licensed users want to have and we especially take note of what our extended email supported customers want and try to help them out.

No one has to download a new release. The News section will tell you if the new release has something you really want. See section D MySQL change history.

We use the following policy when updating MySQL:

  • For each minor update, the last number in the version string is incremented. When there are major new features or minor incompatibilities with previous versions, the second number in the version string is incremented. When the file format changes, the first number is increased.
  • Stable tested releases are meant to appear about 1-2 times a year, but if small bugs are found, a release with only bug-fixes will be released.
  • Working releases are meant to appear about every 1-8 weeks.
  • Binary distributions for some platforms will be made by us for major releases. Other people may make binary distributions for other systems but probably less frequently.
  • We usually make patches available as soon as we have located and fixed small bugs.
  • For non-critical but annoying bugs, we will make patches available if they are sent to us. Otherwise we will combine many of them into a larger patch.
  • If there is, by any chance, a fatal bug in a release we will make a new release as soon as possible. We would like other companie