End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar.According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
The MySQL® software delivers a very fast, multi-threaded,
multi-user, and robust SQL (Structured Query Language) database
server. MySQL Server is intended for mission-critical, heavy-load
production systems as well as for embedding into mass-deployed
software. MySQL is a registered trademark of MySQL AB.
The MySQL software is Dual Licensed. Users can choose to use the
MySQL software as an Open Source product under the terms of the GNU
General Public License (http://www.fsf.org/licenses/)
or can purchase a standard commercial license from MySQL AB. See
http://www.mysql.com/company/legal/licensing/ for
more information on our licensing policies.
The following list describes some sections of particular interest in
this manual:
If you have found a sensitive security bug in MySQL Server, please
let us know immediately by sending an email message to
<security@mysql.com>.
1.1. About This Manual
This is the Reference Manual for all releases of the MySQL
Database System from version 3.23 through release
4.1.22. It is also applicable for versions of the MySQL
software previous to 4.1 (such as 3.23 or 4.0)
because functional changes are indicated with reference to version
numbers. For later MySQL releases, see the appropriately-numbered
edition of this manual. For example, if you are using a version
5.0 release of the MySQL software, please refer to the
MySQL 5.0 Reference Manual.
Because this manual serves as a reference, it does not provide
general instruction on SQL or relational database concepts. It
also does not teach you how to use your operating system or
command-line interpreter.
The MySQL Database Software is under constant development, and the
Reference Manual is updated frequently as well. The most recent
version of the manual is available online in searchable form at
http://dev.mysql.com/doc/. Other formats also are available
there, including HTML, PDF, and Windows CHM versions.
The Reference Manual source files are written in DocBook XML
format. The HTML version and other formats are produced
automatically, primarily using the DocBook XSL stylesheets. For
information about DocBook, see http://docbook.org/
This manual was originally written by David Axmark and Michael
“Monty” Widenius. It is maintained by the MySQL
Documentation Team, consisting of Paul DuBois, Stefan Hinz, Jon
Stephens, Martin MC Brown, and Peter Lavin. For the many other
contributors, see Appendix J, Credits.
The copyright to this manual is owned by the Swedish company MySQL
AB. MySQL® and the MySQL logo are registered trademarks of
MySQL AB. Other trademarks and registered trademarks referred to
in this manual are the property of their respective owners, and
are used for identification purposes only.
1.2. Conventions Used in This Manual
This manual uses certain typographical conventions:
Text in this style is used for SQL
statements; database, table, and column names; program listings
and source code; and environment variables. Example: “To
reload the grant tables, use the FLUSH
PRIVILEGES statement.”
Text in this style indicates input that
you type in examples.
Text in this style indicates the names of
executable programs and scripts, examples being
mysql (the MySQL command line client program)
and mysqld (the MySQL server executable).
Text in this style is used for
variable input for which you should substitute a value of your
own choosing.
Filenames and directory names are written like this: “The
global my.cnf file is located in the
/etc directory.”
Character sequences are written like this: “To specify a
wildcard, use the ‘%’
character.”
Text in this style is used for emphasis.
Text in this style is used in
table headings and to convey especially strong emphasis.
When commands are shown that are meant to be executed from within a
particular program, the prompt shown preceding the command indicates
which command to use. For example, shell>
indicates a command that you execute from your login shell, and
mysql> indicates a statement that you execute
from the mysql client program:
shell> type a shell command here
mysql> type a mysql statement here
The “shell” is your command interpreter. On Unix, this
is typically a program such as sh,
csh, or bash. On Windows, the
equivalent program is command.com or
cmd.exe, typically run in a console window.
When you enter a command or statement shown in an example, do not
type the prompt shown in the example.
Database, table, and column names must often be substituted into
statements. 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 keywords are not case sensitive and may be written in any
lettercase. This manual uses uppercase.
In syntax descriptions, square brackets
(‘[’ and
‘]’) indicate optional words or
clauses. For example, in the following statement, IF
EXISTS is optional:
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 (‘[’
and ‘]’):
TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)
When one member from a set of choices must be
chosen, the alternatives are listed within braces
(‘{’ and
‘}’):
{DESCRIBE | DESC} tbl_name [col_name | wild]
An ellipsis (...) indicates the omission of a
section of a statement, typically to provide a shorter version of
more complex syntax. For example, INSERT ...
SELECT is shorthand for the form of
INSERT statement that is followed by a
SELECT statement.
An ellipsis can also indicate that the preceding syntax element of a
statement may be repeated. In the following example, multiple
reset_option values may be given, with
each of those after the first preceded by commas:
RESET reset_option [,reset_option] ...
Commands for setting shell variables are shown using Bourne shell
syntax. For example, the sequence to set the CC
environment variable and run the configure
command looks like this in Bourne shell syntax:
shell> CC=gcc ./configure
If you are using csh or tcsh,
you must issue commands somewhat differently:
shell> setenv CC gcc
shell> ./configure
1.3. Overview of MySQL AB
MySQL AB is the company of the MySQL founders and main developers.
MySQL AB was originally established in Sweden by David Axmark, Allan
Larsson, and Michael “Monty” Widenius.
We are dedicated to developing the MySQL database software and
promoting it to new users. MySQL AB owns the copyright to the MySQL
source code, the MySQL logo and (registered) trademark, and this
manual. See Section 1.4, “Overview of the MySQL Database Management System”.
The MySQL core values show our dedication to MySQL and Open Source.
These core values direct how MySQL AB works with the MySQL server
software:
To be the best and the most widely used database in the world
To be available and affordable by all
To be easy to use
To be continuously improved while remaining fast and safe
To be fun to use and improve
To be free from bugs
These are the core values of the company MySQL AB and its employees:
We subscribe to the Open Source philosophy and support the Open
Source community
We aim to be good citizens
We prefer partners that share our values and mindset
We answer email and provide support
We are a virtual company, networking with others
We work against software patents
The MySQL Web site (http://www.mysql.com/) provides
the latest information about MySQL and MySQL AB.
By the way, the “AB” part of the company name is the
acronym for the Swedish “aktiebolag,” or “stock
company.” It translates to “MySQL, Inc.” In
fact, MySQL, Inc. and MySQL GmbH are examples of MySQL AB
subsidiaries. They are located in the United States and Germany,
respectively.
1.4. Overview of the MySQL Database Management System
MySQL, the most popular Open Source SQL database management
system, is developed, distributed, and supported by MySQL AB.
MySQL AB is a commercial company, founded by the MySQL developers.
It is a second generation Open Source company that unites Open
Source values and methodology with a successful business model.
The MySQL Web site (http://www.mysql.com/) provides
the latest information about MySQL software and MySQL AB.
MySQL is a database management system.
A database is a structured collection of data. It may be
anything from a simple shopping list to a picture gallery or
the vast amounts of information in a corporate network. To
add, access, and process data stored in a computer database,
you need a database management system such as MySQL Server.
Since computers are very good at handling large amounts of
data, database management systems play a central role in
computing, as standalone utilities, or as parts of other
applications.
MySQL is a relational database management system.
A relational database stores data in separate tables rather
than putting all the data in one big storeroom. This adds
speed and flexibility. The SQL part of “MySQL”
stands for “Structured Query Language.” SQL is
the most common standardized language used to access databases
and is defined by the ANSI/ISO SQL Standard. The SQL standard
has been evolving since 1986 and several versions exist. In
this manual, “SQL-92” refers to the standard
released in 1992, “SQL:1999” refers to the
standard released in 1999, and “SQL:2003” refers
to the current version of the standard. We use the phrase
“the SQL standard” to mean the current version of
the SQL Standard at any time.
MySQL software is Open Source.
Open Source means that it is possible for anyone to use and
modify the software. Anybody can download the MySQL software
from the Internet and use it without paying anything. If you
wish, you may study the source code and change it to suit your
needs. The MySQL software uses the GPL (GNU General Public
License), http://www.fsf.org/licenses/, to
define what you may and may not do with the software in
different situations. If you feel uncomfortable with the GPL
or need to embed MySQL code into a commercial application, you
can buy a commercially licensed version from us. See the MySQL
Licensing Overview for more information
(http://www.mysql.com/company/legal/licensing/).
The MySQL Database Server is very fast, reliable, and easy to
use.
If that is what you are looking for, you should give it a try.
MySQL Server also has a practical set of features developed in
close cooperation with our users. You can find a performance
comparison of MySQL Server with other database managers on our
benchmark page. See Section 7.1.4, “The MySQL Benchmark Suite”.
MySQL Server was originally developed to handle large
databases much faster than existing solutions and has been
successfully used in highly demanding production environments
for several years. Although under constant development, MySQL
Server today offers a rich and useful set of functions. Its
connectivity, speed, and security make MySQL Server highly
suited for accessing databases on the Internet.
MySQL Server works in client/server or embedded systems.
The MySQL Database Software is a client/server system that
consists of a multi-threaded SQL server that supports
different backends, several different client programs and
libraries, administrative tools, and a wide range of
application programming interfaces (APIs).
We also provide MySQL Server as an embedded multi-threaded
library that you can link into your application to get a
smaller, faster, easier-to-manage standalone product.
A large amount of contributed MySQL software is available.
It is very likely that your favorite application or language
supports the MySQL Database Server.
The official way to pronounce “MySQL” is “My
Ess Que Ell” (not “my sequel”), but we don't
mind if you pronounce it as “my sequel” or in some
other localized way.
1.4.2. History of MySQL
We started out with the intention of using the
mSQL database system 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
designed to allow third-party code that was written for use with
mSQL to be ported easily for use with MySQL.
The derivation of the name MySQL is not clear. Our base directory
and a large number of our libraries and tools have had the prefix
“my” for well over 10 years. However, co-founder
Monty Widenius's daughter is also named My. Which of the two gave
its name to MySQL is still a mystery, even for us.
The name of the MySQL Dolphin (our logo) is “Sakila,”
which was chosen by the founders of MySQL AB from a huge list of
names suggested by users in our “Name the Dolphin”
contest. The winning name was submitted by Ambrose Twebaze, an
Open Source software developer from Swaziland, Africa. According
to Ambrose, the feminine name Sakila has its roots in SiSwati, the
local language of Swaziland. Sakila is also the name of a town in
Arusha, Tanzania, near Ambrose's country of origin, Uganda.
1.4.3. The Main Features of MySQL
This section describes some of the important characteristics of
the MySQL Database Software. See also Section 1.6, “MySQL Development Roadmap”,
for more information about current and upcoming features. In most
respects, it applies to all versions of MySQL. For information
about features as they are introduced into MySQL on a
series-specific basis, see “In a Nutshell” section of
the appropriate Manual:
Uses GNU Automake, Autoconf, and Libtool for portability.
The MySQL Server design is multi-layered with independent
modules.
Fully multi-threaded using kernel threads. It can easily use
multiple CPUs if they are available.
Provides transactional and non-transactional storage engines.
Uses very fast B-tree disk tables (MyISAM)
with index compression.
Relatively easy to add other storage engines. This is useful
if you want to provide an SQL interface for an in-house
database.
A very fast thread-based memory allocation system.
Very fast joins using an optimized one-sweep multi-join.
In-memory hash tables, which are used as temporary tables.
SQL functions are implemented using a highly optimized class
library and should be as fast as possible. Usually there is no
memory allocation at all after query initialization.
The MySQL code is tested with Purify (a commercial memory
leakage detector) as well as with Valgrind, a GPL tool
(http://developer.kde.org/~sewardj/).
The server is available as a separate program for use in a
client/server networked environment. It is also available as a
library that can be embedded (linked) into standalone
applications. Such applications can be used in isolation or in
environments where no network is available.
Data Types:
Many data types: signed/unsigned integers 1, 2, 3, 4, and 8
bytes long, FLOAT,
DOUBLE, CHAR,
VARCHAR, TEXT,
BLOB, DATE,
TIME, DATETIME,
TIMESTAMP, YEAR,
SET, ENUM, and OpenGIS
spatial types. See Chapter 11, Data Types.
Fixed-length and variable-length records.
Statements and Functions:
Full operator and function support in the
SELECT list and WHERE
clause of queries. For example:
mysql> SELECT CONCAT(first_name, ' ', last_name)
-> FROM citizen
-> WHERE income/dependents > 10000 AND age > 30;
Full support for SQL GROUP BY and
ORDER BY clauses. Support for group
functions (COUNT(), COUNT(DISTINCT
...), AVG(),
STD(), SUM(),
MAX(), MIN(), and
GROUP_CONCAT()).
Support for LEFT OUTER JOIN and
RIGHT OUTER JOIN with both standard SQL and
ODBC syntax.
Support for aliases on tables and columns as required by
standard SQL.
DELETE, INSERT,
REPLACE, and UPDATE
return the number of rows that were changed (affected). It is
possible to return the number of rows matched instead by
setting a flag when connecting to the server.
The MySQL-specific SHOW statement can be
used to retrieve information about databases, storage engines,
tables, and indexes. MySQL 5.0 adds support for the
INFORMATION_SCHEMA database, implemented
according to standard SQL.
The EXPLAIN statement can be used to
determine how the optimizer resolves a query.
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 9.3, “Reserved Words”.
You can refer to tables from different databases in the same
statement.
Security:
A privilege and password system that is very flexible and
secure, and that allows host-based verification.
Passwords are secure because all password traffic is encrypted
when you connect to a server.
Scalability and Limits:
Handles large databases. We use MySQL Server with databases
that contain 50 million records. We also know of users who use
MySQL Server with 60,000 tables and about 5,000,000,000 rows.
Up to 64 indexes per table are allowed (32 before MySQL
4.1.2). Each index may consist of 1 to 16 columns or parts of
columns. The maximum index width is 1000 bytes (767 for
InnoDB); before MySQL 4.1.2, the limit is
500 bytes. An index may use a prefix of a column for
CHAR, VARCHAR,
BLOB, or TEXT column
types.
Connectivity:
Clients can connect to MySQL Server using several protocols:
Clients can connect using TCP/IP sockets on any platform.
On Windows systems in the NT family (NT, 2000, XP, 2003,
or Vista), clients can connect using named pipes if the
server is started with the
--enable-named-pipe option. In MySQL 4.1
and higher, Windows servers also support shared-memory
connections if started with the
--shared-memory option. Clients can
connect through shared memory by using the
--protocol=memory option.
On Unix systems, clients can connect using Unix domain
socket files.
MySQL client programs can be written in many languages. A
client library written in C is available for clients written
in C or C++, or for any language that provides C bindings.
APIs for Eiffel, Java, Perl, PHP, Python, Ruby, Tcl, and other
languages are available, See Chapter 17, APIs and Libraries.
APIs for C, C++, Eiffel, Java, Perl, PHP, Python, Ruby, and
Tcl are available, allowing MySQL clients to be written in
many languages. See Chapter 17, APIs and Libraries.
The Connector/ODBC (MyODBC) interface provides MySQL support
for client programs that use ODBC (Open Database Connectivity)
connections. For example, you can use MS Access to connect to
your MySQL server. Clients can be run on Windows or Unix.
MyODBC source is available. All ODBC 2.5 functions are
supported, as are many others. See
Chapter 18, Connectors.
The Connector/J interface provides MySQL support for Java
client programs that use JDBC connections. Clients can be run
on Windows or Unix. Connector/J source is available. See
Chapter 18, Connectors.
MySQL Connector/NET enables developers to easily create .NET
applications that require secure, high-performance data
connectivity with MySQL. It implements the required ADO.NET
interfaces and integrates into ADO.NET aware tools. Developers
can build applications using their choice of .NET languages.
MySQL Connector/NET is a fully managed ADO.NET driver written
in 100% pure C#. See Chapter 18, Connectors.
Full support for several different character sets, including
latin1 (cp1252), german,
big5, ujis, and more.
For example, the Scandinavian characters
‘å’,
‘ä’ and
‘ö’ are allowed in table and
column names. Unicode support is available as of MySQL 4.1.
All data is saved in the chosen character set.
Sorting and comparisons are done according to the chosen
character set and collation (using latin1
and Swedish collation by default). It is possible to change
this when the MySQL server is started. To see an example of
very advanced sorting, look at the Czech sorting code. MySQL
Server supports many different character sets that can be
specified at compile time and runtime.
MySQL AB provides several client and utility programs. These
include both command-line programs such as
mysqldump and
mysqladmin, and graphical programs such as
MySQL Administrator and MySQL Query Browser.
MySQL Server has built-in support for SQL statements to check,
optimize, and repair tables. These statements are available
from the command line through the
mysqlcheck client. MySQL also includes
myisamchk, a very fast command-line utility
for performing these operations on MyISAM
tables. See Chapter 8, Client and Utility Programs.
MySQL programs can be invoked with the --help
or -? option to obtain online assistance.
1.5. Overview of the MaxDB Database Management System
MaxDB is a heavy-duty enterprise database. The database management
system is SAP-certified.
MaxDB is the new name of a database management system formerly
called SAP DB. In 2003 SAP AG and MySQL AB joined a partnership and
re-branded the database system to MaxDB. The development of MaxDB
has continued since then as it was done before—through the SAP
developer team.
MySQL AB cooperates closely with the MaxDB team at SAP around
delivering improvements to the MaxDB product. Joint efforts include
development of new native drivers to enable more efficient usage of
MaxDB in the Open Source community, and improvement of documentation
to expand the MaxDB user base. Interoperability features between
MySQL and MaxDB database also are seen as important. For example,
the new MaxDB Synchronization Manager supports data synchronization
from MaxDB to MySQL.
The MaxDB database management system does not share a common
code-base with the MySQL database management system. The MaxDB and
MySQL database management systems are independent products provided
by MySQL AB.
MySQL AB offers a complete portfolio of Professional Services for
MaxDB.
1.5.1. What is MaxDB?
MaxDB is an ANSI SQL-92 (entry level) compliant relational
database management system (RDBMS) from SAP AG, that is delivered
by MySQL AB as well. MaxDB fulfills the needs for enterprise
usage: safety, scalability, high concurrency, and performance. It
runs on all major operating systems. Over the years it has proven
able to run SAP R/3 and terabytes of data in 24×7 operation.
The database development started in 1977 as a research project at
the Technical University of Berlin. In the early 1980s it became a
database product that subsequently was owned by Nixdorf, Siemens
Nixdorf, Software AG, and today by SAP AG. Along the way, it has
been named VDN, Reflex, Supra 2, DDB/4, Entire SQL-DB-Server, and
ADABAS D. In 1997, SAP took over the software from Software AG and
renamed it to SAP DB. Since October 2000, SAP DB sources
additionally were released as Open Source under the GNU General
Public License (see Appendix H, GNU General Public License).
In 2003, SAP AG and MySQL AB formed a partnership and re-branded
the database system to MaxDB.
1.5.2. History of MaxDB
The history of MaxDB goes back to SAP DB, SAP AG's DBMS. That is,
MaxDB is a re-branded and enhanced version of SAP DB. For many
years, MaxDB has been used for small, medium, and large
installations of the mySAP Business Suite and other demanding SQL
applications requiring an enterprise-class DBMS with regard to the
number of users, the transactional workload, and the size of the
database.
SAP DB was meant to provide an alternative to third-party database
systems such as Oracle, Microsoft SQL Server, and DB2 by IBM. In
October 2000, SAP AG released SAP DB under the GNU GPL license
(see Appendix H, GNU General Public License), thus making it Open Source
software.
Today, MaxDB is used in about 3,500 SAP customer installations
worldwide. Moreover, the majority of all DBMS installations on
Unix and Linux within SAP’s IT department rely on MaxDB. MaxDB
is tuned toward heavy-duty online transaction processing (OLTP)
with several thousand users and database sizes ranging from
several hundred GB to multiple TB.
In 2003, SAP and MySQL concluded a partnership and development
cooperation agreement. As a result, SAP's database system SAP DB
has been delivered under the name of MaxDB by MySQL since the
release of version 7.5 (November 2003).
Version 7.5 of MaxDB is a direct advancement of the SAP DB 7.4
code base. Therefore, the MaxDB software version 7.5 can be used
as a direct upgrade of previous SAP DB versions starting 7.2.04
and higher.
The former SAP DB development team at SAP AG is responsible, now
as before, for developing and supporting MaxDB. MySQL AB
cooperates closely with the MaxDB team at SAP around delivering
improvements to the MaxDB product, see Section 1.5, “Overview of the MaxDB Database Management System”.
Both SAP AG and MySQL AB handle the sale and distribution of
MaxDB. The advancement of MaxDB and the MySQL Server leverages
synergies that benefit both product lines.
MaxDB is subjected to SAP AG's complete quality assurance process
before it is shipped with SAP solutions or provided as a download
from the MySQL site.
1.5.3. Features of MaxDB
MaxDB is a heavy-duty, SAP-certified Open Source database for OLTP
and OLAP usage which offers high reliability, availability,
scalability, and a very comprehensive feature set. It is targeted
for large mySAP Business Suite environments and other applications
that require maximum enterprise-level database functionality and
complements the MySQL database server.
MaxDB operates as a client/server product. It was developed to
meet the needs of installations in OLTP and Data
Warehouse/OLAP/Decision Support scenarios and offers these
benefits:
Easy configuration and
administration: GUI-based Installation Manager and
Database Manager as single administration tools for DBMS
operations
Around-the-clock operation, no planned
downtimes, no permanent attendance required:
Automatic space management, no need for reorganizations
Sophisticated backup and restore
capabilities: Online and incremental backups,
recovery wizard to guide you through the recovery scenario
Supports large number of users, database
sizes in the terabytes, and demanding workloads:
Proven reliability, performance, and scalability
High availability: Cluster
support, standby configuration, hot standby configuration
1.5.4. Licensing and Support
MaxDB can be used under the same licenses available for the other
products distributed by MySQL AB. Thus, MaxDB is available under
the GNU General Public License, and a commercial license. For more
information on licensing, see
http://www.mysql.com/company/legal/licensing/.
MySQL AB offers MaxDB technical support to non-SAP customers.
MaxDB support is available on various levels (Basic, Silver, and
Gold), which expand from unlimited email/web-support to 24×7
phone support for business critical systems.
MySQL AB also offers Licenses and Support for MaxDB when used with
SAP Applications, like SAP NetWeaver and mySAP Business Suite. For
more information on licenses and support for your needs, please
contact MySQL AB. (See
http://www.mysql.com/company/contact/.)
Consulting and training services are available. MySQL gives
classes on MaxDB at regular intervals. See
http://www.mysql.com/training/ for a list of
classes.
1.5.5. Feature Differences Between MaxDB and MySQL
MaxDB is MySQL AB's SAP-certified database. The MaxDB database
server complements the MySQL AB product portfolio. Some MaxDB
features are not available on the MySQL database management server
and vice versa.
The following list summarizes the main differences between MaxDB
and MySQL; it is not complete.
MaxDB runs as a client/server system. MySQL can run as a
client/server system or as an embedded system.
MaxDB might not run on all platforms supported by MySQL.
MaxDB uses a proprietary network protocol for client/server
communication. MySQL uses either TCP/IP (with or without SSL
encryption), sockets (under Unix-like systems), or named pipes
or shared memory (under Windows NT-family systems).
MaxDB supports stored procedures and functions. MySQL 5.0 and
up also supports stored procedures and functions. MaxDB
supports programming of triggers through an SQL extension.
MySQL 5.0 supports triggers. MaxDB contains a debugger for
stored procedure languages, can cascade nested triggers, and
supports multiple triggers per action and row.
MaxDB is distributed with user interfaces that are text-based,
graphical, or Web-based. MySQL is distributed with text-based
user interfaces only; graphical user interfaces such as MySQL
Query Browser or MySQL Administrator are shipped separately
from the main distributions. Web-based user interfaces for
MySQL are offered by third parties.
MaxDB supports a number of programming interfaces that also
are supported by MySQL. For developing with MaxDB, the MaxDB
ODBC Driver, SQL Database Connectivity (SQLDBC), JDBC Driver,
Perl and Python modules and a MaxDB PHP extension, which
provides access to MySQL MaxDB databases using PHP, are
available. Third Party Programming Interfaces: Support for OLE
DB, ADO, DAO, RDO and .NET through ODBC. MaxDB supports
embedded SQL with C/C++.
MaxDB includes administrative features that MySQL does not
have: job scheduling by time (included in MySQL as of 5.1),
event, and alert, and sending messages to a database
administrator on alert thresholds. (MySQL has scheduling
support starting with version 5.1.6.)
1.5.6. Interoperability Features Between MaxDB and MySQL
MaxDB and MySQL are independent database management servers. The
interoperation of the systems is possible in a way that the
systems can exchange their data. To exchange data between MaxDB
and MySQL, you can use the import and export tools of the systems
or the MaxDB Synchronization Manager. The import and export tools
can be used to transfer data in an infrequent, manual fashion. The
MaxDB Synchronization Manager offers faster, automatic data
transfer capabilities.
The MaxDB Loader can be used to export data and object
definitions. The Loader can export data using MaxDB internal,
binary formats and text formats (CSV). Data exported from MaxDB in
text formats can be imported into MySQL using the
mysqlimport client program. To export MySQL
data, you can use either mysqldump to create
INSERT statements or SELECT ... INTO
OUTFILE to create a text file (CSV). Use the MaxDB
Loader to import the data files generated by MySQL.
Object definitions can be exchanged between the systems using
MaxDB Loader and the MySQL tool mysqldump. As
the SQL dialects of both systems differ slightly and MaxDB has
features currently not supported by MySQL like SQL constraints, we
recommend to hand-tune the definition files. The
mysqldump tool offers an option
--compatible=maxdb to produce output that is
compatible with MaxDB to make porting easier.
The MaxDB Synchronization Manager is available as part of MaxDB
7.6. The Synchronization Manager supports creation of asynchronous
replication scenarios between several MaxDB instances. However,
interoperability features also are planned, so that the
Synchronization Manager supports replication to and from a MySQL
server.
1.5.7. MaxDB-Related Links
The main page for MaxDB information is
http://www.mysql.com/products/maxdb, which provides
details about the features of the MaxDB database management
systems and has pointers to available documentation.
The MySQL Reference Manual does not contain any MaxDB
documentation other than the introduction given in this section.
MaxDB has its own documentation, which is called the MaxDB library
and is available at
http://dev.mysql.com/doc/maxdb/index.html.
MySQL AB runs a community mailing list on MaxDB; see
http://lists.mysql.com/maxdb. The list shows a
vivid community discussion. Many of the core developers contribute
to it. Product announcements are sent to the list.
A Web forum on MaxDB is available at
http://forums.mysql.com/. The forum focuses on
MaxDB questions not related to SAP applications.
This section provides a snapshot of the MySQL development roadmap,
including major features implemented in or planned for various
MySQL releases. The following sections provide information for
each release series.
The current production release series is MySQL 5.0, which was
declared stable for production use as of MySQL 5.0.15, released in
October 2005. The previous production release series was MySQL
4.1, which was declared stable for production use as of MySQL
4.1.7, released in October 2004. “Production status”
means that future 5.0 and 4.1 development is limited only to
bugfixes. For the older MySQL 4.0 and 3.23 series, only critical
bugfixes are made.
Active MySQL development currently is taking place in the MySQL
5.0 and 5.1 release series; and new features are being added only
to the latter.
The most requested features and the versions in which they were
implemented or are scheduled for implementation are summarized in
the following table:
Feature
MySQL Series
Foreign keys
3.23 (for the InnoDB storage engine)
Unions
4.0
Subqueries
4.1
R-trees
4.1 (for the MyISAM storage engine)
Stored procedures
5.0
Views
5.0
Cursors
5.0
XA transactions
5.0
Foreign keys
5.2 (implemented in 3.23 for InnoDB)
Triggers
5.0 and 5.1
Partitioning
5.1
Row-Based Replication
5.1
1.6.1. MySQL 4.0 in a Nutshell
MySQL 4.0 is available for download at
http://dev.mysql.com/ and from our mirrors. MySQL
4.0 has been tested by a large number of users and is in
production use at many large sites.
The following features were added in MySQL 4.0:
Speed enhancements
MySQL 4.0 implemented a query cache that can give a
major speed boost to applications with repetitive
queries. See Section 5.13, “The MySQL Query Cache”.
MySQL 4.0 further increased the speed of MySQL Server in
a number of areas, such as bulk
INSERT statements, searching on
packed indexes, full-text searching (using
FULLTEXT indexes), and
COUNT(DISTINCT).
InnoDB storage engine as standard
The InnoDB storage engine began to be
offered as a standard feature of the MySQL server. This
provided full support for ACID transactions, foreign
keys with cascading UPDATE and
DELETE, and row-level locking as
standard features. See Section 14.2, “The InnoDB Storage Engine”.
New functionality
The enhanced FULLTEXT search
capabilities of MySQL Server 4.0 enabled
FULLTEXT indexing of large text
masses with both binary and natural-language searching
logic. It became possible to customize minimal word
length and define your own stop word lists in most human
languages, enabling a broader class of applications to
be built with MySQL Server. See
Section 12.7, “Full-Text Search Functions”.
Standards compliance, portability, and migration
MySQL Server added support for the
UNION statement, a standard SQL
feature.
Features to simplify migration from other database
systems to MySQL Server include TRUNCATE
TABLE (as in Oracle)
.
Internationalization
German-speaking users should note that MySQL 4.0 added
support for a new character set,
latin1_de, which ensures that words
with umlauts are sorted in the same order as in German
telephone books.
Usability enhancements
As of version 4.0, most mysqld
parameters (startup options) can be set without taking
down the server. This is a convenient feature for
database administrators. See
Section 13.5.3, “SET Syntax”.
Multiple-table DELETE and
UPDATE statements were added.
On Windows, symbolic link handling at the database level
was enabled by default. On Unix, the
MyISAM storage engine added support
for symbolic linking at the table level (and not just
the database level as before).
The addition of the
SQL_CALC_FOUND_ROWS and
FOUND_ROWS() functions made it
possible to find out the number of rows a
SELECT query that includes a
LIMIT clause would have returned
without that clause.
The Embedded MySQL Server
The embedded server library added in this release can easily
be used to create standalone and embedded applications. The
embedded server provides an alternative to using MySQL in a
client/server environment.
The libmysqld embedded server library
made MySQL Server suitable for a wider range of
applications. Using this library, developers can embed MySQL
Server into various applications and electronics devices,
where the end user has no knowledge of there actually being
an underlying database. Embedded MySQL Server is ideal for
use in Internet appliances, public kiosks, turnkey
hardware/software combination units, high performance
Internet servers, self-contained databases distributed on
CD-ROM, and so on.
MySQL Server 4.0 laid the foundation for new features
implemented in MySQL 4.1, such as subqueries and Unicode
support, which were desired by many of our customers.
A “subquery” is a SELECT
statement nested within another statement. A
“derived table” (an unnamed view) is a
subquery in the FROM clause of
another statement. See Section 13.2.8, “Subquery Syntax”.
BTREE indexing is supported for
HEAP tables, significantly improving
response time for non-exact searches.
Added functionality:
CREATE TABLE
tbl_name2 LIKE
tbl_name1 allows
you to create, with a single statement, a new table with
a structure exactly like that of an existing table.
The MyISAM storage engine added
support for OpenGIS spatial types for storing
geographical data. See
Chapter 16, Spatial Extensions.
Support was added for replication over SSL connections.
Support for a number of additional storage engines was
implemented in the MySQL 4.1 release series:
The EXAMPLE storage engine is a
“stub” engine that serves as an example
in the MySQL source code for writing new storage
engines, and is primarily of interest to developers.
See Section 14.6, “The EXAMPLE Storage Engine”.
NDB Cluster is the storage engine
used by MySQL Cluster to implement tables that are
partitioned over many computers. See
Chapter 15, MySQL Cluster.
The BLACKHOLE storage engine
accepts but does not store data, and always returns
an empty result set. It is for use primarily in
replication. See
Section 14.9, “The BLACKHOLE Storage Engine”.
Note: These engine were
implemented at different points in the development of
MySQL 4.1. Please see the indicated sections for
particulars in each case.
Standards compliance, portability, and
migration:
The enhanced client/server protocol available beginning
with MySQL 4.1.1 provides the ability to pass multiple
warnings to the client, rather than only a single
result, making it much easier to track problems that
occur in operations such as bulk data loading.
To support applications that require the use of local
languages, the MySQL software added extensive Unicode
support through the utf8 and
ucs2 character sets.
Definition of character sets by column, table, and
database. This allows for a high degree of flexibility
in application design, particularly for multi-language
Web sites. See Chapter 10, Character Set Support.
Per-connection time zones support, allowing individual
clients to select their own time zones when necessary.
Usability enhancements:
The addition of a server-based HELP
command that can be used to get help information for SQL
statements. This information is always applicable to the
particular server version being used. Because this
information is available by issuing an SQL statement,
any client can access it. For example, the
help command of the
mysql command-line client has been
modified to have this capability.
The syntax INSERT ... ON DUPLICATE KEY UPDATE
... was implemented. This allows you to update
an existing row if the insert would have caused a
duplicate value for a primary or unique index. See
Section 13.2.4, “INSERT Syntax”.
The following features are implemented in MySQL 5.0.
BIT Data
Type: Can be used to store numbers in binary
notation.
Cursors: Elementary support
for server-side cursors.
Data Dictionary (Information
Schema): The introduction of the
INFORMATION_SCHEMA database in MySQL 5.0
provided a standards-compliant means for accessing the MySQL
Server's metadata; that is, data about the databases
(schemas) on the server and the objects which they contain.
Instance Manager: Can be
used to start and stop the MySQL Server, even from a remote
host.
Precision Math: MySQL 5.0
introduced stricter criteria for acceptance or rejection of
data, and implemented a new library for fixed-point
arithmetic. These contributed to a much higher degree of
accuracy for mathematical operations and greater control
over invalid values.
Storage Engines: Storage
engines added in MySQL 5.0 include
ARCHIVE and FEDERATED.
Stored Routines: Support
for named stored procedures and stored functions was
implemented in MySQL 5.0.
Strict Mode and Standard Error
Handling: MySQL 5.0 added a strict mode where by
it follows standard SQL in a number of ways in which it did
not previously. Support for standard SQLSTATE error messages
was also implemented.
Triggers: MySQL 5.0 added
limited support for triggers.
VARCHAR Data
Type: The maximum effective length of a
VARCHAR column was increased to 65,535
bytes, and stripping of trailing whitespace was eliminated.
(The actual maximum length of a VARCHAR
is determined by the maximum row size and the character set
you use. The maximum effective column
length is subject to a row size of 65,532 bytes.)
Views: MySQL 5.0 added
support for named, updatable views.
This section lists sources of additional information that you may
find helpful, such as the MySQL mailing lists and user forums, and
Internet Relay Chat.
This section introduces the MySQL mailing lists and provides
guidelines as to how the lists should be used. When you subscribe
to a mailing list, you receive all postings to the list as email
messages. You can also send your own questions and answers to the
list.
To subscribe to or unsubscribe from any of the mailing lists
described in this section, visit
http://lists.mysql.com/. For most of them, you can
select the regular version of the list where you get individual
messages, or a digest version where you get one large message per
day.
Please do not send messages about subscribing
or unsubscribing to any of the mailing lists, because such
messages are distributed automatically to thousands of other
users.
Your local site may have many subscribers to a MySQL mailing list.
If so, the site 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.
If you wish to have traffic for a mailing list go to a separate
mailbox in your mail program, set up a filter based on the message
headers. You can use either the List-ID: or
Delivered-To: headers to identify list
messages.
The MySQL mailing lists are as follows:
announce
This list is for announcements of new versions of MySQL and
related programs. This is a low-volume list to which all MySQL
users should subscribe.
mysql
This is 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.
bugs
This list is for people who want to stay informed about issues
reported since the last release of MySQL or who want to be
actively involved in the process of bug hunting and fixing.
See Section 1.8, “How to Report Bugs or Problems”.
internals
This list is for people who work on the MySQL code. This is
also the forum for discussions on MySQL development and for
posting patches.
mysqldoc
This list is for people who work on the MySQL documentation:
people from MySQL AB, translators, and other community
members.
benchmarks
This list is for anyone interested in performance issues.
Discussions concentrate on database performance (not limited
to MySQL), but also include broader categories such as
performance of the kernel, filesystem, disk system, and so on.
packagers
This list is for discussions on packaging and distributing
MySQL. This is the forum used by distribution maintainers to
exchange ideas on packaging MySQL and on ensuring that MySQL
looks and feels as similar as possible on all supported
platforms and operating systems.
java
This list is for discussions about the MySQL server and Java.
It is mostly used to discuss JDBC drivers such as MySQL
Connector/J.
win32
This list is for all topics concerning the MySQL software on
Microsoft operating systems, such as Windows 9x, Me, NT, 2000,
XP, and 2003.
myodbc
This list is for all topics concerning connecting to the MySQL
server with ODBC.
gui-tools
This list is for all topics concerning MySQL graphical user
interface tools such as MySQL Administrator
and MySQL Query Browser.
cluster
This list is for discussion of MySQL Cluster.
dotnet
This list is for discussion of the MySQL server and the .NET
platform. It is mostly related to MySQL Connector/Net.
plusplus
This list is for all topics concerning programming with the
C++ API for MySQL.
perl
This list is for all topics concerning Perl support for MySQL
with DBD::mysql.
If you're unable to get an answer to your questions from a MySQL
mailing list or forum, one option is to purchase support from
MySQL AB. This puts you in direct contact with MySQL developers.
The following table shows some MySQL mailing lists in languages
other than English. These lists are not operated by MySQL AB.
A German mailing list. To subscribe, email subscribe
mysql-de your@email.address to this list. You can
find information about this mailing list at
http://www.4t2.com/mysql/.
A Spanish mailing list. To subscribe, email subscribe
mysql your@email.address to this list.
1.7.1.1. Guidelines for Using the Mailing Lists
Please don't post mail messages from your browser with HTML mode
turned on. Many users don't read mail with a browser.
When you answer a question sent to a mailing list, if you
consider your answer to have broad interest, you may want to
post it to the 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.
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.
1.7.2. MySQL Community Support at the MySQL Forums
The forums at http://forums.mysql.com are an
important community resource. Many forums are available, grouped
into these general categories:
Migration
MySQL Usage
MySQL Connectors
Programming Languages
Tools
3rd-Party Applications
Storage Engines
MySQL Technology
SQL Standards
Business
1.7.3. MySQL Community Support on Internet Relay Chat (IRC)
In addition to the various MySQL mailing lists and forums, you can
find experienced community people on Internet Relay Chat (IRC).
These are the best networks/channels currently known to us:
#mysql is primarily for MySQL questions,
but other database and general SQL questions are welcome.
Questions about PHP, Perl, or C in combination with MySQL are
also common.
If you are looking for IRC client software to connect to an IRC
network, take a look at xChat
(http://www.xchat.org/). X-Chat (GPL licensed) is
available for Unix as well as for Windows platforms (a free
Windows build of X-Chat is available at
http://www.silverex.org/download/).
1.8. How to Report Bugs or Problems
Before posting a bug report about a problem, please try to verify
that it is a bug and that it has not been reported already:
Start by searching the MySQL online manual at
http://dev.mysql.com/doc/. We try to keep the manual up to
date by updating it frequently with solutions to newly found
problems. The change history
(http://dev.mysql.com/doc/mysql/en/news.html) can be
particularly useful since it is quite possible that a newer
version contains a solution to your problem.
If you get a parse error for a SQL statement, please check your
syntax closely. If you can't find something wrong with it, it's
extremely likely that your current version of MySQL Server
doesn't support the syntax you are using. If you are using the
current version and the manual doesn't cover the syntax that you
are using, MySQL Server doesn't support your statement. In this
case, your options are to implement the syntax yourself or email
<licensing@mysql.com> and ask for an offer to
implement it.
If the manual covers the syntax you are using, but you have an
older version of MySQL Server, you should check the MySQL change
history to see when the syntax was implemented. In this case,
you have the option of upgrading to a newer version of MySQL
Server.
You can also use http://www.mysql.com/search/ to
search all the Web pages (including the manual) that are located
at the MySQL AB Web site.
If you can't find an answer in the manual, the bugs database, or the
mailing list archives, check with your local MySQL expert. If you
still can't find an answer to your question, please use the
following guidelines for reporting the bug.
The normal way to report bugs is to visit
http://bugs.mysql.com/, which is the address for our
bugs database. This database is public and can be browsed and
searched by anyone. If you log in to the system, you can enter new
reports. If you have no Web access, you can generate a bug report by
using the mysqlbug script described at the end of
this section.
Bugs posted in the bugs database at
http://bugs.mysql.com/ that are corrected for a given
release are noted in the change history.
If you have found a sensitive security bug in MySQL, you can send
email to <security@mysql.com>.
Writing a good bug report takes patience, but doing it right the
first time saves time both for us and for yourself. A good bug
report, containing a full test case for the bug, makes it very
likely that we will fix the bug in the next release. This section
helps you write your report correctly so that you don't waste your
time doing things that may not help us much or at all. Please read
this section carefully and make sure that all the information
described here is included in your report.
Preferably, you should test the problem using the latest production
or development version of MySQL Server before posting. Anyone should
be able to repeat the bug by just using mysql test <
script_file on your test case or by running the shell or
Perl script that you include in the bug report. Any bug that we are
able to repeat has a high chance of being fixed in the next MySQL
release.
It is most helpful when a good description of the problem is
included in the bug report. That is, give a good example of
everything you did that led to the problem and describe, in exact
detail, the problem itself. The best reports are those that include
a full example showing how to reproduce the bug or problem. See
Section E.1.6, “Making a Test Case If You Experience Table Corruption”.
Remember that it is possible for us to respond to a report
containing too much information, but not to one containing too
little. People often omit facts because they think they know the
cause of a problem and assume that some details don't matter. A good
principle to follow is that if you are in doubt about stating
something, state it. It is faster and less troublesome to write a
couple more lines in your report than to wait longer for the answer
if we must ask you to provide information that was missing from the
initial report.
The most common errors made in bug reports are (a) not including the
version number of the MySQL distribution that you use, and (b) not
fully describing the platform on which the MySQL server is installed
(including the platform type and version number). These are highly
relevant pieces of information, and in 99 cases out of 100, the bug
report is useless without them. Very often we get questions like,
“Why doesn't this work for me?” 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 in newer MySQL versions.
Errors often are platform-dependent. In such cases, it is next to
impossible for us to fix anything without knowing the operating
system and the version number of the platform.
If you compiled MySQL from source, 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. To determine whether your problem
depends on your compiler, we need to know what compiler you used.
Note that every compiling problem should be regarded as a bug and
reported accordingly.
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, it is better that the error message
reported exactly matches the one that the program produces. (Even
the lettercase should be observed.) It is best to copy and paste the
entire error message into your report. You should never try to
reproduce the message from memory.
If you have a problem with Connector/ODBC (MyODBC), please try to
generate a trace file and send it with your report. See the MyODBC
section of Chapter 18, Connectors.
If your report includes long query output lines from test cases that
you run with the mysql command-line tool, you can
make the output more readable by using the
--vertical option or the \G
statement terminator. The EXPLAIN SELECT example
later in this section demonstrates the use of \G.
Please include the following information in your report:
The version number of the MySQL distribution you are using (for
example, MySQL 5.0.19). You can find out which version you are
running by executing mysqladmin version. The
mysqladmin program can be found in the
bin directory under your MySQL installation
directory.
The manufacturer and model of the machine on which you
experience the problem.
The operating system name and version. If you work with Windows,
you can usually get the name and version number by
double-clicking your My Computer icon and pulling down the
“Help/About Windows” menu. For most Unix-like
operating systems, you can get this information by executing the
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 the MySQL software,
include the name and version number of the compiler that you
used. If you have a binary distribution, include the
distribution name.
If the problem occurs during compilation, include the exact
error messages and also a few lines of context around the
offending code in the file where the error occurs.
If mysqld died, you should also report the
statement that crashed mysqld. You can
usually get this information by running
mysqld with query logging enabled, and then
looking in the log after mysqld crashes. See
Section E.1.5, “Using Server Logs to Find Causes of Errors in mysqld”.
If a database table is related to the problem, include the
output from the SHOW CREATE TABLE
db_name.tbl_name
statement in the bug report. This is a very easy way to get the
definition of any table in a database. The information helps us
create a situation matching the one that you have experienced.
The SQL mode in effect when the problem occurred can be
significant, so please report the value of the
sql_mode system variable. For stored
procedure, stored function, and trigger objects, the relevant
sql_mode value is the one in effect when the
object was created. For a stored procedure or function, the
SHOW CREATE PROCEDURE or SHOW CREATE
FUNCTION statement shows the relevant SQL mode, or you
can query INFORMATION_SCHEMA for the
information:
SELECT ROUTINE_SCHEMA, ROUTINE_NAME, SQL_MODE
FROM INFORMATION_SCHEMA.ROUTINES;
For triggers, you can use this statement:
SELECT EVENT_OBJECT_SCHEMA, EVENT_OBJECT_TABLE, TRIGGER_NAME, SQL_MODE
FROM INFORMATION_SCHEMA.TRIGGERS;
For performance-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. You should also include the output from
SHOW CREATE TABLE
tbl_name for each table
that is involved. The more information you provide about your
situation, the more likely it is that someone can help you.
The following is an example of a very good bug report. The
statements are run using the mysql
command-line tool. Note the use of the \G
statement terminator for statements that would otherwise provide
very long output lines that are difficult to read.
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
mysqld, try to provide an input script that
reproduces the anomaly. This script should include any necessary
source files. The more closely the script can reproduce your
situation, the better. If you can make a reproducible test case,
you should upload it to be attached to the bug report.
If you can't provide a script, you should at least include the
output from mysqladmin variables extended-status
processlist in your report to provide some information
on how your system is performing.
If you can't produce a test case with only a few rows, or if the
test table is too big to be included in the bug report (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://ftp.mysql.com/pub/mysql/upload/. Then enter the problem into
our bugs database at http://bugs.mysql.com/.
If you believe that the MySQL server produces a strange result
from a statement, include not only the result, but also your
opinion of what the result should be, and an explanation
describing the basis for your opinion.
When you provide an example of the problem, it's better to use
the table names, variable names, and so forth that exist in your
actual situation than to come up with new names. The problem
could be related to the name of a table or variable. 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. If
you have data that you don't want to be visible to others in the
bug report, you can use FTP to transfer it to
ftp://ftp.mysql.com/pub/mysql/upload/. If the information is really
top secret and you don't want to show it even to us, 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 server, as well as the
options that you use to run any MySQL client programs. The
options to programs such as mysqld and
mysql, and to the
configure script, are often key to resolving
problems and are very relevant. It is never a bad idea to
include them. If your problem involves a program written in a
language such as Perl or PHP, please include the language
processor's version number, as well as the version for any
modules that the program uses. For example, if you have a Perl
script that uses the DBI and
DBD::mysql modules, include the version
numbers for Perl, DBI, and
DBD::mysql.
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 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, do include it. But don't assume
that the patch is all we need, or that we can use it, 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 the exact purpose of the patch, we won't use
it. Test cases help us here. Show that the patch handles all the
situations that may occur. If we find a borderline case (even a
rare one) where the patch won't work, it may be useless.
Guesses about what the bug is, why it occurs, or what it depends
on are usually wrong. Even the MySQL team can't guess such
things without first using a debugger to determine the real
cause of a bug.
Indicate in your bug report that you have checked the reference
manual and mail archive so that others know you have tried to
solve the problem yourself.
If the problem is that your data appears corrupt or you get
errors when you access a particular table, you should first
check your tables and then try to repair them with
CHECK TABLE and REPAIR
TABLE or with