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.16. 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.
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/
If you have any suggestions concerning additions or corrections to
this manual, please send them to the documentation team at
<docs@mysql.com>.
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, Mike
Hillyer, and Jon Stephens. For the many other contributors, see
Appendix C, 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.1. 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.2. The Main Features of MySQL
The following list 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.
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 add an SQL interface to 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 and WHERE clauses
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 command can be used
to retrieve information about databases, database engines,
tables, and indexes.
The EXPLAIN command 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.6, “Treatment of Reserved Words in MySQL”.
You can mix tables from different databases in the same query
(as of MySQL 3.22).
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 (500 before
MySQL 4.1.2). An index may use a prefix of a column for
CHAR, VARCHAR,
BLOB, or TEXT column
types.
Connectivity:
Clients can connect to the MySQL server using TCP/IP sockets
on any platform. On Windows systems in the NT family (NT,
2000, XP, or 2003), clients can connect using named pipes. On
Unix systems, clients can connect using Unix domain socket
files.
In MySQL versions 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.
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 19, 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 19, 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 19, 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. All comparisons
for normal string columns are case-insensitive.
Sorting is done according to the chosen character set (using
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.
Clients and Tools:
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 5, Database Administration.
All MySQL programs can be invoked with the
--help or -? options to
obtain online assistance.
1.4.3. MySQL Stability
This section addresses the questions, “How stable
is MySQL Server?” and, “Can I
depend on MySQL Server in this project?” We will
try to clarify these issues and answer some important questions
that concern many potential users. The information in this section
is based on data gathered from the mailing lists, which are very
active in identifying problems as well as reporting types of use.
The original code stems back to the early 1980s. It provides a
stable code base, and the ISAM table format
used by the original storage engine remains backward-compatible.
At TcX, the predecessor of MySQL AB, MySQL code has worked in
projects since mid-1996, without any problems. When the MySQL
Database Software initially was released to a wider public, our
new users quickly found some pieces of untested code. Each new
release since then has had fewer portability problems, even though
each new release has also had many new features.
Each release of the MySQL Server has been usable. Problems have
occurred only when users try code from the “gray
zones.” Naturally, new users don't know what the gray zones
are; this section therefore attempts to document those areas that
are currently known. The descriptions mostly deal with Versions
3.23 and later of MySQL Server. All known and reported bugs are
fixed in the latest version, with the exception of those listed in
the bugs section, which are design-related. See
Section A.8, “Known Issues in MySQL”.
The MySQL Server design is multi-layered with independent modules.
Some of the newer modules are listed here with an indication of
how well-tested each of them is:
Replication (Stable)
Large groups of servers using replication are in production
use, with good results. Work on enhanced replication features
is continuing.
InnoDB tables (Stable)
The InnoDB transactional storage engine has
been stable since version 3.23.49. InnoDB
is being used in large, heavy-load production systems.
BDB tables (Stable)
The Berkeley DB code is very stable, but we
are still improving the BDB transactional
storage engine interface in MySQL Server.
Full-text searches (Stable)
Full-text searching is widely used. Important feature
enhancements were added in MySQL 4.0 and 4.1.
MyODBC 3.51 (Stable)
MyODBC 3.51 uses ODBC SDK 3.51 and is in
wide production use. Some issues brought up appear to be
application-related and independent of the ODBC driver or
underlying database server.
1.4.4. How Large MySQL Tables Can Be
MySQL 3.22 had a 4GB (4 gigabyte) limit on table size. With the
MyISAM storage engine in MySQL 3.23, the
maximum table size was increased to 65536 terabytes
(2567 – 1 bytes). With this
larger allowed table size, the maximum effective table size for
MySQL databases is usually determined by operating system
constraints on file sizes, not by MySQL internal limits.
The InnoDB storage engine maintains
InnoDB tables within a tablespace that can be
created from several files. This allows a table to exceed the
maximum individual file size. The tablespace can include raw disk
partitions, which allows extremely large tables. The maximum
tablespace size is 64TB.
The following table lists some examples of operating system
file-size limits. This is only a rough guide and is not intended
to be definitive. For the most up-to-date information, be sure to
check the documentation specific to your operating system.
Operating System
File-size Limit
Linux 2.2-Intel 32-bit
2GB (LFS: 4GB)
Linux 2.4+
(using ext3 filesystem) 4TB
Solaris 9/10
16TB
NetWare w/NSS filesystem
8TB
Win32 w/ FAT/FAT32
2GB/4GB
Win32 w/ NTFS
2TB (possibly larger)
MacOS X w/ HFS+
2TB
On Linux 2.2, you can get MyISAM tables larger
than 2GB in size by using the Large File Support (LFS) patch for
the ext2 filesystem. On Linux 2.4, patches also exist for ReiserFS
to get support for big files (up to 2TB). Most current Linux
distributions are based on kernel 2.4 and include all the required
LFS patches. With JFS and XFS, petabyte and larger files are
possible on Linux. However, the maximum available file size still
depends on several factors, one of them being the filesystem used
to store MySQL tables.
For a detailed overview about LFS in Linux, have a look at Andreas
Jaeger's Large File Support in Linux page
at http://www.suse.de/~aj/linux_lfs.html.
Windows users please note: FAT and VFAT (FAT32) are
not considered suitable for production use
with MySQL. Use NTFS instead.
By default, MySQL creates MyISAM tables with an
internal structure that allows a maximum size of about 4GB. You
can check the maximum table size for a MyISAM
table with the SHOW TABLE STATUS statement or
with myisamchk -dv
tbl_name. See
Section 13.5.4, “SHOW Syntax”.
If you need a MyISAM table that is larger than
4GB and your operating system supports large files, the
CREATE TABLE statement supports
AVG_ROW_LENGTH and MAX_ROWS
options. See Section 13.1.5, “CREATE TABLE Syntax”. You can also change
these options with ALTER TABLE to increase a
table's maximum allowable size after the table has been created.
See Section 13.1.2, “ALTER TABLE Syntax”.
Other ways to work around file-size limits for
MyISAM tables are as follows:
If your large table is read-only, you can use
myisampack to compress it.
myisampack usually compresses a table by at
least 50%, so you can have, in effect, much bigger tables.
myisampack also can merge multiple tables
into a single table. See Section 8.2, “myisampack — Generate Compressed, Read-Only MyISAM Tables”.
MySQL includes a MERGE library that allows
you to handle a collection of MyISAM tables
that have identical structure as a single
MERGE table. See
Section 14.2, “The MERGE Storage Engine”.
1.4.5. Year 2000 Compliance
The MySQL Server itself has no problems with Year 2000 (Y2K)
compliance:
MySQL Server uses Unix time functions that handle dates into
the year 2037 for
TIMESTAMP values. For
DATE and DATETIME
values, dates through the year 9999 are
accepted.
All MySQL date functions are implemented in one source file,
sql/time.cc, and are coded very carefully
to be year 2000-safe.
In MySQL, the YEAR column type can store
the years 0 and 1901 to
2155 in one byte and display them using two
or four digits. All two-digit years are considered to be in
the range 1970 to 2069,
which means that if you store 01 in a
YEAR column, MySQL Server treats it as
2001.
The following simple demonstration illustrates that MySQL Server
has no problems with DATE or
DATETIME values through the year 9999, and no
problems with TIMESTAMP values until after the
year 2030:
The final two TIMESTAMP column values are zero
because the year values (2040,
9999) exceed the TIMESTAMP
maximum. The TIMESTAMP data type, which is used
to store the current time, supports values that range from
'1970-01-01 00:00:00' to '2030-01-01
00:00:00' on 32-bit machines (signed value). On 64-bit
machines, TIMESTAMP handles values up to
2106 (unsigned value).
Although MySQL Server itself is Y2K-safe, you may run into
problems if you use it with applications that are not Y2K-safe.
For example, many old applications store or manipulate years using
two-digit values (which are ambiguous) rather than four-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 because different applications
may be written by different programmers, each of whom may use a
different set of conventions and date-handling functions.
Thus, even though MySQL Server has no Y2K problems, it
is the application's responsibility to provide unambiguous
input. See Section 11.3.4, “Y2K Issues and Date Types” for MySQL
Server's rules for dealing with ambiguous date input data that
contains two-digit year values.
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 J, 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 J, 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 function 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 (MySQL Query
Browser, 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 the 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, event, and alert, and sending
messages to a database administrator on alert thresholds.
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 to 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.
In the first release, the Synchronization Manager supports
inserting data into MySQL. This means that initially only
replication from MaxDB to MySQL is supported. In the course of
2005, exporting of data from a MySQL server to the Synchronization
Manager will be added, thus adding support for MySQL to MaxDB
replication scenarios.
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 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.
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.
1.6.1.1. Features Available 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.12, “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).
Introduction of 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. See
Section 1.6.1.2, “The Embedded MySQL Server”.
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 Chapter 15, 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 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.
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.5, “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 16, 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.8, “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,532
bytes, and stripping of trailing whitespace was eliminated.
Views: MySQL 5.0 added
support for named, updateable views.
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.
1.7.1.1. The MySQL Mailing Lists
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.7.1.3, “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, including
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, including 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. Mostly related to the MySQL Connector/Net
provider.
plusplus
This list is for all topics concerning programming with the
C++ API for MySQL.
perl
This list is for all topics concerning the 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. 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. Email subscribe mysql
your@email.address to this list.
1.7.1.2. Asking Questions or Reporting Bugs
Before posting a bug report or question, please do the
following:
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.
Search in the bugs database at
http://bugs.mysql.com/ to see whether the bug
has been reported and fixed.
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 or the archives, check
with your local MySQL expert. If you still can't find an answer
to your question, please follow the guidelines on sending mail
to a MySQL mailing list, outlined in the next section, before
contacting us.
1.7.1.3. How to Report Bugs or Problems
The normal place to report bugs is
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.
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.
We encourage everyone to use the mysqlbug
script to generate a bug report (or a report about any problem).
mysqlbug can be found in the
scripts directory (source distribution) and
in the bin directory under your MySQL
installation directory (binary distribution). If you are unable
to use mysqlbug (for example, if you are
running on Windows), it is still vital that you include all the
necessary information noted in this section (most importantly, a
description of the operating system and the MySQL version).
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.
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 the included
test case or by running the shell or Perl script that is
included in the bug report.
All bugs posted in the bugs database at
http://bugs.mysql.com/ are corrected or
documented in the next MySQL release. If only minor code changes
are needed to correct a problem, we may also post a patch that
fixes the problem.
If you have found a sensitive security bug in MySQL, you can
send email to <security@mysql.com>.
If you have a repeatable bug report, please report it to the
bugs database at http://bugs.mysql.com/. Note
that even in this case it's good to run the
mysqlbug script first to find information
about your system. Any bug that we are able to repeat has a high
chance of being fixed in the next MySQL release.
To report other problems, you can use one of the MySQL mailing
lists.
Remember that it is possible for us to respond to a message
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 is this: 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 used, and (b) not
fully describing the platform on which the MySQL server is
installed (including the platform type and 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?” 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. Sometimes the error is 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 use. Note that every compiling problem should
be regarded as a bug and reported accordingly.
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”.
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 lettercase should be observed.) You
should never try to reproduce from memory what the error message
was; instead, copy and paste the entire message into your
report.
Please remember that many of the people who read your report 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
that would exceed the available width for such a display (for
example, with the EXPLAIN SELECT statement;
see the example later in this section).
Please include the following information in your report:
The version number of the MySQL distribution you are using
(for example, MySQL 4.0.12). 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, the name and version number of the compiler used
are needed. If you have a binary distribution, the
distribution name is needed.
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 query that crashed mysqld. You can
usually find this out by running mysqld
with query logging enabled, and then looking in the log
after mysqld crashes See
Section E.1.5, “Using Log Files to Find Cause of Errors in mysqld”.
If a database table is related to the problem, include the
output from mysqldump --no-data
<