How Stable Is MySQL?
--------------------
This section addresses the questions "How stable is MySQL?" and "Can I
depend on MySQL in this project?" 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).
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 don't know what the gray zones are; this section attempts
to indicate those that are currently known. The descriptions deal with
Version 3.23 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. Note:Bugs.
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 Version
3.22 and earlier. 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.
*The MyISAM table handler -- Stable*
This is new in MySQL Version 3.23. It's largely based on the ISAM
table code but has a lot of new and 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 Version 3.20 releases, there were
some limitations in the send/receive buffer size. As of Version
3.21, the buffer size is now dynamic up to a default of 16M.
*Standard client programs -- Stable*
These include `mysql', `mysqladmin', `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 -- Stable*
*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 -- Stable*
The major 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 Version 0.5.
LinuxThreads will need to be recompiled if you plan to use 1000+
concurrent connections. Although it is possible to run that many
connections with the default LinuxThreads (however, you will never
go above 1021), the default stack spacing of 2 MB makes the
application unstable, and we have been able to reproduce a
coredump after creating 1021 idle connections. Note:Linux.
*Solaris 2.5+ pthreads -- Stable*
We use this for all our production work.
*MIT-pthreads (Other systems) -- Stable*
There have been no reported bugs since Version 3.20.15 and no
known bugs since Version 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 -- Beta - Gamma*
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 thought they had 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 Version 3.22.12.
*DBD -- Stable*
Now maintained by Jochen Wiedmann (<wiedmann@neckar-alb.de>).
Thanks!
*`mysqlaccess' -- Stable*
Written and maintained by Yves Carlier (<Yves.Carlier@rug.ac.be>).
Thanks!
*`GRANT' -- Stable*
Big changes made in MySQL Version 3.22.12.
**MyODBC* (uses ODBC SDK 2.5) -- Gamma*
It seems to work well with some programs.
*Replication - Beta / Gamma*
We are still working on replication, so don't expect this to be
rock solid yet. On the other hand, some MySQL users are already
using this with good results.
*BDB Tables - Beta*
The Berkeley DB code is very stable, but we are still improving
the interface between MySQL and BDB tables, so it will take some
time before this is as tested as the other table types.
*InnoDB Tables - Beta*
This is a recent addition to `MySQL'. They appear to work good and
can be used after some initial testing.
*Automatic recovery of MyISAM tables - Beta*
This only affects the new code that checks if the table was closed
properly on open and executes an automatic check/repair of the
table if it wasn't.
*MERGE tables - Beta / Gamma*
The usage of keys on `MERGE' tables is still not that tested. The
other part of the `MERGE' code is quite well tested.
*FULLTEXT - Beta*
Text search seems to work, but is still not widely used.
MySQL AB provides e-mail 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.