This chapter describes how to obtain and install MySQL:
GnuPG
.
Before installing MySQL, you should do the following:
This section contains the information necessary to carry out these steps. After doing so, you can use the instructions in later sections of the chapter to install the distribution that you choose.
This section lists the operating systems on which you can expect to be able to run MySQL.
We use GNU Autoconf, so it is possible to port MySQL to all modern systems that have a C++ compiler and a working implementation of POSIX threads. (Thread support is needed for the server. To compile only the client code, the only requirement is a C++ compiler.) We use and develop the software ourselves primarily on Linux (SuSE and Red Hat), FreeBSD, and Sun Solaris (Versions 8 and 9).
MySQL has been reported to compile successfully on the following combinations of operating system and thread package. Note that for many operating systems, native thread support works only in the latest versions.
glibc
2.0.7+. See section 2.6.1 Linux Notes.
Not all platforms are equally well-suited for running MySQL. How well a certain platform is suited for a high-load mission-critical MySQL server is determined by the following factors:
pthread_mutex_lock()
is too anxious to yield CPU time, this will hurt
MySQL tremendously. If this issue is not taken care of, adding extra CPUs
will actually make MySQL slower.
Based on the preceding criteria, the best platforms for running
MySQL at this point are x86 with SuSE Linux using a 2.4 kernel, and
ReiserFS (or any similar Linux distribution) and SPARC with Solaris
(2.7-9). FreeBSD comes third, but we really hope it will join the top
club once the thread library is improved. We also hope that at some
point we will be able to include into the top category all other platforms
on which MySQL currently compiles and runs okay, but not quite with the
same level of stability and performance. This will require some
effort on our part in cooperation with the developers of the operating system
and library components that MySQL depends on. If you are interested in
improving one of those components, are in a position to influence its
development, and need more detailed instructions on what MySQL
needs to run better, send an email message to the MySQL internals
mailing list.
See section 1.7.1.1 The MySQL Mailing Lists.
Please note that the purpose of the preceding comparison is not to say that one operating system is better or worse than another in general. We are talking only about choosing an OS for the specific purpose of running MySQL. With this in mind, the result of this comparison would be different if we considered more factors. In some cases, the reason one OS is better than the other could simply be that we have been able to put more effort into testing and optimizing for a particular platform. We are just stating our observations to help you decide which platform to use for running MySQL.
When preparing to install MySQL, you should decide which version to use. MySQL development occurs in several release series, and you can pick the one that best fits your needs. After deciding which version to install, you can choose a distribution format. Releases are available in binary or source format.
The first decision to make is whether you want to use a production (stable) release or a development release. In the MySQL development process, multiple release series co-exist, each at a different stage of maturity:
We don't believe in a complete freeze, as this also leaves out bugfixes and things that ``must be done.'' ``Somewhat frozen'' means that we may add small things that ``almost surely will not affect anything that's already working.'' Naturally, relevant bugfixes from an earlier series propagate to later series.
Normally, if you are beginning to use MySQL for the first time or trying to port it to some system for which there is no binary distribution, we recommend going with the production release series. Currently this is MySQL 4.0. All MySQL releases, even those from development series, are checked with the MySQL benchmarks and an extensive test suite before being issued.
If you are running an old system and want to upgrade, but don't want to take the chance of having a non-seamless upgrade, you should upgrade to the latest version in the same release series you are using (where only the last part of the version number is newer than yours). We have tried to fix only fatal bugs and make small, relatively safe changes to that version.
If you want to use new features not present in the production release series, you can use a version from a development series. Note that development releases are not as stable as production releases.
If you want to use the very latest sources containing all current patches and bugfixes, you can use one of our BitKeeper repositories. These are not ``releases'' as such, but are available as previews of the code on which future releases will be based.
The MySQL naming scheme uses release names that consist of three
numbers and a suffix; for example, mysql-4.1.2-alpha
.
The numbers within the release name are interpreted like this:
4
) is the major version and also describes the
file format. All Version 4 releases have the same file format.
1
) is the release level.
Taken together, the major version and release level constitute the release
series number.
2
) is the version number within the
release series. This is incremented for each new release. Usually you
want the latest version for the series you have chosen.
For each minor update, the last number in the version string is incremented. When there are major new features or minor incompatibilities with previous versions, the second number in the version string is incremented. When the file format changes, the first number is increased.
Release names also include a suffix to indicates the stability level of the release. Releases within a series progress through a set of suffixes to indicate how the stability level improves. The possible suffixes are:
alpha
indicates that the release contains some large section of
new code that hasn't been 100% tested. Known bugs (usually there are none)
should be documented in the News section. See section C MySQL Change History. There are also new
commands and extensions in most alpha releases. Active development that
may involve major code changes can occur in an alpha release, but everything
will be tested before issuing a release. For this reason, there should be
no known bugs in any MySQL release.
beta
means that all new code has been tested. No major new
features that could cause corruption in old code are added. There should
be no known bugs. A version changes from alpha to beta when there
haven't been any reported fatal bugs within an alpha version for at least
a month and we have no plans to add any features that could make any old
command unreliable.
gamma
is a beta that has been around a while and seems to work fine.
Only minor fixes are added. This is what many other companies call a release.
MySQL uses a naming scheme that is slightly different from most other products. In general, it's relatively safe to use any version that has been out for a couple of weeks without being replaced with a new version within the release series.
All releases of MySQL are run through our standard tests and benchmarks to ensure that they are relatively safe to use. Because the standard tests are extended over time to check for all previously found bugs, the test suite keeps getting better.
All releases have been tested at least with:
crash-me
test
Another test is that we use the newest MySQL version in our internal production environment, on at least one machine. We have more than 100GB of data to work with.
After choosing which version of MySQL to install, you should decide
whether to use a binary distribution or a source distribution. In
most cases, you should probably use a binary distribution, if one
exists for your platform. Binary distributions are available in native format
for many platforms, such as RPM files for Linux or DMG package installers for
Mac OS X. Distributions also are available as Zip archives or compressed
tar
files.
Reasons to choose a binary distribution include the following:
-max
suffix and is configured with the same options as
mysqld-max
. See section 5.1.2 The mysqld-max
Extended MySQL Server.
If you want to use the MySQL-Max
RPM, you must first
install the standard MySQL-server
RPM.
Under some circumstances, you probably will be better off installing MySQL from a source distribution:
mysqld
with some extra features that are not
included in the standard binary distributions. Here is a list of the most
common extra options that you may want to use:
--with-innodb
(default for MySQL 4.0 and up)
--with-berkeley-db
(not available on all platforms)
--with-raid
--with-libwrap
--with-named-z-libs
(this is done for some of the binaries)
--with-debug[=full]
mysqld
without some features that are
included in the standard binary distributions. For example,
distributions normally are compiled with support for all character
sets. If you want a smaller MySQL server, you can recompile it with support
for only the character sets you need.
pgcc
) or want to use compiler
options that are better optimized for your processor. Binary distributions
are compiled with options that should work on a variety of processors from
the same processor family.
MySQL is evolving quite rapidly here at MySQL AB and we want to share new developments with other MySQL users. We try to make a release when we have very useful features that others seem to have a need for.
We also try to help out users who request features that are easy to implement. We take note of what our licensed users want to have, and we especially take note of what our extended email-supported customers want and try to help them out.
No one has to download a new release. The News section will tell you if the new release has something you really want. See section C MySQL Change History.
We use the following policy when updating MySQL:
We put a lot of time and effort into making our releases bug-free. To our knowledge, we have not released a single MySQL version with any known ``fatal'' repeatable bugs. (A ``fatal'' bug is something that crashes MySQL under normal usage, produces incorrect answers for normal queries, or has a security problem.)
We have documented all open problems, bugs, and issues that are dependent on design decisions. See section 1.8.7 Known Errors and Design Deficiencies in MySQL.
Our aim is to fix everything that is fixable without risk of making a stable MySQL version less stable. In certain cases, this means we can fix an issue in the development versions, but not in the stable (production) version. Naturally, we document such issues so that users are aware of them.
Here is a description of how our build process works:
mysql
and announce
mailing
lists.
See section 1.7.1.1 The MySQL Mailing Lists.
The announcement message contains a list
of all changes to the release and any known problems with the release.
The Known Problems section in the release notes has been needed
for only a handful of releases.
'a'
release for that
platform. Thanks to our large user base, problems are found quickly.
glibc
library on one of our build
machines that took us a long time to track down.
As a service of MySQL AB, we provide a set of binary distributions of MySQL that are compiled on systems at our site or on systems where supporters of MySQL kindly have given us access to their machines.
In addition to the binaries provided in platform-specific package formats,
we offer binary distributions for a number of platforms in the form of of
compressed tar
files (.tar.gz
files).
See section 2.2 Standard MySQL Installation Using a Binary Distribution.
For Windows distributions, see section 2.2.1 Installing MySQL on Windows.
These distributions are generated using the script
Build-tools/Do-compile
, which compiles the source code and creates
the binary tar.gz
archive using
scripts/make_binary_distribution
.
These binaries are configured and built with the following compilers and
options. This information can also be obtained by looking at the variables
COMP_ENV_INFO
and CONFIGURE_LINE
inside the script
bin/mysqlbug
of every binary tar
file distribution.
The following binaries are built on MySQL AB development systems:
gcc
2.95.3:
CFLAGS="-O2 -mcpu=pentiumpro" CXX=gcc CXXFLAGS="-O2 -mcpu=pentiumpro -felide-constructors" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --disable-shared --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static
icc
(Intel C++ Compiler 8.0):
CC=icc CXX=icc CFLAGS="-O3 -unroll2 -ip -mp -no-gcc -restrict" CXXFLAGS="-O3 -unroll2 -ip -mp -no-gcc -restrict" ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --disable-shared --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --with-embedded-server --with-innodb
ecc
(Intel C++ Itanium Compiler 7.0):
CC=ecc CFLAGS="-O2 -tpp2 -ip -nolib_inline" CXX=ecc CXXFLAGS="-O2 -tpp2 -ip -nolib_inline" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile
ecc
(Intel C++ Itanium Compiler 7.0):
CC=ecc CFLAGS=-tpp1 CXX=ecc CXXFLAGS=-tpp1 ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile
ccc
(Compaq C V6.2-505 / Compaq C++ V6.3-006):
CC=ccc CFLAGS="-fast -arch generic" CXX=cxx CXXFLAGS="-fast -arch generic -noexceptions -nortti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-mysqld-ldflags=-non_shared --with-client-ldflags=-non_shared --disable-shared
gcc
2.95.4:
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared --with-embedded-server --with-innodb
gcc
2.95.3:
CFLAGS="-O2" CXX=gcc CXXFLAGS="-O2 -felide-constructors" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static
gcc
3.2.1:
CXX=gcc ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared
gcc
3.2.3:
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared --with-innodb
gcc
3.2:
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --with-named-z-libs=no --with-named-curses-libs=-lcurses --disable-shared
gcc
3.2:
CC=gcc CFLAGS="-O3 -m64 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -m64 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-named-z-libs=no --with-named-curses-libs=-lcurses --disable-shared
gcc
2.95.3:
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --with-named-curses-libs=-lcurses --disable-shared
cc-5.0
(Sun Forte 5.0):
CC=cc-5.0 CXX=CC ASFLAGS="-xarch=v9" CFLAGS="-Xa -xstrconst -mt -D_FORTEC_ -xarch=v9" CXXFLAGS="-noex -mt -D_FORTEC_ -xarch=v9" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --with-named-z-libs=no --enable-thread-safe-client --disable-shared
gcc
3.2.3:
CFLAGS="-O2 -mcpu=powerpc -Wa,-many " CXX=gcc CXXFLAGS="-O2 -mcpu=powerpc -Wa,-many -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-named-z-libs=no --disable-shared
xlC_r
(IBM Visual Age C/C++ 6.0):
CC=xlc_r CFLAGS="-ma -O2 -qstrict -qoptimize=2 -qmaxmem=8192" CXX=xlC_r CXXFLAGS ="-ma -O2 -qstrict -qoptimize=2 -qmaxmem=8192" ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-named-z-libs=no --disable-shared --with-innodb
gcc
3.3:
CFLAGS="-O2 -mcpu=powerpc -Wa,-many" CXX=gcc CXXFLAGS="-O2 -mcpu=powerpc -Wa,-many -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-named-z-libs=no --disable-shared
xlC_r
(IBM Visual Age C/C++ 6.0):
CC=xlc_r CFLAGS="-ma -O2 -qstrict -qoptimize=2 -qmaxmem=8192" CXX=xlC_r CXXFLAGS="-ma -O2 -qstrict -qoptimize=2 -qmaxmem=8192" ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-named-z-libs=no --disable-shared --with-embedded-server --with-innodb
gcc
3.1:
CFLAGS="-DHPUX -I/opt/dce/include -O3 -fPIC" CXX=gcc CXXFLAGS="-DHPUX -I/opt/dce /include -felide-constructors -fno-exceptions -fno-rtti -O3 -fPIC" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-pthread --with-named-thread-libs=-ldce --with-lib-ccflags=-fPIC --disable-shared
aCC
(HP ANSI C++ B3910B A.03.50):
CC=cc CXX=aCC CFLAGS=+DAportable CXXFLAGS=+DAportable ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared --with-embedded-server --with-innodb
aCC
(HP ANSI C++ B3910B A.03.33):
CC=cc CXX=aCC CFLAGS=+DD64 CXXFLAGS=+DD64 ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared
aCC
(HP ANSI C++ B3910B A.03.33):
CC=cc CXX=aCC CFLAGS="+DAportable" CXXFLAGS="+DAportable" ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared --with-innodb
aCC
(HP aC++/ANSI C B3910B A.05.50):
CC=cc CXX=aCC CFLAGS="+DD64 +DSitanium2" CXXFLAGS="+DD64 +DSitanium2" ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared --with-embedded-server --with-innodb
gcc
3.1:
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared
gcc
2.95.4:
CFLAGS=-DHAVE_BROKEN_REALPATH ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --with-named-z-libs=not-used --disable-shared
gcc
2.95.4:
CFLAGS="-DHAVE_BROKEN_REALPATH -D__USE_UNIX98 -D_REENTRANT -D_THREAD_SAFE -I/usr/local/include/pthread/linuxthreads" CXXFLAGS="-DHAVE_BROKEN_REALPATH -D__USE_UNIX98 -D_REENTRANT -D_THREAD_SAFE -I/usr/local/include/pthread/linuxthreads" ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin --enable-thread-safe-client --enable-local-infile --enable-assembler --with-named-thread-libs="-DHAVE_GLIBC2_STYLE_GETHOSTBYNAME_R -D_THREAD_SAFE -I /usr/local/include/pthread/linuxthreads -L/usr/local/lib -llthread -llgcc_r" --disable-shared --with-embedded-server --with-innodb
gcc
2.95.3qnx-nto 20010315:
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared
The following binaries are built on third-party systems kindly provided to MySQL AB by other users. These are provided only as a courtesy; MySQL AB does not have full control over these systems, so we can provide only limited support for the binaries built on them.
gcc
2.95.3:
CFLAGS="-O3 -mpentium" LDFLAGS=-static CXX=gcc CXXFLAGS="-O3 -mpentium -felide-constructors" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-named-z-libs=no --enable-thread-safe-client --disable-shared
CC
3.2:
CC=cc CFLAGS="-O" CXX=CC ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-named-z-libs=no --enable-thread-safe-client --disable-shared
cc/cxx
(Compaq C V6.3-029i / DIGITAL C++ V6.1-027):
CC="cc -pthread" CFLAGS="-O4 -ansi_alias -ansi_args -fast -inline speed -speculate all" CXX="cxx -pthread" CXXFLAGS="-O4 -ansi_alias -fast -inline speed -speculate all -noexceptions -nortti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-prefix=/usr/local/mysql --with-named-thread-libs="-lpthread -lmach -lexc -lc" --disable-shared --with-mysqld-ldflags=-all-static
gcc
3.0.1:
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared
gcc
3.2.1:
CFLAGS=-DHAVE_BROKEN_REALPATH ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared --with-innodb
The following compile options have been used for binary packages that MySQL AB provided in the past. These binaries no longer are being updated, but the compile options are listed here for reference purposes.
egcs
1.1.2:
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --disable-shared
gcc
2.95.2:
CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static --disable-shared --with-extra-charsets=complex
gcc
2.7.2.1:
CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors" ./configure --prefix=/usr/local/mysql --disable-shared --with-extra-charsets=complex --enable-assembler
egcs
1.0.3a or 2.90.27 or gcc
2.95.2 and newer:
CC=gcc CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-low-memory --with-extra-charsets=complex --enable-assembler
gcc
2.8.1:
CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql --with-low-memory --with-extra-charsets=complex
gcc
2.7.2.1:
CC=gcc CXX=gcc CXXFLAGS=-O ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex
gcc
2.7.2:
CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex
gcc
2.7.2.2:
CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex
Anyone who has more optimal options for any of the preceding configurations
listed can always mail them to the MySQL internals
mailing list.
See section 1.7.1.1 The MySQL Mailing Lists.
RPM distributions prior to MySQL 3.22 are user-contributed. Beginning with MySQL 3.22, RPM distributions are generated by MySQL AB.
If you want to compile a debug version of MySQL, you should add
--with-debug
or --with-debug=full
to the preceding
configure
commands and remove any -fomit-frame-pointer
options.
Check the MySQL home page (http://www.mysql.com/) for information about the current version and for downloading instructions.
Our main mirror is located at http://mirrors.sunsite.dk/mysql/.
For a complete up-to-date list of MySQL download mirror sites, see http://dev.mysql.com/downloads/mirrors.html. There you will also find information about becoming a MySQL mirror site and how to report a bad or out-of-date mirror.
GnuPG
After you have downloaded the MySQL package that suits your needs and before you attempt to install it, you should make sure that it is intact and has not been tampered with. MySQL AB offers three means of integrity checking:
GnuPG
, the GNU Privacy Guard
The following sections describe how to use these methods.
If you notice that the MD5 checksum or GPG signatures do not match, first try to download the respective package one more time, perhaps from another mirror site. If you repeatedly cannot successfully verify the integrity of the package, please notify us about such incidents, including the full package name and the download site you have been using, at [email protected] or [email protected]. Do not report downloading problems using the bug-reporting system.
After you have downloaded a MySQL package, you should make sure that its MD5
checksum matches the one provided on the MySQL download pages. Each package
has an individual checksum that you can verify with the following command,
where package_name
is the name of the package you downloaded:
shell> md5sum package_name
Example:
shell> md5sum mysql-standard-4.0.17-pc-linux-i686.tar.gz 60f5fe969d61c8f82e4f7f62657e1f06 mysql-standard-4.0.17-pc-linux-i686.tar.gz
You should verify that the resulting checksum (the string of hexadecimal digits) matches the one displayed on the download page immediately below the respective package.
Note that not all operating systems support the md5sum
command. On
some, it is simply called md5
and others do not ship it at all. On
Linux, it is part of the GNU Text Utilities
package, which is
available for a wide range of platforms. You can download the source code
from http://www.gnu.org/software/textutils/ as well. If you have
OpenSSL
installed, you can also use the command openssl md5
package_name
instead. A DOS/Windows implementation of the md5
command is available from http://www.fourmilab.ch/md5/.
GnuPG
Another method of verifying the integrity and authenticity of a package is to use cryptographic signatures. This is more reliable than using MD5 checksums, but requires more work.
Beginning with MySQL 4.0.10 (February 2003), MySQL AB started signing
downloadable packages with GnuPG
(GNU Privacy Guard
).
GnuPG
is an Open Source alternative to the very well-known
Pretty Good Privacy
(PGP
) by Phil Zimmermann.
See http://www.gnupg.org/ for more information about GnuPG
and how to obtain and install it on your system. Most Linux distributions
already ship with GnuPG
installed by default. For more information
about OpenPGP
, see http://www.openpgp.org/.
To verify the signature for a specific package, you first need to obtain a
copy of MySQL AB's public GPG build key. You can download the key from
http://www.keyserver.net/. The key that you want to obtain is named
[email protected]
. Alternatively, you can cut and paste the key
directly from the following text:
Key ID: pub 1024D/5072E1F5 2003-02-03 MySQL Package signing key (www.mysql.com) <[email protected]> Fingerprint: A4A9 4068 76FC BD3C 4567 70C8 8C71 8D3B 5072 E1F5 Public Key (ASCII-armored): -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (GNU/Linux) Comment: For info see http://www.gnupg.org mQGiBD4+owwRBAC14GIfUfCyEDSIePvEW3SAFUdJBtoQHH/nJKZyQT7h9bPlUWC3 RODjQReyCITRrdwyrKUGku2FmeVGwn2u2WmDMNABLnpprWPkBdCk96+OmSLN9brZ fw2vOUgCmYv2hW0hyDHuvYlQA/BThQoADgj8AW6/0Lo7V1W9/8VuHP0gQwCgvzV3 BqOxRznNCRCRxAuAuVztHRcEAJooQK1+iSiunZMYD1WufeXfshc57S/+yeJkegNW hxwR9pRWVArNYJdDRT+rf2RUe3vpquKNQU/hnEIUHJRQqYHo8gTxvxXNQc7fJYLV K2HtkrPbP72vwsEKMYhhr0eKCbtLGfls9krjJ6sBgACyP/Vb7hiPwxh6rDZ7ITnE kYpXBACmWpP8NJTkamEnPCia2ZoOHODANwpUkP43I7jsDmgtobZX9qnrAXw+uNDI QJEXM6FSbi0LLtZciNlYsafwAPEOMDKpMqAK6IyisNtPvaLd8lH0bPAnWqcyefep rv0sxxqUEMcM3o7wwgfN83POkDasDbs3pjwPhxvhz6//62zQJ7Q7TXlTUUwgUGFj a2FnZSBzaWduaW5nIGtleSAod3d3Lm15c3FsLmNvbSkgPGJ1aWxkQG15c3FsLmNv bT6IXQQTEQIAHQUCPj6jDAUJCWYBgAULBwoDBAMVAwIDFgIBAheAAAoJEIxxjTtQ cuH1cY4AnilUwTXn8MatQOiG0a/bPxrvK/gCAJ4oinSNZRYTnblChwFaazt7PF3q zIhMBBMRAgAMBQI+PqPRBYMJZgC7AAoJEElQ4SqycpHyJOEAn1mxHijft00bKXvu cSo/pECUmppiAJ41M9MRVj5VcdH/KN/KjRtW6tHFPYhMBBMRAgAMBQI+QoIDBYMJ YiKJAAoJELb1zU3GuiQ/lpEAoIhpp6BozKI8p6eaabzF5MlJH58pAKCu/ROofK8J Eg2aLos+5zEYrB/LsrkCDQQ+PqMdEAgA7+GJfxbMdY4wslPnjH9rF4N2qfWsEN/l xaZoJYc3a6M02WCnHl6ahT2/tBK2w1QI4YFteR47gCvtgb6O1JHffOo2HfLmRDRi Rjd1DTCHqeyX7CHhcghj/dNRlW2Z0l5QFEcmV9U0Vhp3aFfWC4Ujfs3LU+hkAWzE 7zaD5cH9J7yv/6xuZVw411x0h4UqsTcWMu0iM1BzELqX1DY7LwoPEb/O9Rkbf4fm Le11EzIaCa4PqARXQZc4dhSinMt6K3X4BrRsKTfozBu74F47D8Ilbf5vSYHbuE5p /1oIDznkg/p8kW+3FxuWrycciqFTcNz215yyX39LXFnlLzKUb/F5GwADBQf+Lwqq a8CGrRfsOAJxim63CHfty5mUc5rUSnTslGYEIOCR1BeQauyPZbPDsDD9MZ1ZaSaf anFvwFG6Llx9xkU7tzq+vKLoWkm4u5xf3vn55VjnSd1aQ9eQnUcXiL4cnBGoTbOW I39EcyzgslzBdC++MPjcQTcA7p6JUVsP6oAB3FQWg54tuUo0Ec8bsM8b3Ev42Lmu QT5NdKHGwHsXTPtl0klk4bQk4OajHsiy1BMahpT27jWjJlMiJc+IWJ0mghkKHt92 6s/ymfdf5HkdQ1cyvsz5tryVI3Fx78XeSYfQvuuwqp2H139pXGEkg0n6KdUOetdZ Whe70YGNPw1yjWJT1IhMBBgRAgAMBQI+PqMdBQkJZgGAAAoJEIxxjTtQcuH17p4A n3r1QpVC9yhnW2cSAjq+kr72GX0eAJ4295kl6NxYEuFApmr1+0uUq/SlsQ== =YJkx -----END PGP PUBLIC KEY BLOCK-----
You can import the build key into your personal public GPG keyring by using
gpg --import
. For example, if you save the key in a file named
`mysql_pubkey.asc', the import command looks like this:
shell> gpg --import mysql_pubkey.asc
See the GPG documentation for more information on how to work with public keys.
After you have downloaded and imported the public build key, download your desired MySQL package and the corresponding signature, which also is available from the download page. The signature file has the same name as the distribution file with an `.asc' extension. For example:
Distribution file | mysql-standard-4.0.17-pc-linux-i686.tar.gz
|
Signature file | mysql-standard-4.0.17-pc-linux-i686.tar.gz.asc
|
Make sure that both files are stored in the same directory and then run the following command to verify the signature for the distribution file:
shell> gpg --verify package_name.asc
Example:
shell> gpg --verify mysql-standard-4.0.17-pc-linux-i686.tar.gz.asc gpg: Warning: using insecure memory! gpg: Signature made Mon 03 Feb 2003 08:50:39 PM MET using DSA key ID 5072E1F5 gpg: Good signature from "MySQL Package signing key (www.mysql.com) <[email protected]>"
The Good signature
message indicates that everything is all right.
You can ignore the insecure memory
warning.
RPM
For RPM packages, there is no separate signature. RPM packages have a built-in GPG signature and MD5 checksum. You can verify a package by running the following command:
shell> rpm --checksig package_name.rpm
Example:
shell> rpm --checksig MySQL-server-4.0.10-0.i386.rpm MySQL-server-4.0.10-0.i386.rpm: md5 gpg OK
Note: If you are using RPM 4.1 and it complains about (GPG)
NOT OK (MISSING KEYS: GPG#5072e1f5)
, even though you have imported the
MySQL public build key into your own GPG keyring, you need to import the
key into the RPM keyring first. RPM 4.1 no longer uses your personal GPG
keyring (or GPG itself). Rather, it maintains its own keyring because it is
a system-wide application and a user's GPG public keyring is a user-specific
file. To import the MySQL public key into the RPM keyring, first obtain the
key as described in the previous section. Then use rpm --import
to import the key. For example, if you have the public key stored in a file
named `mysql_pubkey.asc', import it using this command:
shell> rpm --import mysql_pubkey.asc
This section describes the default layout of the directories created by installing binary or source distributions provided by MySQL AB. If you install a distribution provided by another vendor, some other layout might be used.
On Windows, the default installation directory is `C:\mysql', which has the following subdirectories:
Directory | Contents of Directory |
`bin' | Client programs and the mysqld server
|
`data' | Log files, databases |
`Docs' | Documentation |
`examples' | Example programs and scripts |
`include' | Include (header) files |
`lib' | Libraries |
`scripts' | Utility scripts |
`share' | Error message files |
Installations created from Linux RPM distributions result in files under the following system directories:
Directory | Contents of Directory |
`/usr/bin' | Client programs and scripts |
`/usr/sbin' | The mysqld server
|
`/var/lib/mysql' | Log files, databases |
`/usr/share/doc/packages' | Documentation |
`/usr/include/mysql' | Include (header) files |
`/usr/lib/mysql' | Libraries |
`/usr/share/mysql' | Error message and character set files |
`/usr/share/sql-bench' | Benchmarks |
On Unix, a tar
file
binary distribution is installed by unpacking it at the installation
location you choose (typically `/usr/local/mysql') and creates the
following directories in that location:
Directory | Contents of Directory |
`bin' | Client programs and the mysqld server
|
`data' | Log files, databases |
`docs' | Documentation, ChangeLog |
`include' | Include (header) files |
`lib' | Libraries |
`scripts' | mysql_install_db
|
`share/mysql' | Error message files |
`sql-bench' | Benchmarks |
A source distribution is installed after you configure and compile it. By default, the installation step installs files under `/usr/local', in the following subdirectories:
Directory | Contents of Directory |
`bin' | Client programs and scripts |
`include/mysql' | Include (header) files |
`info' | Documentation in Info format |
`lib/mysql' | Libraries |
`libexec' | The mysqld server
|
`share/mysql' | Error message files |
`sql-bench' | Benchmarks and crash-me test
|
`var' | Databases and log files |
Within an installation directory, the layout of a source installation differs from that of a binary installation in the following ways:
mysqld
server is installed in the `libexec'
directory rather than in the `bin' directory.
mysql_install_db
is installed in the `bin' directory
rather than in the `scripts' directory.
You can create your own binary installation from a compiled source distribution by executing the `scripts/make_binary_distribution' script from the top directory of the source distribution.
This section covers the installation of MySQL on platforms where we offer packages using the native packaging format of the respective platform. (This is also known as performing a ``binary install.'') However, binary distributions of MySQL are available for many other platforms as well. See section 2.2.5 Installing MySQL on Other Unix-Like Systems for generic installation instructions for these packages that apply to all platforms.
See section 2.1 General Installation Issues for more information on what other binary distributions are available and how to obtain them.
The installation process for MySQL on Windows has the following steps:
MySQL for Windows is available in two distribution formats:
Generally speaking, you should use the binary distribution. It's simpler, and you need no additional tools to get MySQL up and running.
This section describes how to install MySQL on Windows using a binary distribution. To install using a source distribution, see section 2.3.6 Installing MySQL from Source on Windows.
To run MySQL on Windows, you need the following:
WinZip
or other Windows tool that can read `.zip' files,
to unpack the distribution file.
MyODBC
driver. See section 21.3 MySQL ODBC Support.
MAX_ROWS
and
AVG_ROW_LENGTH
when you create tables.
See section 14.2.5 CREATE TABLE
Syntax.
To install MySQL on Windows using a binary distribution, follow this procedure:
C:\> NET STOP MySQLIf you plan to use a different server after the upgrade (for example, if you want to run
mysqld-max
rather than mysqld
),
remove the existing service:
C:\> C:\mysql\bin\mysqld --removeYou can reinstall the service to use the proper server after upgrading. If you are not running the MySQL server as a service, stop it like this:
C:\> C:\mysql\bin\mysqladmin -u root shutdown
WinMySQLAdmin
program if it is running.
setup.exe
program to begin the installation process.
If you want to install MySQL into a location other than the default directory
(`C:\mysql'), use the Browse
button to specify your
preferred directory. If you do not install MySQL into the default location,
you will need to specify the location whenever you start the server. The
easiest way to do this is to use an option file, as described in
section 2.2.1.3 Preparing the Windows MySQL Environment.
Important note:
Early alpha Windows distributions for MySQL 4.1 do not contain an
installer program. A 4.1 distribution is a Zip file that you just
unzip in the location where you want to install MySQL. For example,
to install `mysql-4.1.1-alpha-win.zip' as `C:\mysql', unzip
the distribution file on the C:
drive, then rename the resulting
`mysql-4.1.1-alpha' directory to `mysql'.
If you are upgrading to MySQL 4.1 from an earlier version, you will want to
preserve your existing `data' directory that contains the grant tables
in the mysql
database and your own databases. Before installing 4.1,
stop the server if it is running, and save your `data' directory to
another location. Then either rename the existing `C:\mysql' directory
or remove it. Install 4.1 as described in the preceding paragraph, and then
replace its `data' directory with your old `data' directory.
This will avoid the loss of your current databases.
Start the new server and update the grant tables.
See section 2.5.8 Upgrading the Grant Tables.
If you need to specify startup options when you run the server, you can indicate them on the command line or place them in an option file. For options that will be used every time the server starts, you will find it most convenient to use an option file to specify your MySQL configuration. This is true particularly under the following circumstances:
InnoDB
transactional tables in
MySQL 3.23, you must manually add some extra lines to the option
file, as described in section 16.4 InnoDB
Configuration.
(As of MySQL 4.0, InnoDB
creates its data files and log files in the data
directory by default. This means you need not configure InnoDB
explicitly.
You may still do so if you wish, and an option file will be useful in this
case, too.)
On Windows, the MySQL installer places the data directory directly under the directory where you install MySQL. If you would like to use a data directory in a different location, you should copy the entire contents of the `data' directory to the new location. For example, by default, the installer places MySQL in `C:\mysql' and the data directory in `C:\mysql\data'. If you want to use a data directory of `E:\mydata', you must do two things:
--datadir
option to specify the new data directory location
each time you start the server.
When the MySQL server starts on Windows, it looks for options in
two files: the `my.ini' file in the Windows directory, and
the `C:\my.cnf' file. The Windows directory typically is
named something like `C:\WINDOWS' or `C:\WinNT'. You
can determine its exact location from the value of the WINDIR
environment variable using the following command:
C:\> echo %WINDIR%
MySQL looks for options first in the `my.ini' file, then in
the `my.cnf' file. However, to avoid confusion, it's best if
you use only one file. If your PC uses a boot loader where the
C:
drive isn't the boot drive, your only option is to use
the `my.ini' file. Whichever option file you use, it must be a plain
text file.
An option file can be created and modified with any text editor,
such as the Notepad
program. For example, if MySQL is
installed at `E:\mysql' and the data directory is located at
`E:\mydata\data', you can create the option file and set up
a [mysqld]
section to specify values for the basedir
and datadir
parameters:
[mysqld] # set basedir to your installation path basedir=E:/mysql # set datadir to the location of your data directory datadir=E:/mydata/data
Note that Windows pathnames are specified in option files using forward slashes rather than backslashes. If you do use backslashes, you must double them.
Another way to manage an option file is to use the WinMySQLAdmin
tool. You can find WinMySQLAdmin
in the `bin' directory
of your MySQL installation, as well as a help file containing
instructions for using it. WinMySQLAdmin
has the capability
of editing your option file, but note these points:
WinMySQLAdmin
uses only the `my.ini' file.
WinMySQLAdmin
finds a `C:\my.cnf' file, it will in fact rename
it to `C:\my_cnf.bak' to disable it.
Now you are ready to start the server.
Starting with MySQL 3.23.38, the Windows distribution includes both the normal and the MySQL-Max server binaries. Here is a list of the different MySQL servers from which you can choose:
Binary | Description |
mysqld | Compiled with full debugging and automatic memory allocation checking, symbolic links, and InnoDB and BDB tables.
|
mysqld-opt | Optimized binary. From version 4.0 on, InnoDB is enabled. Before 4.0, this server includes no transactional table support.
|
mysqld-nt | Optimized binary for Windows NT, 2000, and XP with support for named pipes. |
mysqld-max | Optimized binary with support for symbolic links, and InnoDB and BDB tables.
|
mysqld-max-nt | Like mysqld-max , but compiled with support for named pipes.
|
All of the preceding binaries are optimized for modern Intel processors, but should work on any Intel i386-class or higher processor.
MySQL supports TCP/IP on all Windows platforms. The mysqld-nt
and mysql-max-nt
servers support named pipes on NT, 2000, and XP.
However, the default is to use TCP/IP regardless of the platform.
(Named pipes are slower than TCP/IP in many Windows configurations.)
Named pipe use is subject to these conditions:
--enable-named-pipe
option.
It is now necessary to use this option explicitly because some users have
experienced problems shutting down the MySQL server when named pipes
were used.
mysqld-nt
or mysqld-max-nt
servers, and only if the server is
run on a version of Windows that supports named pipes (NT, 2000, XP).
Note:
Most of the examples in the following sections use mysqld
as the
server name. If you choose to use a different server, such as
mysqld-opt
, make the appropriate substitutions in the commands that
are shown in the examples. One good reason to choose a different server is
that because mysqld
contains full debugging support, it uses more
memory and runs slower than the other Windows servers.
On Windows 95, 98, or Me, MySQL clients always connect to the server using TCP/IP. (This will allow any machine on your network to connect to your MySQL server.) Because of this, you must make sure that TCP/IP support is installed on your machine before starting MySQL. You can find TCP/IP on your Windows CD-ROM.
Note that if you are using an old Windows 95 release (for example, OSR2), it's likely that you have an old Winsock package; MySQL requires Winsock 2! You can get the newest Winsock from http://www.microsoft.com/. Windows 98 has the new Winsock 2 library, so it is unnecessary to update the library.
On NT-based systems such as Windows NT, 2000, or XP, clients have two options. They can use TCP/IP, or they can use a named pipe if the server supports named pipe connections.
For information about which server binary to run, see section 2.2.1.4 Selecting a Windows Server.
This section gives a general overview of starting the MySQL server. The following sections provide more specific information for particular versions of Windows.
The examples in these sections assume that MySQL is installed under the default location of `C:\mysql'. Adjust the pathnames shown in the examples if you have MySQL installed in a different location.
Testing is best done from a command prompt in a console window (a ``DOS window''). This way you can have the server display status messages in the window where they are easy to see. If something is wrong with your configuration, these messages will make it easier for you to identify and fix any problems.
To start the server, enter this command:
C:\> C:\mysql\bin\mysqld --console
For servers that include InnoDB
support,
you should see the following messages as the server starts:
InnoDB: The first specified datafile c:\ibdata\ibdata1 did not exist: InnoDB: a new database to be created! InnoDB: Setting file c:\ibdata\ibdata1 size to 209715200 InnoDB: Database physically writes the file full: wait... InnoDB: Log file c:\iblogs\ib_logfile0 did not exist: new to be created InnoDB: Setting log file c:\iblogs\ib_logfile0 size to 31457280 InnoDB: Log file c:\iblogs\ib_logfile1 did not exist: new to be created InnoDB: Setting log file c:\iblogs\ib_logfile1 size to 31457280 InnoDB: Log file c:\iblogs\ib_logfile2 did not exist: new to be created InnoDB: Setting log file c:\iblogs\ib_logfile2 size to 31457280 InnoDB: Doublewrite buffer not found: creating new InnoDB: Doublewrite buffer created InnoDB: creating foreign key constraint system tables InnoDB: foreign key constraint system tables created 011024 10:58:25 InnoDB: Started
When the server finishes its startup sequence, you should see something like this, which indicates that the server is ready to service client connections:
mysqld: ready for connections Version: '4.0.14-log' socket: '' port: 3306
The server will continue to write to the console any further diagnostic output it produces. You can open a new console window in which to run client programs.
If you omit the --console
option, the server writes diagnostic output
to the error log in the data directory (`C:\mysql\data' by default).
The error log is the file with the `.err' extension.
Note: The accounts that are listed in the MySQL grant tables initially have no passwords. After starting the server, you should set up passwords for them using the instructions in section 2.4 Post-Installation Setup and Testing.
The MySQL server can be started manually from the command line. This can be done on any version of Windows.
To start the mysqld
server from the command line, you should
start a console window (a ``DOS window'') and enter this command:
C:\> C:\mysql\bin\mysqld
On non-NT versions of Windows, this will start mysqld
in the
background. That is, after the server starts, you should see another
command prompt. If you start the server this way on Windows NT, 2000, or XP,
the server will run in the foreground and no command prompt will appear
until the server exits. Because of this, you should open another console
window to run client programs while the server is running.
You can stop the MySQL server by executing this command:
C:\> C:\mysql\bin\mysqladmin -u root shutdown
This invokes the MySQL administrative utility mysqladmin
to
connect to the server and tell it to shut down. The command connects
as root
, which is the default administrative account in the
MySQL grant system. Note that users in the MySQL grant system
are wholly independent from any login users under Windows.
If mysqld
doesn't start, check the error log to see whether the
server wrote any messages there to indicate the cause of the problem.
The error log is located in the `C:\mysql\data' directory. It is
the file with a suffix of `.err'. You can also try to start the
server as mysqld --console
; in this case, you may get some useful
information on the screen that may help solve the problem.
The last option is to start mysqld
with
--standalone --debug
.
In this case, mysqld
will write a log file
`C:\mysqld.trace' that should contain the reason why
mysqld
doesn't start. See section D.1.2 Creating Trace Files.
Use mysqld --help
to display all the options that
mysqld
understands!
On the NT family (Windows NT, 2000, or XP), the recommended way to run MySQL
is to install it as a Windows service. Then Windows starts and stops the MySQL
server automatically when Windows starts and stops. A server installed as a
service can also be controlled from the command line using NET
commands, or with the graphical Services
utility.
The Services
utility (the Windows
Service Control Manager
) can be found in the Windows
Control Panel
(under Administrative Tools
on Windows 2000 or XP). It is advisable to close the Services
utility
while performing server installation or removal operations from this command
line. This prevents some odd errors.
To get MySQL to work with TCP/IP on Windows NT 4, you must install service pack 3 (or newer).
Before installing MySQL as a Windows service, you should first stop the current server if it is running by using the following command:
C:\> C:\mysql\bin\mysqladmin -u root shutdown
This invokes the MySQL administrative utility mysqladmin
to
connect to the server and tell it to shut down. The command connects
as root
, which is the default administrative account in the
MySQL grant system. Note that users in the MySQL grant system
are wholly independent from any login users under Windows.
Now install the server as a service:
C:\> mysqld --install
If you have problems installing mysqld
as a
service using just the server name, try installing it using its full pathname:
C:\> C:\mysql\bin\mysqld --install
As of MySQL 4.0.2, you can specify a specific service name after the
--install
option. As of MySQL 4.0.3, you can in addition specify a
--defaults-file
option after the service name to indicate where the
server should obtain options when it starts. The rules that determine the
service name and option files the server uses are as follows:
MySQL
and the server reads options from the [mysqld]
group in
the standard option files.
--install
option, the server ignores the [mysqld]
option
group and instead reads options from the group that has the same name as the
service. The server reads options from the standard option files.
--defaults-file
option after the service name,
the server ignores the standard option files and reads options only from the
[mysqld]
group of the named file.
Note: Prior to MySQL 4.0.17, a server installed as a Windows service has problems starting if its pathname or the service name contains spaces. For this reason, avoid installing MySQL in a directory such as `C:\Program Files' or using a service name containing spaces.
In the usual case that you install the server with --install
but no service name, the server is installed with a service
name of MySQL
.
As a more complex example, consider the following command:
C:\> C:\mysql\bin\mysqld --install mysql --defaults-file=C:\my-opts.cnf
Here, a service name is given after the --install
option. If no
--defaults-file
option had been given, this command would have the
effect of causing the server to read the [mysql]
group from the
standard option files. (This would be a bad idea, because that option group
is for use by the mysql
client program.) However, because the
--defaults-file
option is present, the server reads options only from
the named file, and only from the [mysqld]
option group.
You can also specify options as ``Start parameters
'' in the
Windows Services
utility before you start the MySQL service.
Once a MySQL server is installed as a service, Windows will start
the service automatically whenever Windows starts. The service also
can be started immediately from the Services
utility, or by
using the command NET START MySQL
. The NET
command
is not case sensitive.
When run as a service, mysqld
has no access
to a console window, so no messages can be seen there. If
mysqld
doesn't start, check the error log to see whether the
server wrote any messages there to indicate the cause of the problem.
The error log is located in the `C:\mysql\data' directory. It
is the file with a suffix of `.err'.
When mysqld
is running as a service, it can be stopped by
using the Services
utility, the command NET STOP
MySQL
, or the command mysqladmin shutdown
. If the service
is running when Windows shuts down, Windows will stop the server
automatically.
From MySQL 3.23.44 on, you have the choice of installing the
server as a Manual
service if you don't wish the service to
be started automatically during the boot process. To do this, use
the --install-manual
option rather than the --install
option:
C:\> C:\mysql\bin\mysqld --install-manual
To remove a server that is installed as a service, first stop it if it is
running. Then use the --remove
option to remove it:
C:\> C:\mysql\bin\mysqld --remove
For MySQL versions older than 3.23.49, one problem with automatic
MySQL service shutdown is that Windows waited only for a few
seconds for the shutdown to complete, then killed the database
server process if the time limit was exceeded. This had the potential
to cause problems. (For example, the InnoDB
storage engine
had to perform crash recovery at the next startup.) Starting from
MySQL 3.23.49, Windows waits longer for the MySQL server
shutdown to complete. If you notice this still is not enough for
your installation, it is safest not to run the MySQL server as a
service. Instead, start it from the command-line prompt, and stop
it with mysqladmin shutdown
.
This change to tell Windows to wait longer when stopping the MySQL server
works for Windows 2000 and XP. It does not work for Windows NT, where Windows
waits only 20 seconds for a service to shut down, and after that kills the
service process. You can increase this default by opening the Registry
Editor `\winnt\system32\regedt32.exe' and editing the value of
WaitToKillServiceTimeout
at
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
in the Registry tree. Specify the new larger value in milliseconds.
For example, the value 120000 tells Windows NT to wait up to 120 seconds.
If you don't want to start mysqld
as a service, you can
start it from the command line. For instructions, see section 2.2.1.6 Starting MySQL from the Windows Command Line.
You can test whether the MySQL server is working by executing any of the following commands:
C:\> C:\mysql\bin\mysqlshow C:\> C:\mysql\bin\mysqlshow -u root mysql C:\> C:\mysql\bin\mysqladmin version status proc C:\> C:\mysql\bin\mysql test
If mysqld
is slow to respond to TCP/IP connections from client programs
on Windows 9x/Me, there is
probably a problem with your DNS. In this case, start mysqld
with the
--skip-name-resolve
option and use only localhost
and IP
numbers in the Host
column of the MySQL grant tables.
You can force a MySQL client to use a named pipe connection rather than TCP/IP
by specifying the
--pipe
option or by specifying .
(period) as the host
name. Use the --socket
option to specify the name of the
pipe. As of MySQL 4.1, you should use the --protocol=PIPE
option.
There are two versions of the MySQL command-line tool:
Binary | Description |
mysql | Compiled on native Windows, offering limited text editing capabilities. |
mysqlc | Compiled with the Cygnus GNU compiler and libraries, which offers readline editing.
|
If you want to use mysqlc
, you must have a copy of the
`cygwinb19.dll' library installed somewhere that mysqlc
can find it. Current distributions of MySQL include this library
in the same directory as mysqlc
(the `bin' directory
under the base directory of your MySQL installation). If your
distribution does not have the cygwinb19.dll
library in the
`bin' directory, look for it in the lib
directory and
copy it to your Windows system directory
(`\Windows\system' or a similar place).
MySQL for Windows has by now proven itself to be very stable. The Windows version of MySQL has the same features as the corresponding Unix version, with the following exceptions:
mysqld
for an extended time on Windows 95 if your server handles
many connections! Other versions of Windows don't suffer from this bug.
pread()
and pwrite()
calls to be
able to mix INSERT
and SELECT
. Currently we use mutexes
to emulate pread()
/pwrite()
. We will, in the long run,
replace the file level interface with a virtual interface so that we can
use the readfile()
/writefile()
interface on NT, 2000, and XP to
get more speed.
The current implementation limits the number of open files MySQL can use to
2,048 (1,024 before MySQL 4.0.19), which means that you will not be able to
run as many concurrent threads on NT, 2000, and XP as on Unix.
mysqladmin kill
will not work on a sleeping connection.
mysqladmin shutdown
can't abort as long as there are sleeping
connections.
ALTER TABLE
ALTER TABLE
statement, the table is locked
from being used by other threads. This has to do with the fact that on Windows,
you can't delete a file that is in use by another thread. In the future,
we may find some way to work around this problem.
DROP TABLE
DROP TABLE
on a table that is in use by a MERGE
table will
not work on Windows because the MERGE
handler does the table mapping
hidden from the upper layer of MySQL. Because Windows doesn't allow you
to drop files that are open, you first must flush all MERGE
tables (with FLUSH TABLES
) or drop the MERGE
table before
dropping the table. We will fix this at the same time we introduce
views.
DATA DIRECTORY
and INDEX DIRECTORY
DATA DIRECTORY
and INDEX DIRECTORY
options for
CREATE TABLE
are ignored on Windows, because Windows doesn't support
symbolic links. These options also are ignored on systems that have a
non-functional realpath()
call.
DROP DATABASE
mysqladmin shutdown
.
LOAD
DATA INFILE
or SELECT ... INTO OUTFILE
,
use Unix-style filenames with `/' characters:
mysql> LOAD DATA INFILE 'C:/tmp/skr.txt' INTO TABLE skr; mysql> SELECT * INTO OUTFILE 'C:/tmp/skr.txt' FROM skr;Alternatively, you must double the `\' character:
mysql> LOAD DATA INFILE 'C:\\tmp\\skr.txt' INTO TABLE skr; mysql> SELECT * INTO OUTFILE 'C:\\tmp\\skr.txt' FROM skr;
^Z
/ CHAR(24)
, Windows will think it
has encountered end-of-file and abort the program.
This is mainly a problem when you try to apply a binary log as follows:
C:\> mysqlbinlog binary-log-name | mysql --user=rootIf you have a problem applying the log and suspect that it is because of a
^Z
/ CHAR(24)
character, you can use the following workaround:
C:\> mysqlbinlog binary-log-file --result-file=/tmp/bin.sql C:\> mysql --user=root --execute "source /tmp/bin.sql"The latter command also can be used to reliably read in any SQL file that may contain binary data.
Can't open named pipe
error
error 2017: can't open named pipe to host: . pipe...This happens because the release version of MySQL uses named pipes on NT by default. You can avoid this error by using the
--host=localhost
option to the new MySQL clients or by creating an option file
`C:\my.cnf' that contains the following information:
[client] host = localhostStarting from 3.23.50, named pipes are enabled only if
mysqld-nt
or
mysqld-max-nt
is started with --enable-named-pipe
.
Access denied for user
error
Access denied
for user 'some-user@unknown' to database 'mysql'
, this means
that MySQL cannot resolve your hostname properly.
To fix this, you should create a file named `\windows\hosts' containing
the following information:
127.0.0.1 localhost
Here are some open issues for anyone who might want to help us improve MySQL on Windows:
mysqld
from the Task Manager
in Windows 95. For the moment, you must use mysqladmin shutdown
.
readline
to Windows for use in the mysql
command-line tool.
mysql
,
mysqlshow
, mysqladmin
, and mysqldump
) would be nice.
mysqladmin kill
on Windows.
The recommended way to install MySQL on Linux is by using the RPM
packages. The MySQL RPMs are currently built on a SuSE Linux 7.3
system, but should work on most versions of Linux that support rpm
and use glibc
.
To obtain RPM packages, see section 2.1.3 How to Get MySQL.
Note: RPM distributions of MySQL often are provided by other vendors. Be aware that they may differ in features and capabilities from those built by MySQL AB, and that the instructions in this manual do not necessarily apply to installing them. The vendor's instructions should be consulted instead.
If you have problems with an RPM file (for example, if you receive the error
``Sorry, the host 'xxxx' could not be looked up
''), see
section 2.6.1.2 Linux Binary Distribution Notes.
In most cases, you only need to install the MySQL-server
and
MySQL-client
packages to get a functional MySQL installation. The
other packages are not required for a standard installation.
If you want to run a MySQL-Max server that has additional capabilities,
you should also install the MySQL-Max
RPM. However, you should do so only
after installing the MySQL-server
RPM.
See section 5.1.2 The mysqld-max
Extended MySQL Server.
If you get a dependency failure when trying to install the MySQL 4.0
packages (for example, ``error: removing these packages would break dependencies:
libmysqlclient.so.10 is needed by ...
''), you should also install
the package MySQL-shared-compat
, which includes both the
shared libraries for backward compatibility (libmysqlclient.so.12
for MySQL 4.0 and libmysqlclient.so.10
for MySQL 3.23).
Many Linux distributions still ship with MySQL 3.23 and they usually link
applications dynamically to save disk space. If these shared libraries are
in a separate package (for example, MySQL-shared
), it is
sufficient to simply leave this package installed and just upgrade
the MySQL server and client packages (which are statically linked
and do not depend on the shared libraries). For distributions that
include the shared libraries in the same package as the MySQL server
(for example, Red Hat Linux), you could either install our 3.23
MySQL-shared
RPM, or use the MySQL-shared-compat
package instead.
The following RPM packages are available:
MySQL-server-VERSION.i386.rpm
The MySQL server. You will need this unless you only want to
connect to a MySQL server running on another machine. Note:
Server RPM files were called MySQL-VERSION.i386.rpm
before
MySQL 4.0.10. That is, they did not have -server
in the name.
MySQL-Max-VERSION.i386.rpm
The MySQL-Max server. This server has additional capabilities that the
one provided in the MySQL-server
RPM does not. You must install the
MySQL-server
RPM first, because the MySQL-Max
RPM depends on it.
MySQL-client-VERSION.i386.rpm
The standard MySQL client programs. You probably always want to
install this package.
MySQL-bench-VERSION.i386.rpm
Tests and benchmarks. Requires Perl and the DBD::mysql
module.
MySQL-devel-VERSION.i386.rpm
The libraries and include files that are needed if you want to compile other
MySQL clients, such as the Perl modules.
MySQL-shared-VERSION.i386.rpm
This package contains the shared libraries (libmysqlclient.so*
)
that certain languages and applications need to dynamically load and
use MySQL.
MySQL-shared-compat-VERSION.i386.rpm
This package includes the shared libraries for both MySQL 3.23 and
MySQL 4.0. Install this package instead of MySQL-shared
if you
have applications installed that are dynamically linked against MySQL
3.23 but you want to upgrade to MySQL 4.0 without breaking the library
dependencies. This package has been available since MySQL 4.0.13.
MySQL-embedded-VERSION.i386.rpm
The embedded MySQL server library (from MySQL 4.0).
MySQL-VERSION.src.rpm
This contains the source code for all of the previous packages. It can also
be used to rebuild the RPMs on other architectures (for example, Alpha or SPARC).
To see all files in an RPM package (for example, a MySQL-server
RPM), run:
shell> rpm -qpl MySQL-server-VERSION.i386.rpm
To perform a standard minimal installation, run:
shell> rpm -i MySQL-server-VERSION.i386.rpm shell> rpm -i MySQL-client-VERSION.i386.rpm
To install just the client package, run:
shell> rpm -i MySQL-client-VERSION.i386.rpm
RPM provides a feature to verify the integrity and authenticity of packages
before installing them. If you would like to learn more about this feature,
see section 2.1.4 Verifying Package Integrity Using MD5 Checksums or GnuPG
.
The server RPM places data under the `/var/lib/mysql' directory. The
RPM also creates a login account for a user named mysql
(if one does not
already exist) to use for running the MySQL server, and
creates the appropriate entries in `/etc/init.d/' to start the
server automatically at boot time. (This means that if you have performed a
previous installation and have made changes to its startup script, you may
want to make a copy of the script so that you don't lose it when you install a
newer RPM.) See section 2.4.2.2 Starting and Stopping MySQL Automatically for more information on how MySQL can be
started automatically on system startup.
If you want to install the MySQL RPM on older Linux distributions that do not support initialization scripts in `/etc/init.d' (directly or via a symlink), you should create a symbolic link that points to the location where your initialization scripts actually are installed. For example, if that location is `/etc/rc.d/init.d', use these commands before installing the RPM to create `/etc/init.d' as a symbolic link that points there:
shell> cd /etc shell> ln -s rc.d/init.d .
However, all current major Linux distributions should already support the new directory layout that uses `/etc/init.d', because it is required for LSB (Linux Standard Base) compliance.
If the RPM files that you install include MySQL-server
, the
mysqld
server should be up and running after installation.
You should now be able to start using MySQL.
If something goes wrong, you can find more information in the binary installation section. See section 2.2.5 Installing MySQL on Other Unix-Like Systems.
Note: The accounts that are listed in the MySQL grant tables initially have no passwords. After starting the server, you should set up passwords for them using the instructions in section 2.4 Post-Installation Setup and Testing.
Beginning with MySQL 4.0.11, you can install MySQL on Mac OS X 10.2.x (``Jaguar'') and up using a Mac OS X binary package in PKG format instead of the binary tarball distribution. Please note that older versions of Mac OS X (for example, 10.1.x) are not supported by this package.
The package is located inside a disk image (.dmg
) file that you
first need to mount by double-clicking its icon in the Finder. It should
then mount the image and display its contents.
To obtain MySQL, see section 2.1.3 How to Get MySQL.
Note: Before proceeding with the installation, be sure to
shut down all running MySQL server instances by either
using the MySQL Manager Application (on Mac OS X Server) or via
mysqladmin shutdown
on the command line.
To actually install the MySQL PKG file, double-click on the package icon. This launches the Mac OS X Package Installer, which will guide you through the installation of MySQL.
Due to a bug in the Mac OS X package installer, you may see this error message in the destination disk selection dialog:
You cannot install this software on this disk. (null)
If this error occurs, simply click the Go Back
button once to return
to the previous screen. Then click Continue
to advance to the
destination disk selection again, and you should be able to choose the
destination disk correctly. We have reported this bug to Apple and it is
investigating this problem.
The Mac OS X PKG of MySQL will install itself into
`/usr/local/mysql-VERSION' and will also install a symbolic link,
`/usr/local/mysql', pointing to the new location. If a directory named
`/usr/local/mysql' already exists, it will be renamed to
`/usr/local/mysql.bak' first. Additionally, the installer will create the
grant tables in the mysql
database by executing mysql_install_db
after the installation.
The installation layout is similar to that of a tar
file binary
distribution; all MySQL binaries are located in the directory
`/usr/local/mysql/bin'. The MySQL socket file is created as
`/tmp/mysql.sock' by default.
See section 2.1.5 Installation Layouts.
MySQL installation requires a Mac OS X user account named mysql
. A
user account with this name should exist by default on Mac OS X 10.2 and up.
If you are running Mac OS X Server, you already have a version of MySQL installed. The versions of MySQL that ship with Mac OS X Server versions are shown in the following table:
Mac OS X Server Version | MySQL Version |
10.2-10.2.2 | 3.23.51 |
10.2.3-10.2.6 | 3.23.53 |
10.3 | 4.0.14 |
10.3.2 | 4.0.16 |
This manual section covers the installation of the official MySQL Mac OS X PKG only. Make sure to read Apple's help information about installing MySQL: Run the ``Help View'' application, select ``Mac OS X Server'' help, do a search for ``MySQL,'' and read the item entitled ``Installing MySQL.''
For pre-installed versions of MySQL on Mac OS X Server, note especially that
you should start mysqld
with safe_mysqld
instead of
mysqld_safe
if MySQL is older than version 4.0.
If you previously used Marc Liyanage's MySQL packages for Mac OS X from http://www.entropy.ch, you can simply follow the update instructions for packages using the binary installation layout as given on his pages.
If you are upgrading from Marc's 3.23.xx versions or from the Mac OS X Server version of MySQL to the official MySQL PKG, you also need to convert the existing MySQL privilege tables to the current format, because some new security privileges have been added. See section 2.5.8 Upgrading the Grant Tables.
If you would like to automatically start up MySQL during system startup, you
also need to install the MySQL Startup Item. Starting with MySQL 4.0.15, it
is part of the Mac OS X installation disk images as a separate installation
package. Simply double-click the MySQLStartupItem.pkg
icon and follow
the instructions to install it.
Note that the Startup Item need be installed only once! There is no need to install it each time you upgrade the MySQL package later.
The Startup Item will be installed into
`/Library/StartupItems/MySQLCOM'. (Before MySQL 4.1.2, the location
was `/Library/StartupItems/MySQL', but that collided with the MySQL
Startup Item installed by Mac OS X Server.) Startup Item installation
adds a variable MYSQLCOM=-YES-
to the system configuration file
`/etc/hostconfig'. If you would like to disable the automatic startup
of MySQL, simply change this variable to MYSQLCOM=-NO-
.
On Mac OS X Server, the default MySQL installation uses the variable
MYSQL
in the `/etc/hostconfig' file. The MySQL AB Startup Item
installer disables this variable by setting it to MYSQL=-NO-
. This
avoids boot time conflicts with the MYSQLCOM
variable used by the
MySQL AB Startup Item. However, it does not shut down an already running
MySQL server. You should do that yourself.
After the installation, you can start up MySQL by running the following commands in a terminal window. You must have administrator privileges to perform this task.
If you have installed the Startup Item:
shell> sudo /Library/StartupItems/MySQLCOM/MySQL start (Enter your password, if necessary) (Press Control-D or enter "exit" to exit the shell)
For versions of MySQL older than 4.1.2, substitute
/Library/StartupItems/MySQLCOM/MySQL
with
/Library/StartupItems/MySQL/MySQL
above.
If you don't use the Startup Item, enter the following command sequence:
shell> cd /usr/local/mysql shell> sudo ./bin/mysqld_safe (Enter your password, if necessary) (Press Control-Z) shell> bg (Press Control-D or enter "exit" to exit the shell)
You should now be able to connect to the MySQL server, for example, by running `/usr/local/mysql/bin/mysql'.
Note: The accounts that are listed in the MySQL grant tables initially have no passwords. After starting the server, you should set up passwords for them using the instructions in section 2.4 Post-Installation Setup and Testing.
You might want to add aliases to your shell's resource file to make it easier
to access commonly used programs such as mysql
and mysqladmin
from the command line. The syntax for tcsh
is:
alias mysql /usr/local/mysql/bin/mysql alias mysqladmin /usr/local/mysql/bin/mysqladmin
For bash
, use:
alias mysql=/usr/local/mysql/bin/mysql alias mysqladmin=/usr/local/mysql/bin/mysqladmin
Even better,
add /usr/local/mysql/bin
to
your PATH
environment variable. For example, add the following
line to your `$HOME/.tcshrc' file if your shell is tcsh
:
setenv PATH ${PATH}:/usr/local/mysql/bin
If no `.tcshrc' file exists in your home directory, create it with a text editor.
If you are upgrading an existing installation, please note that installing a new MySQL PKG does not remove the directory of an older installation. Unfortunately, the Mac OS X Installer does not yet offer the functionality required to properly upgrade previously installed packages.
To use your existing databases with the new installation, you'll need to copy the contents of the old data directory to the new data directory. Make sure that neither the old server nor the new one is running when you do this. After you have copied over the MySQL database files from the previous installation and have successfully started the new server, you should consider removing the old installation files to save disk space. Additionally, you should also remove older versions of the Package Receipt directories located in `/Library/Receipts/mysql-VERSION.pkg'.
Porting MySQL to NetWare was an effort spearheaded by Novell. Novell customers will be pleased to note that NetWare 6.5 ships with bundled MySQL binaries, complete with an automatic commercial use license for all servers running that version of NetWare.
MySQL for NetWare is compiled using a combination of Metrowerks
CodeWarrior for NetWare
and special cross-compilation versions of the
GNU autotools.
The latest binary packages for NetWare can be obtained at http://dev.mysql.com/downloads/. See section 2.1.3 How to Get MySQL.
In order to host MySQL, the NetWare server must meet these requirements:
To install MySQL for NetWare, use the following procedure:
SERVER: mysqladmin -u root shutdown
SERVER: SEARCH ADD SYS:MYSQL\BIN
mysql_install_db
at the server console.
mysqld_safe
at the server console.
autoexec.ncf
. For example, if your MySQL installation is in
`SYS:MYSQL' and you want MySQL to start automatically, you could
add these lines:
#Starts the MySQL 4.0.x database server SEARCH ADD SYS:MYSQL\BIN MYSQLD_SAFEIf you are running MySQL on NetWare 6.0, we strongly suggest that you use the
--skip-external-locking
option on the command line:
#Starts the MySQL 4.0.x database server SEARCH ADD SYS:MYSQL\BIN MYSQLD_SAFE --skip-external-lockingIt will also be necessary to use
CHECK TABLE
and REPAIR
TABLE
instead of myisamchk
, because myisamchk
makes use
of external locking. External locking is known to have problems on
NetWare 6.0; the problem has been eliminated in NetWare 6.5.
mysqld_safe
on NetWare provides a screen presence. When you unload
(shut down) the mysqld_safe
NLM, the screen does not by default go
away. Instead, it prompts for user input:
*<NLM has terminated; Press any key to close the screen>*If you want NetWare to close the screen automatically instead, use the
--autoclose
option to mysqld_safe
. For example:
#Starts the MySQL 4.0.x database server SEARCH ADD SYS:MYSQL\BIN MYSQLD_SAFE --autoclose
The behavior of mysqld_safe
on NetWare is described further in
section 5.1.3 The mysqld_safe
Server Startup Script.
If there was an existing installation of MySQL on the server, be sure
to check for existing MySQL startup commands in autoexec.ncf
,
and edit or delete them as necessary.
Note: The accounts that are listed in the MySQL grant tables initially have no passwords. After starting the server, you should set up passwords for them using the instructions in section 2.4 Post-Installation Setup and Testing.
This section covers the installation of MySQL binary distributions that are
provided for various platforms in the form of compressed tar
files
(files with a .tar.gz
extension). See section 2.1.2.5 MySQL Binaries Compiled by MySQL AB for a
detailed list.
To obtain MySQL, see section 2.1.3 How to Get MySQL.
MySQL tar
file binary distributions have names of the form
`mysql-VERSION-OS.tar.gz', where VERSION
is a number (for
example, 4.0.17
), and OS
indicates the type of operating
system for which the distribution is intended (for example,
pc-linux-gnu-i586
).
In addition to these generic packages, we also offer binaries in platform-specific package formats for selected platforms. See section 2.2 Standard MySQL Installation Using a Binary Distribution for more information on how to install these.
You need the following tools to install a MySQL tar
file binary
distribution:
gunzip
to uncompress the distribution.
tar
to unpack the distribution. GNU tar
is known
to work. Some operating systems come with a pre-installed version of
tar
that is known to have problems. For example, Mac OS X tar
and Sun tar
are known to have problems with long filenames. On Mac
OS X, you can use the pre-installed gnutar
program. On other systems
with a deficient tar
, you should install GNU tar
first.
If you run into problems, please always use mysqlbug
when
posting questions to a MySQL mailing list. Even if the problem
isn't a bug, mysqlbug
gathers system information that will help others
solve your problem. By not using mysqlbug
, you lessen the likelihood
of getting a solution to your problem. You will find mysqlbug
in the
`bin' directory after you unpack the distribution. See section 1.7.1.3 How to Report Bugs or Problems.
The basic commands you must execute to install and use a MySQL binary distribution are:
shell> groupadd mysql shell> useradd -g mysql mysql shell> cd /usr/local shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf - shell> ln -s full-path-to-mysql-VERSION-OS mysql shell> cd mysql shell> scripts/mysql_install_db --user=mysql shell> chown -R root . shell> chown -R mysql data shell> chgrp -R mysql . shell> bin/mysqld_safe --user=mysql &
For versions of MySQL older than 4.0, substitute bin/safe_mysqld
for bin/mysqld_safe
in the final command.
Note: This procedure does not set up any passwords for MySQL accounts. After following the procedure, proceed to section 2.4 Post-Installation Setup and Testing.
A more detailed version of the preceding description for installing a binary distribution follows:
mysqld
to run as:
shell> groupadd mysql shell> useradd -g mysql mysqlThese commands add the
mysql
group and the mysql
user. The
syntax for useradd
and groupadd
may differ slightly on different
versions of Unix. They may also be called adduser
and addgroup
.
You might want to call the user and group something else instead
of mysql
. If so, substitute the appropriate name in the
following steps.
root
.)
shell> cd /usr/local
shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf - shell> ln -s full-path-to-mysql-VERSION-OS mysqlThe
tar
command creates a directory named `mysql-VERSION-OS'. The
ln
command makes a symbolic link to that directory. This lets you refer
more easily to the installation directory as `/usr/local/mysql'.
With GNU tar
, no separate invocation of gunzip
is necessary.
You can replace the first line with the following
alternative command to uncompress and extract the distribution:
shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz
shell> cd mysqlYou will find several files and subdirectories in the
mysql
directory.
The most important for installation purposes are the `bin' and
`scripts' subdirectories.
PATH
environment variable so that your shell finds the MySQL
programs properly. See section E Environment Variables.
mysql_install_db
script used to initialize
the mysql
database containing the grant tables that store the server
access permissions.
shell> scripts/mysql_install_db --user=mysqlIf you run the command as
root
, you should use the --user
option as shown. The value of the option should be the name of the login
account that you created in the first step to use for running the server.
If you run the command while logged in as that user, you can omit the
--user
option.
Note that for MySQL versions older than 3.22.10,
mysql_install_db
left the server running after creating the grant
tables. This is no longer true; you will need to restart the server after
performing the remaining steps in this procedure.
root
and ownership of the
data directory to the user that you will run mysqld
as. Assuming
that you are located in the installation directory
(`/usr/local/mysql'), the commands look like this:
shell> chown -R root . shell> chown -R mysql data shell> chgrp -R mysql .The first command changes the owner attribute of the files to the
root
user. The second changes the owner attribute of the
data directory to the mysql
user. The third changes the
group attribute to the mysql
group.
support-files/mysql.server
to the location where
your system has its startup files. More information can be found in the
support-files/mysql.server
script itself and in
section 2.4.2.2 Starting and Stopping MySQL Automatically.
bin/mysql_setpermission
script if
you install the DBI
and DBD::mysql
Perl modules.
For instructions, see section 2.7 Perl Installation Notes.
mysqlaccess
and have the MySQL
distribution in some non-standard place, you must change the location where
mysqlaccess
expects to find the mysql
client. Edit the
`bin/mysqlaccess' script at approximately line 18. Search for a line
that looks like this:
$MYSQL = '/usr/local/bin/mysql'; # path to mysql executableChange the path to reflect the location where
mysql
actually is
stored on your system. If you do not do this, you will get a Broken
pipe
error when you run mysqlaccess
.
After everything has been unpacked and installed, you should test your distribution.
You can start the MySQL server with the following command:
shell> bin/mysqld_safe --user=mysql &
For versions of MySQL older than 4.0, substitute bin/safe_mysqld
for bin/mysqld_safe
in the command.
More information about mysqld_safe
is given in
section 5.1.3 The mysqld_safe
Server Startup Script.
Note: The accounts that are listed in the MySQL grant tables initially have no passwords. After starting the server, you should set up passwords for them using the instructions in section 2.4 Post-Installation Setup and Testing.
Before you proceed with the source installation, check first to see whether our binary is available for your platform and whether it will work for you. We put a lot of effort into making sure that our binaries are built with the best possible options.
To obtain a source distribution for MySQL, section 2.1.3 How to Get MySQL.
MySQL source distributions are provided as compressed tar
archives and have names of the form `mysql-VERSION.tar.gz', where
VERSION
is a number like 5.0.0-alpha
.
You need the following tools to build and install MySQL from source:
gunzip
to uncompress the distribution.
tar
to unpack the distribution. GNU tar
is known
to work. Some operating systems come with a pre-installed version of
tar
that is known to have problems. For example, Mac OS X tar
and Sun tar
are known to have problems with long filenames. On Mac
OS X, you can use the pre-installed gnutar
program. On other systems
with a deficient tar
, you should install GNU tar
first.
gcc
2.95.2 or later, egcs
1.0.2 or later or egcs 2.91.66
, SGI C++, and SunPro C++ are some of the
compilers that are known to work. libg++
is not needed when
using gcc
. gcc
2.7.x has a bug that makes it impossible
to compile some perfectly legal C++ files, such as
`sql/sql_base.cc'. If you have only gcc
2.7.x, you must
upgrade your gcc
to be able to compile MySQL. gcc
2.8.1 is also known to have problems on some platforms, so it should be
avoided if a new compiler exists for the platform.
gcc
2.95.2 or later is recommended when compiling MySQL
3.23.x.
make
program. GNU make
is always recommended and is
sometimes required. If you have problems, we recommend trying GNU
make
3.75 or newer.
If you are using a version of gcc
recent enough to understand the
-fno-exceptions
option, it is very important that you use
this option. Otherwise, you may compile a binary that crashes randomly. We also
recommend that you use -felide-constructors
and -fno-rtti
along
with -fno-exceptions
. When in doubt, do the following:
CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors \ -fno-exceptions -fno-rtti" ./configure \ --prefix=/usr/local/mysql --enable-assembler \ --with-mysqld-ldflags=-all-static
On most systems, this will give you a fast and stable binary.
If you run into problems, please always use mysqlbug
when
posting questions to a MySQL mailing list. Even if the problem
isn't a bug, mysqlbug
gathers system information that will help others
solve your problem. By not using mysqlbug
, you lessen the likelihood
of getting a solution to your problem. You will find mysqlbug
in the
`scripts' directory after you unpack the distribution.
See section 1.7.1.3 How to Report Bugs or Problems.
The basic commands you must execute to install a MySQL source distribution are:
shell> groupadd mysql shell> useradd -g mysql mysql shell> gunzip < mysql-VERSION.tar.gz | tar -xvf - shell> cd mysql-VERSION shell> ./configure --prefix=/usr/local/mysql shell> make shell> make install shell> cp support-files/my-medium.cnf /etc/my.cnf shell> cd /usr/local/mysql shell> bin/mysql_install_db --user=mysql shell> chown -R root . shell> chown -R mysql var shell> chgrp -R mysql . shell> bin/mysqld_safe --user=mysql &
For versions of MySQL older than 4.0, substitute bin/safe_mysqld
for bin/mysqld_safe
in the final command.
If you start from a source RPM, do the following:
shell> rpm --rebuild --clean MySQL-VERSION.src.rpm
This will make a binary RPM that you can install.
Note: This procedure does not set up any passwords for MySQL accounts. After following the procedure, proceed to section 2.4 Post-Installation Setup and Testing, for post-installation setup and testing.
A more detailed version of the preceding description for installing MySQL from a source distribution follows:
mysqld
to run as:
shell> groupadd mysql shell> useradd -g mysql mysqlThese commands add the
mysql
group and the mysql
user. The
syntax for useradd
and groupadd
may differ slightly on different
versions of Unix. They may also be called adduser
and addgroup
.
You might want to call the user and group something else instead
of mysql
. If so, substitute the appropriate name in the
following steps.
shell> gunzip < /path/to/mysql-VERSION.tar.gz | tar xvf -This command creates a directory named `mysql-VERSION'. With GNU
tar
, no separate invocation of gunzip
is necessary.
You can use the following alternative command to uncompress and extract
the distribution:
shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz
shell> cd mysql-VERSIONNote that currently you must configure and build MySQL from this top-level directory. You cannot build it in a different directory.
shell> ./configure --prefix=/usr/local/mysql shell> makeWhen you run
configure
, you might want to specify some options.
Run ./configure --help
for a list of options.
section 2.3.2 Typical configure
Options, discusses some of the
more useful options.
If configure
fails and you are going to send mail to a MySQL mailing
list to ask for assistance, please include any
lines from `config.log' that you think can help solve the problem. Also
include the last couple of lines of output from configure
.
Post the bug report using the mysqlbug
script. See section 1.7.1.3 How to Report Bugs or Problems.
If the compile fails, see section 2.3.4 Dealing with Problems Compiling MySQL for help.
shell> make installIf you want to set up an option file, use one of those present in the `support-files' directory as a template. For example:
shell> cp support-files/my-medium.cnf /etc/my.cnfYou might need to run these commands as
root
.
If you want to configure support for InnoDB
tables, you should edit the
/etc/my.cnf
file, remove the #
character before the
option lines that start with innodb_...
, and modify the option values
to be what you want.
See section 4.3.2 Using Option Files
and section 16.4 InnoDB
Configuration.
shell> cd /usr/local/mysql
shell> bin/mysql_install_db --user=mysqlIf you run the command as
root
, you should use the --user
option as shown. The value of the option should be the name of the login
account that you created in the first step to use for running the server.
If you run the command while logged in as that user, you can omit the
--user
option.
Note that for MySQL versions older than 3.22.10,
mysql_install_db
left the server running after creating the grant
tables. This is no longer true; you will need to restart the server after
performing the remaining steps in this procedure.
root
and ownership of the
data directory to the user that you will run mysqld
as. Assuming
that you are located in the installation directory
(`/usr/local/mysql'), the commands look like this:
shell> chown -R root . shell> chown -R mysql var shell> chgrp -R mysql .The first command changes the owner attribute of the files to the
root
user. The second changes the owner attribute of the
data directory to the mysql
user. The third changes the
group attribute to the mysql
group.
support-files/mysql.server
to the location where
your system has its startup files. More information can be found in the
support-files/mysql.server
script itself and in
section 2.4.2.2 Starting and Stopping MySQL Automatically.
bin/mysql_setpermission
script if
you install the DBI
and DBD::mysql
Perl modules.
For instructions, see section 2.7 Perl Installation Notes.
After everything has been installed, you should initialize and test your distribution using this command:
shell> /usr/local/mysql/bin/mysqld_safe --user=mysql &
For versions of MySQL older than 4.0, substitute safe_mysqld
for mysqld_safe
in the command.
If that command fails immediately and prints mysqld ended
, you can
find some information in the `host_name.err' file in the data directory.
More information about mysqld_safe
is given in
section 5.1.3 The mysqld_safe
Server Startup Script.
Note: The accounts that are listed in the MySQL grant tables initially have no passwords. After starting the server, you should set up passwords for them using the instructions in section 2.4 Post-Installation Setup and Testing.
configure
Options
The configure
script gives you a great deal of control over how
you configure a MySQL source distribution. Typically you do this
using options on the configure
command line. You can also affect
configure
using certain environment variables. See section E Environment Variables. For a list of options supported by configure
, run
this command:
shell> ./configure --help
Some of the more commonly used configure
options are described here:
--without-server
option:
shell> ./configure --without-serverIf you don't have a C++ compiler,
mysql
will not compile (it is the
one client program that requires C++). In this case,
you can remove the code in configure
that tests for the C++ compiler
and then run ./configure
with the --without-server
option. The
compile step will still try to build mysql
, but you can ignore any
warnings about `mysql.cc'. (If make
stops, try make -k
to tell it to continue with the rest of the build even if errors occur.)
libmysqld.a
) you should
use the --with-embedded-server
option.
configure
command something like one
of these:
shell> ./configure --prefix=/usr/local/mysql shell> ./configure --prefix=/usr/local \ --localstatedir=/usr/local/mysql/dataThe first command changes the installation prefix so that everything is installed under `/usr/local/mysql' rather than the default of `/usr/local'. The second command preserves the default installation prefix, but overrides the default location for database directories (normally `/usr/local/var') and changes it to
/usr/local/mysql/data
. After you have compiled MySQL, you can
change these options with option files. See section 4.3.2 Using Option Files.
configure
command like this:
shell> ./configure \ --with-unix-socket-path=/usr/local/mysql/tmp/mysql.sockThe socket filename must be an absolute pathname. You can also change the location of `mysql.sock' later by using a MySQL option file. See section A.4.5 How to Protect or Change the MySQL Socket File `/tmp/mysql.sock'.
configure
like this:
shell> ./configure --with-client-ldflags=-all-static \ --with-mysqld-ldflags=-all-static
gcc
and don't have libg++
or libstdc++
installed, you can tell configure
to use gcc
as your C++
compiler:
shell> CC=gcc CXX=gcc ./configureWhen you use
gcc
as your C++ compiler, it will not attempt to link in
libg++
or libstdc++
. This may be a good idea to do even if you
have these libraries installed, because some versions of them have
caused strange problems for MySQL users in the past.
The following list indicates some compilers and environment variable settings
that are commonly used with each one.
gcc
2.7.2:
CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors"
egcs
1.0.3a:
CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors \ -fno-exceptions -fno-rtti"
gcc
2.95.2:
CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro \ -felide-constructors -fno-exceptions -fno-rtti"
pgcc
2.90.29 or newer:
CFLAGS="-O3 -mpentiumpro -mstack-align-double" CXX=gcc \ CXXFLAGS="-O3 -mpentiumpro -mstack-align-double \ -felide-constructors -fno-exceptions -fno-rtti"
configure
line:
--prefix=/usr/local/mysql --enable-assembler \ --with-mysqld-ldflags=-all-staticThe full
configure
line would, in other words, be something like the
following for all recent gcc
versions:
CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro \ -felide-constructors -fno-exceptions -fno-rtti" ./configure \ --prefix=/usr/local/mysql --enable-assembler \ --with-mysqld-ldflags=-all-staticThe binaries we provide on the MySQL Web site at http://www.mysql.com/ are all compiled with full optimization and should be perfect for most users. See section 2.1.2.5 MySQL Binaries Compiled by MySQL AB. There are some configuration settings you can tweak to make an even faster binary, but these are only for advanced users. See section 7.5.4 How Compiling and Linking Affects the Speed of MySQL. If the build fails and produces errors about your compiler or linker not being able to create the shared library `libmysqlclient.so.#' (where `#' is a version number), you can work around this problem by giving the
--disable-shared
option to configure
. In this case,
configure
will not build a shared `libmysqlclient.so.#' library.
DEFAULT
column values for
non-NULL
columns (that is, columns that are not allowed to be
NULL
). See section 1.8.6.2 Constraint NOT NULL
and DEFAULT
Values.
shell> CXXFLAGS=-DDONT_USE_DEFAULT_FIELDS ./configureThe effect of this flag is to cause any
INSERT
statement to fail unless
it includes explicit values for all columns that require a non-NULL
value.
latin1
(ISO-8859-1) character set. To
change the default set, use the --with-charset
option:
shell> ./configure --with-charset=CHARSET
CHARSET
may be one of big5
, cp1251
, cp1257
,
czech
, danish
, dec8
, dos
, euc_kr
,
gb2312
, gbk
, german1
, hebrew
, hp8
,
hungarian
, koi8_ru
, koi8_ukr
, latin1
,
latin2
, sjis
, swe7
, tis620
, ujis
,
usa7
, or win1251ukr
.
See section 5.7.1 The Character Set Used for Data and Sorting.
As of MySQL 4.1.1, the default collation may also be specified. MySQL uses
the latin1_swedish_ci
collation. To change this, use the
--with-collation
option:
shell> ./configure --with-collation=COLLATIONTo change both the character set and the collation, use both the
--with-charset
and --with-collation
options.
The collation must be a legal collation for the character set.
(Use the SHOW COLLATION
statement to determine which collations are
available for each character set.)
If you want to convert characters between the server and the client,
you should take a look at the SET CHARACTER SET
statement.
See section 14.5.3.1 SET
Syntax.
Warning: If you change character sets after having created any
tables, you will have to run myisamchk -r -q --set-character-set=charset
on every table. Your
indexes may be sorted incorrectly otherwise. (This can happen if you
install MySQL, create some tables, then reconfigure
MySQL to use a different character set and reinstall it.)
With the configure
option --with-extra-charsets=LIST
, you can
define which additional character sets should be compiled into the server.
LIST
is either a list of character set names separated by spaces,
complex
to include all character sets that can't be dynamically loaded,
or all
to include all character sets into the binaries.
--with-debug
option:
shell> ./configure --with-debugThis causes a safe memory allocator to be included that can find some errors and that provides output about what is happening. See section D.1 Debugging a MySQL Server.
--enable-thread-safe-client
configure option. This will create a
libmysqlclient_r
library with which you should link your threaded
applications. See section 21.2.14 How to Make a Threaded Client.
Caution: You should read this section only if you are interested in helping us test our new code. If you just want to get MySQL up and running on your system, you should use a standard release distribution (either a binary or source distribution will do).
To obtain our most recent development source tree, use these instructions:
shell> bk clone bk://mysql.bkbits.net/mysql-3.23 mysql-3.23To clone the 4.0 stable (production) branch, use this command:
shell> bk clone bk://mysql.bkbits.net/mysql-4.0 mysql-4.0To clone the 4.1 beta branch, use this command:
shell> bk clone bk://mysql.bkbits.net/mysql-4.1 mysql-4.1To clone the 5.0 development branch, use this command:
shell> bk clone bk://mysql.bkbits.net/mysql-5.0 mysql-5.0In the preceding examples, the source tree will be set up in the `mysql-3.23/', `mysql-4.0/', `mysql-4.1/', or `mysql-5.0/' subdirectory of your current directory. If you are behind a firewall and can only initiate HTTP connections, you can also use BitKeeper via HTTP. If you are required to use a proxy server, set the environment variable
http_proxy
to point to your proxy:
shell> export http_proxy="http://your.proxy.server:8080/"Now, simply replace the
bk://
with http://
when doing
a clone. Example:
shell> bk clone http://mysql.bkbits.net/mysql-4.1 mysql-4.1The initial download of the source tree may take a while, depending on the speed of your connection. Please be patient.
make
, autoconf
2.53 (or newer),
automake
1.5, libtool
1.5, and m4
to run the next
set of commands. Even though many operating systems already come with their
own implementation of make
, chances are high that the compilation
will fail with strange error messages. Therefore, it is highly recommended
that you use GNU make
(sometimes named gmake
) instead.
Fortunately, a large number of operating systems already ship with the GNU
toolchain preinstalled or supply installable packages of these. In any case,
they can also be downloaded from the following locations:
bison
1.75 or later. Older versions of bison
may report this
error:
sql_yacc.yy:#####: fatal error: maximum table size (32767) exceededNote: The maximum table size is not actually exceeded; the error is caused by bugs in older versions of
bison
.
Versions of MySQL before version 4.1 may also compile with other
yacc
implementations (for example, BSD yacc
91.7.30). For later
versions, GNU bison
is required.
The following example shows the typical commands required to configure a
source tree. The first cd
command changes location into the top-level
directory of the tree; replace `mysql-4.0' with the appropriate directory
name.
shell> cd mysql-4.0 shell> bk -r edit shell> aclocal; autoheader; autoconf; automake shell> (cd innobase; aclocal; autoheader; autoconf; automake) shell> (cd bdb/dist; sh s_all) shell> ./configure # Add your favorite options here makeThe command lines that change directory into the `innobase' and `bdb/dist' directories are used to configure the
InnoDB
and
Berkeley DB (BDB
) storage engines. You can omit these command lines if
you to not require InnoDB
or BDB
support.
If you get some strange errors during this stage, verify that you really
have libtool
installed.
A collection of our standard configuration scripts is located in the
`BUILD/' subdirectory. You may find it more convenient to use the
`BUILD/compile-pentium-debug' script than the preceding set of
shell commands. To compile on a different architecture,
modify the script by removing flags that are Pentium-specific.
make install
. Be careful with this
on a production machine; the command may overwrite your live release
installation. If you have another installation of MySQL, we
recommend that you run ./configure
with different values for the
--prefix
, --with-tcp-port
, and --unix-socket-path
options
than those used for your production server.
make test
. See section 23.1.2 MySQL Test Suite.
make
stage and the distribution does
not compile, please report it in our bugs database at
http://bugs.mysql.com/. If you
have installed the latest versions of the required GNU tools, and they
crash trying to process our configuration files, please report that also.
However, if you execute aclocal
and get a command not found
error or a similar problem, do not report it. Instead, make sure that all
the necessary tools are installed and that your PATH
variable is
set correctly so that your shell can find them.
bk clone
operation to obtain the source tree, you
should run bk pull
periodically to get updates.
bk revtool
. If you see some funny diffs or code that you have a
question about, do not hesitate to send email to the MySQL internals
mailing list.
See section 1.7.1.1 The MySQL Mailing Lists.
Also, if you think you have a better idea
on how to do something, send an email message to the same address with a patch.
bk diffs
will produce a patch for you after you have made changes
to the source. If you do not have the time to code your idea, just send
a description.
bk helptool
.
bk ci
or bk citool
) will
trigger the posting of a message with the changeset to our internals
mailing list, as well as the usual openlogging.org submission with
just the changeset comments.
Generally, you wouldn't need to use commit (since the public tree will
not allow bk push
), but rather use the bk diffs
method
described previously.
You can also browse changesets, comments, and source code online. For example, to browse this information for MySQL 4.1, go to http://mysql.bkbits.net:8080/mysql-4.1.
The manual is in a separate tree that can be cloned with:
shell> bk clone bk://mysql.bkbits.net/mysqldoc mysqldoc
There are also public BitKeeper trees for MySQL Control Center and Connector/ODBC. They can be cloned respectively as follows.
To clone MySQL Control center, use this command:
shell> bk clone http://mysql.bkbits.net/mysqlcc mysqlcc
To clone Connector/ODBC, use this command:
shell> bk clone http://mysql.bkbits.net/myodbc3 myodbc3
All MySQL programs compile cleanly for us with no warnings on
Solaris or Linux using gcc
. On other systems, warnings may occur due to
differences in system include files. See section 2.3.5 MIT-pthreads Notes for warnings
that may occur when using MIT-pthreads. For other problems, check
the following list.
The solution to many problems involves reconfiguring. If you do need to reconfigure, take note of the following:
configure
is run after it already has been run, it may use
information that was gathered during its previous invocation. This
information is stored in `config.cache'. When configure
starts
up, it looks for that file and reads its contents if it exists, on the
assumption that the information is still correct. That assumption is invalid
when you reconfigure.
configure
, you must run make
again
to recompile. However, you may want to remove old object files from previous
builds first because they were compiled using different configuration options.
To prevent old configuration information or object files from being used,
run these commands before re-running configure
:
shell> rm config.cache shell> make clean
Alternatively, you can run make distclean
.
The following list describes some of the problems when compiling MySQL that have been found to occur most often:
Internal compiler error: program cc1plus got fatal signal 11 Out of virtual memory Virtual memory exhaustedThe problem is that
gcc
requires a huge amount of memory to compile
`sql_yacc.cc' with inline functions. Try running configure
with
the --with-low-memory
option:
shell> ./configure --with-low-memoryThis option causes
-fno-inline
to be added to the compile line if you
are using gcc
and -O0
if you are using something else. You
should try the --with-low-memory
option even if you have so much
memory and swap space that you think you can't possibly have run out. This
problem has been observed to occur even on systems with generous hardware
configurations and the --with-low-memory
option usually fixes it.
configure
picks c++
as the compiler name and
GNU c++
links with -lg++
. If you are using gcc
,
that behavior can cause problems during configuration such as this:
configure: error: installation or configuration problem: C++ compiler cannot create executables.You might also observe problems during compilation related to
g++
, libg++
, or libstdc++
.
One cause of these problems is that you may not have g++
, or you may
have g++
but not libg++
, or libstdc++
. Take a look at
the `config.log' file. It should contain the exact reason why your C++
compiler didn't work. To work around these problems, you can use gcc
as your C++ compiler. Try setting the environment variable CXX
to
"gcc -O3"
. For example:
shell> CXX="gcc -O3" ./configureThis works because
gcc
compiles C++ sources as well as g++
does, but does not link in libg++
or libstdc++
by default.
Another way to fix these problems is to install g++
,
libg++
, and libstdc++
. We would, however, like to recommend
that you not use libg++
or libstdc++
with MySQL because this will
only increase the binary size of mysqld
without giving you any benefits.
Some versions of these libraries have also caused strange problems for
MySQL users in the past.
Using gcc
as the C++ compiler is also required if you want to
compile MySQL with RAID functionality (see section 14.2.5 CREATE TABLE
Syntax for more info
on RAID table type) and you are using GNU gcc
version 3 and above. If
you get errors like those following during the linking stage when you
configure MySQL to compile with the option --with-raid
, try to use
gcc
as your C++ compiler by defining the CXX
environment
variable:
gcc -O3 -DDBUG_OFF -rdynamic -o isamchk isamchk.o sort.o libnisam.a ../mysys/libmysys.a ../dbug/libdbug.a ../strings/libmystrings.a -lpthread -lz -lcrypt -lnsl -lm -lpthread ../mysys/libmysys.a(raid.o)(.text+0x79): In function `my_raid_create':: undefined reference to `operator new(unsigned)' ../mysys/libmysys.a(raid.o)(.text+0xdd): In function `my_raid_create':: undefined reference to `operator delete(void*)' ../mysys/libmysys.a(raid.o)(.text+0x129): In function `my_raid_open':: undefined reference to `operator new(unsigned)' ../mysys/libmysys.a(raid.o)(.text+0x189): In function `my_raid_open':: undefined reference to `operator delete(void*)' ../mysys/libmysys.a(raid.o)(.text+0x64b): In function `my_raid_close':: undefined reference to `operator delete(void*)' collect2: ld returned 1 exit status
make
to GNU make
:
making all in mit-pthreads make: Fatal error in reader: Makefile, line 18: Badly formed macro assignmentOr:
make: file `Makefile' line 18: Must be a separator (:Or:
pthread.h: No such file or directorySolaris and FreeBSD are known to have troublesome
make
programs.
GNU make
Version 3.75 is known to work.
CFLAGS
and CXXFLAGS
environment
variables. You can also specify the compiler names this way using CC
and CXX
. For example:
shell> CC=gcc shell> CFLAGS=-O3 shell> CXX=gcc shell> CXXFLAGS=-O3 shell> export CC CFLAGS CXX CXXFLAGSSee section 2.1.2.5 MySQL Binaries Compiled by MySQL AB, for a list of flag definitions that have been found to be useful on various systems.
gcc
compiler:
client/libmysql.c:273: parse error before `__attribute__'
gcc
2.8.1 is known to work, but we recommend using gcc
2.95.2 or
egcs
1.0.3a instead.
mysqld
,
configure
didn't correctly detect the type of the last argument to
accept()
, getsockname()
, or getpeername()
:
cxx: Error: mysqld.cc, line 645: In this statement, the referenced type of the pointer value ''length'' is ''unsigned long'', which is not compatible with ''int''. new_sock = accept(sock, (struct sockaddr *)&cAddr, &length);To fix this, edit the `config.h' file (which is generated by
configure
). Look for these lines:
/* Define as the base type of the last arg to accept */ #define SOCKET_SIZE_TYPE XXXChange
XXX
to size_t
or int
, depending on your
operating system. (Note that you will have to do this each time you run
configure
because configure
regenerates `config.h'.)
"sql_yacc.yy", line xxx fatal: default action causes potential...This is a sign that your version of
yacc
is deficient.
You probably need to install bison
(the GNU version of yacc
)
and use that instead.
gawk
instead of the default
mawk
if you want to compile MySQL 4.1 or higher with Berkeley DB
support.
mysqld
or a MySQL client, run
configure
with the --with-debug
option, then recompile and
link your clients with the new client library. See section D.2 Debugging a MySQL Client.
libmysql.c:1329: warning: passing arg 5 of `gethostbyname_r' from incompatible pointer type libmysql.c:1329: too few arguments to function `gethostbyname_r' libmysql.c:1329: warning: assignment makes pointer from integer without a cast make[2]: *** [libmysql.lo] Error 1By default, the
configure
script attempts to determine the correct
number of arguments by using g++
the GNU C++ compiler. This test
yields wrong results if g++
is not installed. There are two ways
to work around this problem:
g++
is installed. On some Linux
distributions, the required package is called gpp
; on others, it
is named gcc-c++
.
gcc
as your C++ compiler by setting the CXX
environment
variable to gcc
:
export CXX="gcc"
configure
again afterward.
This section describes some of the issues involved in using MIT-pthreads.
On Linux, you should not use MIT-pthreads. Use the installed LinuxThreads implementation instead. See section 2.6.1 Linux Notes.
If your system does not provide native thread support, you will need to build MySQL using the MIT-pthreads package. This includes older FreeBSD systems, SunOS 4.x, Solaris 2.4 and earlier, and some others. See section 2.1.1 Operating Systems Supported by MySQL.
Beginning with MySQL 4.0.2, MIT-pthreads is no longer part of the source distribution. If you require this package, you need to download it separately from http://www.mysql.com/Downloads/Contrib/pthreads-1_60_beta6-mysql.tar.gz
After downloading, extract this source archive into the top level of the
MySQL source directory. It will create a new subdirectory named
mit-pthreads
.
configure
with the --with-mit-threads
option:
shell> ./configure --with-mit-threadsBuilding in a non-source directory is not supported when using MIT-pthreads because we want to minimize our changes to this code.
--without-server
to build only the client code, clients will not know whether
MIT-pthreads is being used and will use Unix socket connections by default.
Because Unix socket files do not work under MIT-pthreads on some platforms, this
means you will need to use -h
or --host
when you run client
programs.
--external-locking
option. This is needed
only if you want to be able to run two MySQL servers against the same data
files, which is not recommended.
bind()
command fails to bind to a socket without
any error message (at least on Solaris). The result is that all connections
to the server fail. For example:
shell> mysqladmin version mysqladmin: connect to server at '' failed; error: 'Can't connect to mysql server on localhost (146)'The solution to this is to kill the
mysqld
server and restart it.
This has only happened to us when we have forced down the server and done
a restart immediately.
sleep()
system call isn't interruptible with
SIGINT
(break). This is only noticeable when you run
mysqladmin --sleep
. You must wait for the sleep()
call to
terminate before the interrupt is served and the process stops.
ld: warning: symbol `_iob' has differing sizes: (file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4; file /usr/lib/libc.so value=0x140); /my/local/pthreads/lib/libpthread.a(findfp.o) definition taken ld: warning: symbol `__iob' has differing sizes: (file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4; file /usr/lib/libc.so value=0x140); /my/local/pthreads/lib/libpthread.a(findfp.o) definition taken
implicit declaration of function `int strtoll(...)' implicit declaration of function `int strtoul(...)'
readline
to work with MIT-pthreads. (This isn't
needed, but may be interesting for someone.)
These instructions describe how to build MySQL binaries from source for versions 4.1 and above on Windows. Instructions are provided for building binaries from a standard source distribution or from the BitKeeper tree that contains the latest development source.
Note: The instructions in this document are strictly for users who want to test MySQL on Windows from the latest source distribution or from the BitKeeper tree. For production use, MySQL AB does not advise using a MySQL server built by yourself from source. Normally, it is best to use precompiled binary distributions of MySQL that are built specifically for optimal performance on Windows by MySQL AB. Instructions for installing a binary distributions are available at section 2.2.1 Installing MySQL on Windows.
To build MySQL on Windows from source, you need the following compiler and resources available on your Windows system:
You'll also need a MySQL source distribution for Windows. There are two ways you can get a source distribution for MySQL version 4.1 and above:
If you are using a Windows source distribution, you can go directly to section 2.3.6.1 Building MySQL Using VC++. To build from the BitKeeper tree, proceed to section 2.3.6.2 Creating a Windows Source Package from the Latest Development Source.
If you find something not working as expected, or you have
suggestions about ways to improve the current build process
on Windows, please send a message to the win32
mailing list.
See section 1.7.1.1 The MySQL Mailing Lists.
Note: VC++ workspace files for MySQL 4.1 and above are compatible with Microsoft Visual Studio 6.0 and above (7.0/.NET) editions and tested by MySQL AB staff before each release.
Follow this procedure to build MySQL:
WinZip
or other Windows tool that can read `.zip' files.
File
menu, select Open Workspace
.
Build
menu,
select the Set Active Configuration
menu.
mysqld - Win32 Debug
and click OK.
F7
to begin the build of the debug server, libraries, and
some client applications.
Build All
option from the Build
menu.
--basedir
and --datadir
options, or place appropriate options in an option file (the `my.ini'
file in your Windows directory or `C:\my.cnf'). If you have
an existing data directory elsewhere that you want to use, you can
specify its pathname instead.
mysql
interactive command-line utility that exists in your `client_release'
or `client_debug' directory.
When you are satisfied that the programs you have built are working correctly, stop the server. Then install MySQL as follows:
C:\> mkdir C:\mysql C:\> mkdir C:\mysql\bin C:\> mkdir C:\mysql\data C:\> mkdir C:\mysql\share C:\> mkdir C:\mysql\scriptsIf you want to compile other clients and link them to MySQL, you should also create several additional directories:
C:\> mkdir C:\mysql\include C:\> mkdir C:\mysql\lib C:\> mkdir C:\mysql\lib\debug C:\> mkdir C:\mysql\lib\optIf you want to benchmark MySQL, create this directory:
C:\> mkdir C:\mysql\sql-benchBenchmarking requires Perl support.
C:\mysql
directory the
following directories:
C:\> cd \workdir C:\workdir> copy client_release\*.exe C:\mysql\bin C:\workdir> copy client_debug\mysqld.exe C:\mysql\bin\mysqld-debug.exe C:\workdir> xcopy scripts\*.* C:\mysql\scripts /E C:\workdir> xcopy share\*.* C:\mysql\share /EIf you want to compile other clients and link them to MySQL, you should also copy several libraries and header files:
C:\workdir> copy lib_debug\mysqlclient.lib C:\mysql\lib\debug C:\workdir> copy lib_debug\libmysql.* C:\mysql\lib\debug C:\workdir> copy lib_debug\zlib.* C:\mysql\lib\debug C:\workdir> copy lib_release\mysqlclient.lib C:\mysql\lib\opt C:\workdir> copy lib_release\libmysql.* C:\mysql\lib\opt C:\workdir> copy lib_release\zlib.* C:\mysql\lib\opt C:\workdir> copy include\*.h C:\mysql\include C:\workdir> copy libmysql\libmysql.def C:\mysql\includeIf you want to benchmark MySQL, you should also do this:
C:\workdir> xcopy sql-bench\*.* C:\mysql\bench /E
Set up and start the server in the same way as for the binary Windows distribution. See section 2.2.1 Installing MySQL on Windows.
To create a Windows source package from the current BitKeeper source tree, use the following instructions. Please note that this procedure must be performed on a system running a Unix or Unix-like operating system. For example, the procedure is known to work well on Linux.
shell> ./BUILD/compile-pentium-max
shell> ./scripts/make_win_src_distributionThis script creates a Windows source package to be used on your Windows system. You can supply different options to the script based on your needs. It accepts the following options:
--help
--debug
--tmp
--suffix
--dirname
--silent
--tar
make_win_src_distribution
creates a Zip-format
archive with the name `mysql-VERSION-win-src.zip', where
VERSION
represents the version of your MySQL source tree.
In your source files, you should include `my_global.h' before `mysql.h':
#include <my_global.h> #include <mysql.h>
`my_global.h' includes any other files needed for Windows compatibility (such as `windows.h') if you compile your program on Windows.
You can either link your code with the dynamic `libmysql.lib' library, which is just a wrapper to load in `libmysql.dll' on demand, or link with the static `mysqlclient.lib' library.
The MySQL client libraries are compiled as threaded libraries, so you should also compile your code to be multi-threaded.
After installing MySQL, there are some issues you should address. For example, on Unix, you should initialize the data directory and create the MySQL grant tables. On all platforms, an important security concern is that the initial accounts in the grant tables have no passwords. You should assign passwords to prevent unauthorized access to the MySQL server.
The following sections include post-installation procedures that are specific to Windows systems and to Unix systems. Another section, section 2.4.2.3 Starting and Troubleshooting the MySQL Server, applies to all platforms; it describes what to do if you have trouble getting the server to start. section 2.4.3 Securing the Initial MySQL Accounts also applies to all platforms. You should follow its instructions to make sure that you have properly protected your MySQL accounts by assigning passwords to them.
When you are ready to create additional user accounts, you can find information on the MySQL access control system and account management in section 5.4 The MySQL Access Privilege System and section 5.5 MySQL User Account Management.
On Windows, the data directory and the grant tables do not have to be
created. MySQL Windows distributions include the grant tables already set up
with a set of preinitialized accounts in the mysql
database under the
data directory. However, you should assign passwords to the accounts.
The procedure for this is given in section 2.4.3 Securing the Initial MySQL Accounts.
Before setting up passwords, you might want to try running some client programs to make sure that you can connect to the server and that it is operating properly. Make sure the server is running (see section 2.2.1.5 Starting the Server for the First Time), then issue the following commands to verify that you can retrieve information from the server. The output should be similar to what is shown here:
C:\> C:\mysql\bin\mysqlshow +-----------+ | Databases | +-----------+ | mysql | | test | +-----------+ C:\> C:\mysql\bin\mysqlshow mysql Database: mysql +--------------+ | Tables | +--------------+ | columns_priv | | db | | func | | host | | tables_priv | | user | +--------------+ C:\> C:\mysql\bin\mysql -e "SELECT Host,Db,User FROM db" mysql +------+-------+------+ | host | db | user | +------+-------+------+ | % | test% | | +------+-------+------+
If you are running a version of Windows that supports services and you want the MySQL server to run automatically when Windows starts, see section 2.2.1.7 Starting MySQL as a Windows Service.
After installing MySQL on Unix, you need to initialize the grant tables, start the server, and make sure that the server works okay. You may also wish to arrange for the server to be started and stopped automatically when your system starts and stops. You should also assign passwords to the accounts in the grant tables.
On Unix, the grant tables are set up by the mysql_install_db
program.
For some installation methods, this program is run for you automatically:
mysql_install_db
.
mysql_install_db
.
Otherwise, you'll need to run mysql_install_db
yourself.
The following procedure describes how to initialize the grant tables (if that has not already been done) and then start the server. It also suggests some commands that you can use to test whether the server is accessible and working properly. For information about starting and stopping the server automatically, see section 2.4.2.2 Starting and Stopping MySQL Automatically.
After you complete the procedure and have the server running, you should
assign passwords to the accounts created by mysql_install_db
.
Instructions for doing so are given in section 2.4.3 Securing the Initial MySQL Accounts.
In the examples shown here, the server runs under the user ID of the
mysql
login account. This assumes that such an account exists.
Either create the account if it does not exist, or substitute the name of a
different existing login account that you plan to use for running the
server.
BASEDIR
:
shell> cd BASEDIR
BASEDIR
is likely to be something like `/usr/local/mysql' or
`/usr/local'. The following steps assume that you are located in this
directory.
mysql_install_db
program to set up the initial
MySQL grant tables containing the privileges that determine how users are
allowed to connect to the server. You'll need to do this if you used a
distribution type that doesn't run the program for you.
Typically, mysql_install_db
needs to be run only the first time you
install MySQL, so you can skip this step if you are upgrading an existing
installation, However, mysql_install_db
does not overwrite any
existing privilege tables, so it should be safe to run in any circumstances.
To initialize the grant tables, use one of the following commands,
depending on whether mysql_install_db
is located in the bin
or scripts
directory:
shell> bin/mysql_install_db --user=mysql shell> scripts/mysql_install_db --user=mysqlThe
mysql_install_db
script creates the data directory, the
mysql
database that holds all database privileges, and the test
database that you can use to test MySQL. The script also creates privilege
table entries for root
accounts and anonymous-user accounts.
The accounts have no passwords initially. A description of their initial
privileges is given in section 2.4.3 Securing the Initial MySQL Accounts. Briefly, these privileges
allow the MySQL root
user to do anything, and allow anybody to create
or use databases with a name of test
or starting with test_
.
It is important to make sure that the database directories and files are
owned by the mysql
login account so that the server has read and
write access to them when you run it later. To ensure this, the --user
option should be used as shown if you run mysql_install_db
as
root
. Otherwise, you should execute the script while logged in as
mysql
, in which case you can omit the --user
option from the
command.
mysql_install_db
creates several tables in the mysql
database:
user
, db
, host
, tables_priv
,
columns_priv
, func
, and possibly others depending on your
version of MySQL.
If you don't want to have the test
database, you can remove it with
mysqladmin -u root drop test
after starting the server.
If you have problems with mysql_install_db
, see
section 2.4.2.1 Problems Running mysql_install_db
.
There are some alternatives to running the mysql_install_db
script as it is provided in the MySQL distribution:
mysql_install_db
before you run it.
However, a preferable technique is to use GRANT
and REVOKE
to
change the privileges after the grant tables have been set up. In other
words, you can run mysql_install_db
, and then use mysql -u root
mysql
to connect to the server as the MySQL root
user so that you
can issue the GRANT
and REVOKE
statements.
If you want to install MySQL on a lot of machines with the
same privileges, you can put the GRANT
and REVOKE
statements in
a file and execute the file as a script using mysql
after running
mysql_install_db
. For example:
shell> bin/mysql_install_db --user=mysql shell> bin/mysql -u root < your_script_fileBy doing this, you can avoid having to issue the statements manually on each machine.
GRANT
and REVOKE
and have made so many modifications
after running mysql_install_db
that you want to wipe out the tables
and start over.
To re-create the grant tables, remove all the `.frm', `.MYI', and
`.MYD' files in the directory containing the mysql
database.
(This is the directory named `mysql' under the data directory, which is
listed as the datadir
value when you run mysqld --help
.) Then
run the mysql_install_db
script again.
Note: For MySQL versions older than 3.22.10, you should not
delete the `.frm' files. If you accidentally do this, you should copy
them back into the `mysql' directory from your MySQL distribution
before running mysql_install_db
.
mysqld
manually using the --skip-grant-tables
option and add the privilege information yourself using mysql
:
shell> bin/mysqld_safe --user=mysql --skip-grant-tables & shell> bin/mysql mysqlFrom
mysql
, manually execute the SQL commands contained in
mysql_install_db
. Make sure that you run mysqladmin
flush-privileges
or mysqladmin reload
afterward to tell the server to
reload the grant tables.
Note that by not using mysql_install_db
, you not only have to
populate the grant tables manually, you also have to create them first.
shell> bin/mysqld_safe --user=mysql &For versions of MySQL older than 4.0, substitute
bin/safe_mysqld
for bin/mysqld_safe
in this command.
It is important that the MySQL server be run using an unprivileged
(non-root
) login account. To ensure this, the --user
option should be used as shown if you run mysql_safe
as
root
. Otherwise, you should execute the script while logged in as
mysql
, in which case you can omit the --user
option from the
command.
Further instructions for running MySQL as an unprivileged user are given in
section A.3.2 How to Run MySQL as a Normal User.
If you neglected to create the grant tables before proceeding to this step,
the following message will appear in the error log file when you start the
server:
mysqld: Can't find file: 'host.frm'If you have other problems starting the server, see section 2.4.2.3 Starting and Troubleshooting the MySQL Server.
mysqladmin
to verify that the server is running. The following
commands provide simple tests to check whether the server is up and responding
to connections:
shell> bin/mysqladmin version shell> bin/mysqladmin variablesThe output from
mysqladmin version
varies slightly depending on your
platform and version of MySQL, but should be similar to that shown here:
shell> bin/mysqladmin version mysqladmin Ver 8.40 Distrib 4.0.18, for linux on i586 Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB This software comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to modify and redistribute it under the GPL license Server version 4.0.18-log Protocol version 10 Connection Localhost via Unix socket TCP port 3306 UNIX socket /tmp/mysql.sock Uptime: 16 sec Threads: 1 Questions: 9 Slow queries: 0 Opens: 7 Flush tables: 2 Open tables: 0 Queries per second avg: 0.000 Memory in use: 132K Max memory used: 16773KTo see what else you can do with
mysqladmin
,
invoke it with the --help
option.
shell> bin/mysqladmin -u root shutdown
mysqld_safe
or
by invoking mysqld
directly. For example:
shell> bin/mysqld_safe --user=mysql --log &If
mysqld_safe
fails, see section 2.4.2.3 Starting and Troubleshooting the MySQL Server.
shell> bin/mysqlshow +-----------+ | Databases | +-----------+ | mysql | | test | +-----------+ shell> bin/mysqlshow mysql Database: mysql +--------------+ | Tables | +--------------+ | columns_priv | | db | | func | | host | | tables_priv | | user | +--------------+ shell> bin/mysql -e "SELECT Host,Db,User FROM db" mysql +------+--------+------+ | host | db | user | +------+--------+------+ | % | test | | | % | test_% | | +------+--------+------+
DBI DBD::mysql Data::Dumper Data::ShowTableThese modules can be obtained from CPAN (http://www.cpan.org/). See section 2.7.1 Installing Perl on Unix. The `sql-bench/Results' directory contains the results from many runs against different databases and platforms. To run all tests, execute these commands:
shell> cd sql-bench shell> perl run-all-testsIf you don't have the `sql-bench' directory, you probably installed MySQL using RPM files other than the source RPM. (The source RPM includes the `sql-bench' benchmark directory.) In this case, you must first install the benchmark suite before you can use it. Beginning with MySQL 3.22, there are separate benchmark RPM files named `mysql-bench-VERSION-i386.rpm' that contain benchmark code and data. If you have a source distribution, there are also tests in its `tests' subdirectory that you can run. For example, to run `auto_increment.tst', execute this command from the top-level directory of your source distribution:
shell> mysql -vvf test < ./tests/auto_increment.tstThe expected result of the test can be found in the `./tests/auto_increment.res' file.
mysql_install_db
The purpose of the mysql_install_db
script is to generate new MySQL
privilege tables. It will not overwrite existing MySQL privilege tables,
and it will not affect any other data.
If you want to re-create your privilege tables, first stop
the mysqld
server if it's running. Then rename the `mysql'
directory under the data directory to save it, and then run
mysql_install_db
. For example:
shell> mv mysql-data-directory/mysql mysql-data-directory/mysql-old shell> mysql_install_db --user=mysql
This section lists problems you might encounter when you run
mysql_install_db
:
mysql_install_db
doesn't install the grant tables
mysql_install_db
fails to install the grant
tables and terminates after displaying the following messages:
Starting mysqld daemon with databases from XXXXXX mysqld endedIn this case, you should examine the error log file very carefully. The log should be located in the directory `XXXXXX' named by the error message, and should indicate why
mysqld
didn't start. If you don't understand
what happened, include the log when you post a bug report.
See section 1.7.1.3 How to Report Bugs or Problems.
mysqld
process running
mysql_install_db
at all because it need be run only once (when you
install MySQL the first time).
mysqld
server doesn't work when one server is running
Can't start server: Bind on TCP/IP port: Address already in use Can't start server: Bind on unix socket...For instructions on setting up multiple servers, see section 5.9 Running Multiple MySQL Servers on the Same Machine.
mysql_install_db
or the mysqld
server.
You can specify different temporary directory and Unix socket file locations
by executing these commands prior to starting mysql_install_db
or
mysqld
:
shell> TMPDIR=/some_tmp_dir/ shell> MYSQL_UNIX_PORT=/some_tmp_dir/mysql.sock shell> export TMPDIR MYSQL_UNIX_PORT`some_tmp_dir' should be the full pathname to some directory for which you have write permission. After this, you should be able to run
mysql_install_db
and start
the server with these commands:
shell> bin/mysql_install_db --user=mysql shell> bin/mysqld_safe --user=mysql &If
mysql_install_db
is located in the `scripts' directory,
modify the first command to use scripts/mysql_install_db
.
See section A.4.5 How to Protect or Change the MySQL Socket File `/tmp/mysql.sock'.
See section E Environment Variables.
Generally, you start the mysqld
server in one of these ways:
mysqld
directly. This works on any platform.
mysqld_safe
, which tries to determine the proper options
for mysqld
and then runs it with those options. This script is
used on systems based on BSD Unix.
See section 5.1.3 The mysqld_safe
Server Startup Script.
mysql.server
. This script is used primarily at
system startup and shutdown on systems that use System V-style run
directories, where it usually is installed under the name mysql
.
The mysql.server
script starts the server by invoking mysqld_safe
.
See section 5.1.4 The mysql.server
Server Startup Script.
mysql.server
.
See section 2.2.3 Installing MySQL on Mac OS X for details.
The mysql.server
and mysqld_safe
scripts and the Mac OS X
Startup Item can be used to start the server manually, or automatically at
system startup time. mysql.server
and the Startup Item also can be
used to stop the server.
To start or stop the server manually using the mysql.server
script,
invoke it with start
or stop
arguments:
shell> mysql.server start shell> mysql.server stop
Before mysql.server
starts the server, it changes location to the
MySQL installation directory, and then invokes mysqld_safe
. If you
want the server to run as some specific user, add an appropriate user
option to the [mysqld]
group of the `/etc/my.cnf' option file,
as shown later in this section.
(It is possible that you'll need to edit mysql.server
if you've installed a binary distribution of MySQL in a non-standard
location. Modify it to cd
into the proper directory before it runs
mysqld_safe
. If you do this, your modified version of
mysql.server
may be overwritten if you upgrade MySQL in the future,
so you should make a copy of your edited version that you can reinstall.)
mysql.server stop
brings down the server by sending a signal to it.
You can also stop the server manually by executing mysqladmin
shutdown
.
To start and stop MySQL automatically on your server, you need to add start and stop commands to the appropriate places in your `/etc/rc*' files.
If you use the Linux server RPM package (MySQL-server-VERSION.rpm
),
the mysql.server
script will already have been installed in the
`/etc/init.d' directory with the name `mysql'. You need not
install it manually. See section 2.2.2 Installing MySQL on Linux for more information on the Linux
RPM packages.
Some vendors provide RPM packages that install a startup script under a
different name such as mysqld
.
If you install MySQL from a source distribution or using a binary
distribution format that does not install mysql.server
automatically,
you can install it manually. The script can be found in the
`support-files' directory under the MySQL installation directory or in
a MySQL source tree.
To install mysql.server
manually, copy it to the `/etc/init.d'
directory with the name mysql
, and then make it executable. Do this
by changing location into the appropriate directory where
mysql.server
is located and executing these commands:
shell> cp mysql.server /etc/init.d/mysql shell> chmod +x /etc/init.d/mysql
Older Red Hat systems use the `/etc/rc.d/init.d' directory rather than `/etc/init.d'. Adjust the preceding commands accordingly. Alternatively, first create `/etc/init.d' as a symbolic link that points to `/etc/rc.d/init.d':
shell> cd /etc shell> ln -s rc.d/init.d .
After installing the script, the commands needed to activate it to run
at system startup depend on your operating system. On Linux, you can use
chkconfig
:
shell> chkconfig --add mysql
On some Linux systems, the following command also seems to be necessary to
fully enable the mysql
script:
shell> chkconfig --level 345 mysql on
On FreeBSD, startup scripts generally should go in
`/usr/local/etc/rc.d/'. The rc(8)
manual page states that
scripts in this directory are executed only if their basename matches the
*.sh
shell filename pattern. Any other files or directories present
within the directory are silently ignored. In other words, on FreeBSD, you
should install the `mysql.server' script as
`/usr/local/etc/rc.d/mysql.server.sh' to enable automatic startup.
As an alternative to the preceding setup, some operating systems also use `/etc/rc.local' or `/etc/init.d/boot.local' to start additional services on startup. To start up MySQL using this method, you could append a command like the one following to the appropriate startup file:
/bin/sh -c 'cd /usr/local/mysql; ./bin/mysqld_safe --user=mysql &'
For other systems, consult your operating system documentation to see how to install startup scripts.
You can add options for mysql.server
in a global
`/etc/my.cnf' file. A typical `/etc/my.cnf' file might look like
this:
[mysqld] datadir=/usr/local/mysql/var socket=/var/tmp/mysql.sock port=3306 user=mysql [mysql.server] basedir=/usr/local/mysql
The mysql.server
script understands the following options:
basedir
, datadir
, and pid-file
. If specified, they
must be placed in an option file, not on the command line.
mysql.server
understands only start
and stop
as
command-line arguments.
The following table shows which option groups the server and each startup script read from option files:
Script | Option Groups |
mysqld | [mysqld] , [server] , [mysqld-major-version]
|
mysql.server | [mysqld] , [mysql.server]
|
mysqld_safe | [mysqld] , [server] , [mysqld_safe]
|
[mysqld-major-version]
means that groups with names like
[mysqld-4.0]
, [mysqld-4.1]
, and [mysqld-5.0]
will be
read by servers having versions 4.0.x, 4.1.x, 5.0.x, and so forth. This
feature was added in MySQL 4.0.14. It can be used to specify options that will
be read only by servers within a given release series.
For backward compatibility, mysql.server
also reads the
[mysql_server]
group and mysqld_safe
also reads the
[safe_mysqld]
group. However, you should update your option
files to use the [mysql.server]
and [mysqld_safe]
groups instead
when you begin using MySQL 4.0 or later.
See section 4.3.2 Using Option Files.
If you have problems starting the server, here are some things you can try:
Some storage engines have options that control their behavior.
You can create a `my.cnf' file and set startup options
for the engines you plan to use.
If you are going to use storage engines that support transactional tables
(InnoDB
, BDB
), be sure that you have them configured the
way you want before starting the server:
InnoDB
tables, refer to the InnoDB
-specific
startup options. In MySQL 3.23, you must configure InnoDB
explicitly
or the server will fail to start. From MySQL 4.0 on, InnoDB
uses default
values for its configuration options if you specify none.
See section 16.4 InnoDB
Configuration.
BDB
(Berkeley DB) tables, you should familiarize
yourself with the different BDB
-specific startup options.
See section 15.4.3 BDB
Startup Options.
When the mysqld
server starts, it changes location to the data
directory. This is where it expects to find databases and where it expects
to write log files. On Unix, the server also writes the pid (process ID)
file in the data directory.
The data directory location is hardwired in when the server is compiled.
This is where the server looks for the data directory by default. If
the data directory is located somewhere else on your system, the server will
not work properly. You can find out what the default path settings are by
invoking mysqld
with the --verbose
and --help
options.
(Prior to MySQL 4.1, omit the --verbose
option.)
If the defaults don't match the MySQL installation layout on your system,
you can override them by specifying options on the command line to
mysqld
or mysqld_safe
. You can also list the options in an
option file.
To specify the location of the data directory explicitly, use the
--datadir
option. However, normally you can tell mysqld
the
location of the base directory under which MySQL is installed and it will
look for the data directory there. You can do this with the --basedir
option.
To check the effect of specifying path options, invoke mysqld
with
those options followed by the --verbose
and --help
options.
For example, if you change location into the directory where mysqld
is
installed, and then run the following command, it
will show the effect of starting the server with a base
directory of `/usr/local':
shell> ./mysqld --basedir=/usr/local --verbose --help
You can specify other options such as --datadir
as well, but note
that --verbose
and --help
must be the last options. (Prior to
MySQL 4.1, omit the --verbose
option.)
Once you determine the path settings you want, start the server without
--verbose
and --help
.
If mysqld
is currently running, you can find out what path settings
it is using by executing this command:
shell> mysqladmin variables
Or:
shell> mysqladmin -h host_name variables
host_name
is the name of the MySQL server host.
If you get Errcode 13
(which means Permission denied
) when
starting mysqld
, this means that the access privileges of the data
directory or its contents do not allow the server access. In this case, you
change the permissions for the involved files and directories so that the
server has the right to use them. You can also start the server as
root
, but this can raise security issues and should be avoided.
On Unix, change location into the data directory and check the ownership of the data directory and its contents to make sure the server has access. For example, if the data directory is `/usr/local/mysql/var', use this command:
shell> ls -la /usr/local/mysql/var
If the data directory or its files or subdirectories are not owned by the account that you use for running the server, change their ownership to that account:
shell> chown -R mysql /usr/local/mysql/var shell> chgrp -R mysql /usr/local/mysql/var
If the server fails to start up correctly, check the error log file to
see if you can find out why. Log files are located in the data directory
(typically `C:\mysql\data' on Windows, `/usr/local/mysql/data'
for a Unix binary distribution, and `/usr/local/var' for a Unix source
distribution). Look in the data directory for files with names of the form
`host_name.err' and `host_name.log', where host_name
is the
name of your server host. (Older servers on Windows use `mysql.err'
as the error log name.) Then check the last few lines of these files.
On Unix, you can use tail
to display the last few lines:
shell> tail host_name.err shell> tail host_name.log
The error log contains information that indicates why the server couldn't start. For example, you might see something like this in the log:
000729 14:50:10 bdb: Recovery function for LSN 1 27595 failed 000729 14:50:10 bdb: warning: ./test/t1.db: No such file or directory 000729 14:50:10 Can't init databases
This means that you didn't start mysqld
with the
--bdb-no-recover
option and Berkeley DB found something wrong with
its own log files when it tried to recover your databases. To be able to
continue, you should move away the old Berkeley DB log files from the
database directory to some other place, where you can later examine them.
The BDB
log files are named in sequence beginning with
`log.0000000001', where the number increases over time.
If you are running mysqld
with BDB
table support and
mysqld
dumps core at startup, this could be due to problems with the
BDB
recovery log. In this case, you can try starting mysqld
with --bdb-no-recover
. If that helps, then you should remove
all BDB
log files from the data directory and try starting mysqld
again without the --bdb-no-recover
option.
If either of the following errors occur, it means that some other program
(perhaps another mysqld
server) is already using the TCP/IP port or
Unix socket file that mysqld
is trying to use:
Can't start server: Bind on TCP/IP port: Address already in use Can't start server: Bind on unix socket...
Use ps
to determine whether you have another mysqld
server
running. If so, shut down the server before starting mysqld
again.
(If another server is running, and you really want to run multiple servers,
you can find information about how to do so in section 5.9 Running Multiple MySQL Servers on the Same Machine.)
If no other server is running, try to execute the command telnet
your-host-name tcp-ip-port-number
. (The default MySQL port number is
3306.) Then press Enter a couple of times. If you don't get an error
message like telnet: Unable to connect to remote host: Connection
refused
, some other program is using the TCP/IP port that mysqld
is
trying to use. You'll need to track down what program this is and disable
it, or else tell mysqld
to listen to a different port with the
--port
option. In this case, you'll also need to specify the port
number for client programs when connecting to the server via TCP/IP.
Another reason the port might be inaccessible is that you have a firewall running that blocks connections to it. If so, modify the firewall settings to allow access to the port.
If the server starts but you can't connect to it, you should make sure that you have an entry in `/etc/hosts' that looks like this:
127.0.0.1 localhost
This problem occurs only on systems that don't have a working thread library and for which MySQL must be configured to use MIT-pthreads.
If you can't get mysqld
to start, you can try to make a trace file
to find the problem by using the --debug
option.
See section D.1.2 Creating Trace Files.
Part of the MySQL installation process is to set up the mysql
database
containing the grant tables:
mysql_install_db
program. Some installation methods run this program for you. Others require
that you execute it manually. For details, see section 2.4.2 Unix Post-Installation Procedures.
The grant tables define the initial MySQL user accounts and their access privileges. These accounts are set up as follows:
root
. These are
superuser accounts that can do anything. The initial root
account
passwords are empty, so anyone can connect to the MySQL server as root
without a password and be granted all privileges.
root
account is for connecting from the local host
and the other allows connections from any host.
root
accounts are for connections from the local host.
Connections must be made from the local host by specifying a hostname of
localhost
for one account, or the actual hostname or IP number for
the other.
root
accounts.
The other is for connections from any host and has all privileges for the
test
database or other databases with names that start with test
.
localhost
for one account, or the actual hostname or IP number for
the other. These accounts have all privileges for the test
database
or other databases with names that start with test_
.
As noted, none of the initial accounts have passwords. This means that your MySQL installation is unprotected until you do something about it:
root
accounts.
The following instructions describe how to set up passwords for the
initial MySQL accounts, first for the anonymous accounts and then for the
root
accounts. Replace ``newpwd
'' in the examples with the
actual password that you want to use. The instructions also cover how
to remove the anonymous accounts, should you prefer not to allow anonymous
access at all.
You might want to defer setting the passwords until later, so that you don't need to specify them while you perform additional setup or testing. However, be sure to set them before using your installation for any real production work.
To assign passwords to the anonymous accounts, you can use either
SET PASSWORD
or UPDATE
. In both cases, be sure to encrypt the
password using the PASSWORD()
function.
To use SET PASSWORD
on Windows, do this:
shell> mysql -u root mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd'); mysql> SET PASSWORD FOR ''@'%' = PASSWORD('newpwd');
To use SET PASSWORD
on Unix, do this:
shell> mysql -u root mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd'); mysql> SET PASSWORD FOR ''@'host_name' = PASSWORD('newpwd');
In the second SET PASSWORD
statement, replace host_name
with the name of the server host. This is the name that is specified in
the Host
column of the non-localhost
record for root
in the user
table. If you don't know what hostname this is, issue
the following statement before using SET PASSWORD
:
mysql> SELECT Host, User FROM mysql.user;
Look for the record that has root
in the User
column and
something other than localhost
in the Host
column. Then use that
Host
value in the second SET PASSWORD
statement.
The other way to assign passwords to the anonymous accounts is by using
UPDATE
to modify the user
table directly. Connect to the
server as root
and issue an UPDATE
statement that assigns a
value to the Password
column of the appropriate user
table
records. The procedure is the same for Windows and Unix. The following
UPDATE
statement assigns a password to both anonymous accounts at
once:
shell> mysql -u root mysql> UPDATE mysql.user SET Password = PASSWORD('newpwd') -> WHERE User = ''; mysql> FLUSH PRIVILEGES;
After you update the passwords in the user
table directly using
UPDATE
, you must tell the server to re-read the grant tables with
FLUSH PRIVILEGES
. Otherwise, the change will go unnoticed until you
restart the server.
If you prefer to remove the anonymous accounts instead, do so as follows:
shell> mysql -u root mysql> DELETE FROM mysql.user WHERE User = ''; mysql> FLUSH PRIVILEGES;
The DELETE
statement applies both to Windows and to Unix.
On Windows, if you want to remove only the anonymous account that has the same
privileges as root
, do this instead:
shell> mysql -u root mysql> DELETE FROM mysql.user WHERE Host='localhost' AND User=''; mysql> FLUSH PRIVILEGES;
This account allows anonymous access but has full privileges, so removing it improves security.
You can assign passwords to the root
accounts in several ways. The
following discussion demonstrates three methods:
SET PASSWORD
statement
mysqladmin
command-line client program
UPDATE
statement
To assign passwords using SET PASSWORD
, connect to the server as
root
and issue two SET PASSWORD
statements.
Be sure to encrypt the password using the PASSWORD()
function.
For Windows, do this:
shell> mysql -u root mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd'); mysql> SET PASSWORD FOR 'root'@'%' = PASSWORD('newpwd');
For Unix, do this:
shell> mysql -u root mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd'); mysql> SET PASSWORD FOR 'root'@'host_name' = PASSWORD('newpwd');
In the second SET PASSWORD
statement, replace host_name
with
the name of the server host. This is the same hostname that you used when
you assigned the anonymous account passwords.
To assign passwords to the root
accounts using mysqladmin
,
execute the following commands:
shell> mysqladmin -u root password "newpwd" shell> mysqladmin -u root -h host_name password "newpwd"
These commands apply both to Windows and to Unix. In the second command,
replace host_name
with the name of the server host. The double
quotes around the password are not always necessary, but you should use
them if the password contains spaces or other characters that are special
to your command interpreter.
If you are using a server from a very old version of MySQL, the
mysqladmin
commands to set the password will fail with the message
parse error near 'SET password'
. The solution to this problem is
to upgrade the server to a newer version of MySQL.
You can also use UPDATE
to modify the user
table directly.
The following UPDATE
statement assigns a password to both root
accounts at once:
shell> mysql -u root mysql> UPDATE mysql.user SET Password = PASSWORD('newpwd') -> WHERE User = 'root'; mysql> FLUSH PRIVILEGES;
The UPDATE
statement applies both to Windows and to Unix.
After the passwords have been set, you must supply the appropriate
password whenever you connect to the server.
For example, if you want to use mysqladmin
to shut
down the server, you can do so using this command:
shell> mysqladmin -u root -p shutdown Enter password: (enter root password here)
Note: If you forget your root
password after setting it up,
the procedure for resetting it is covered in section A.4.1 How to Reset the Root Password.
To set up new accounts, you can use the GRANT
statement. For
instructions, see section 5.5.2 Adding New User Accounts to MySQL.
As a general rule, we recommend that when upgrading from one release series to another, you should go to the next series rather than skipping a series. For example, if you currently are running MySQL 3.23 and wish to upgrade to a newer series, upgrade to MySQL 4.0 rather than to 4.1 or 5.0.
The following items form a checklist of things you should do whenever you perform an upgrade:
mysql
database.) Occasionally new columns or tables are added to
support new features. To take advantage of these features, be sure that
your grant tables are up to date. The upgrade procedure is described in
section 2.5.8 Upgrading the Grant Tables.
mysqld-max
, then upgrade later to a non-Max version of MySQL,
mysqld_safe
will still attempt to run the old mysqld-max
server. If you perform such an upgrade, you should manually remove the old
mysqld-max
server to ensure that mysqld_safe
runs the new
mysqld
server.
You can always move the MySQL format files and data files between different
versions on the same architecture as long as you stay within versions for
the same release series of MySQL. The current production release series is
4.0. If you change the character set when running MySQL, you must run
myisamchk -r -q --set-character-set=charset
on all MyISAM
tables.
Otherwise, your indexes may not be ordered correctly, because changing the
character set may also change the sort order.
If you upgrade or downgrade from one release series to another, there may be
incompatibilities in table storage formats. In this case, you can use
mysqldump
to dump your tables before upgrading. After upgrading, reload
the dump file using mysql
to re-create your tables.
If you are cautious about using new versions, you can always rename your old
mysqld
before installing a newer one. For example, if you are using
MySQL 4.0.18 and want to upgrade to 4.1.1, rename your current server from
mysqld
to mysqld-4.0.18
. If your new mysqld
then does
something unexpected, you can simply shut it down and restart with your old
mysqld
.
If, after an upgrade, you experience problems with recompiled client programs,
such as Commands out of sync
or unexpected core dumps, you probably have
used old header or library files when compiling your programs. In this
case, you should check the date for your `mysql.h' file and
`libmysqlclient.a' library to verify that they are from the new
MySQL distribution. If not, recompile your programs with the new
headers and libraries.
If problems occur, such as that the new mysqld
server doesn't want to
start or that you can't connect without a password, verify that you don't
have some old `my.cnf' file from your previous installation. You can
check this with the --print-defaults
option (for example,
mysqld --print-defaults
). If this displays
anything other than the program name, you have an active `my.cnf'
file that affects server or client operation.
It is a good idea to rebuild and reinstall the Perl DBD::mysql
module whenever you install a new release of MySQL. The same applies to other
MySQL interfaces as well, such as the Python MySQLdb
module.
In general, you should do the following when upgrading to MySQL 5.0 from 4.1:
proc
table in the mysql
database.
To create this file, you should run the mysql_fix_privilege_tables
script as described in section 2.5.8 Upgrading the Grant Tables.
In general, you should do the following when upgrading to MySQL 4.1 from 4.0:
Password
column that is needed for secure handling of passwords. The
procedure uses mysql_fix_privilege_tables
and is described in
section 2.5.8 Upgrading the Grant Tables. Implications of the password-handling change
for applications are given later in this section. If you don't do this,
MySQL will not us the new more secure protocol to authenticate.
mysqldump
to dump your BDB
tables in text format and delete
all log.XXXXXXXXXX
files before you start MySQL 4.0 and reload
the data.
latin1_swedish_ci
character strings that are not BINARY
.
This changes the sorting order of space and ASCII(0) in those character
sets.
For latin1_swedish_ci
character strings and BINARY
strings,
InnoDB uses its own pad-spaces-at-end comparison method, which
stays unchanged.
If you have an InnoDB table created with MySQL-4.1.2 or earlier,
with an index on a non-latin1
character set
(in the case of 4.1.0 and 4.1.1
with any character set)
CHAR
/VARCHAR
/or TEXT
column
that is not BINARY
but
may contain the character ASCII(0), then you should do
ALTER TABLE
or OPTIMIZE
table on it to
regenerate the index,
after upgrading to MySQL-4.1.3 or later.
DBD-mysql
module
(Msql-MySQL-modules
) you have to upgrade to use the newer
DBD-mysql
module. Anything above DBD-mysql
2.xx should be fine.
If you don't upgrade, some methods (such as DBI->do()
) will not
notice error conditions correctly.
--defaults-file=option-file-name
will now give an error if
the option file doesn't exists.
Several visible behaviors have changed between MySQL 4.0 and MySQL 4.1 to fix some critical bugs and make MySQL more compatible with standard SQL. These changes may affect your applications.
Some of the 4.1 behaviors can be tested in 4.0 before performing
a full upgrade to 4.1. We have added to later MySQL 4.0 releases
(from 4.0.12 on) a --new
startup option for mysqld
.
See section 5.2.1 mysqld
Command-Line Options.
This option gives you the 4.1 behavior for the most critical changes.
You can also enable these behaviors for a given client connection with
the SET @@new=1
command, or turn them off if they are on with
SET @@new=0
.
If you believe that some of the 4.1 changes will affect you,
we recommend that before upgrading to 4.1, you download
the latest MySQL 4.0 version and run it with the --new
option by
adding the following to your config file:
[mysqld-4.0] new
That way you can test the new behaviors in 4.0 to make sure that your
applications work with them. This will help you have a smooth, painless
transition when you perform a full upgrade to 4.1 later. Putting the
--new
option in the [mysqld-4.0]
option group ensures
that you don't accidentally later run the 4.1
version with the --new
option.
The following lists describe changes that may affect applications and that you should watch out for when upgrading to version 4.1:
Server Changes:
SHOW CREATE TABLE
and mysqldump
.
(MySQL versions 4.0.6 and above can read the new dump files; older
versions cannot.)
This change should not affect applications that use only one character set.
mysqldump
.
See section 8.8 The mysqldump
Database Backup Program.
InnoDB
is not aware of multiple tablespaces.
--shared-memory-base-name
option for each server.
xxx_clear()
function for each aggregate function XXX()
.
Client Changes:
mysqldump
now has the --opt
and --quote-names
options
enabled by default. You can turn them off with --skip-opt
and
--skip-quote-names
.
SQL Changes:
'a' > 'a\t'
,
which it wasn't before. If you have any tables where you
have a CHAR
or VARCHAR
column in which the last character in the
column may be less than ASCII(32)
, you should use REPAIR TABLE
or
myisamchk
to ensure that the table is correct.
DELETE
statements, you should use the
alias of the tables from which you want to delete, not the actual table name.
For example, instead of doing this:
DELETE test FROM test AS t1, test2 WHERE ...Do this:
DELETE t1 FROM test AS t1, test2 WHERE ...
TIMESTAMP
is now returned as a string in 'YYYY-MM-DD HH:MM:SS'
format (from 4.0.12 the --new
option can be used to make a
4.0 server behave as 4.1 in this respect).
See section 12.3.1.2 TIMESTAMP
Properties as of MySQL 4.1.
If you want to have the value returned as a number (as MySQL 4.0 does) you
should add +0
to TIMESTAMP
columns when you retrieve them:
mysql> SELECT ts_col + 0 FROM tbl_name;Display widths for
TIMESTAMP
columns are no longer supported.
For example, if you declare a column as TIMESTAMP(10)
, the (10)
is ignored.
These changes were necessary for SQL standards compliance. In a future
version, a further change will be made (backward compatible with this
change), allowing the timestamp length to indicate the desired number of
digits for fractions of a second.
0xFFDF
now are assumed to be strings instead of
numbers. This fixes some problems with character sets where it's
convenient to input a string as a binary value. With this change,
you should use CAST()
if you want to compare binary values
numerically as integers:
mysql> SELECT CAST(0xFEFF AS UNSIGNED INTEGER) -> < CAST(0xFF AS UNSIGNED INTEGER); -> 0If you don't use
CAST()
, a lexical string comparison will be done:
mysql> SELECT 0xFEFF < 0xFF; -> 1Using binary items in a numeric context or comparing them using the
=
operator should work as before. (The --new
option can
be used from 4.0.13 on to make a 4.0 server behave as 4.1 in this respect.)
DATE
, DATETIME
, or TIME
value, the result returned to the client now is fixed up to have a temporal
type. For example, in MySQL 4.1, you get this result:
mysql> SELECT CAST('2001-1-1' AS DATETIME); -> '2001-01-01 00:00:00'In MySQL 4.0, the result is different:
mysql> SELECT CAST('2001-1-1' AS DATETIME); -> '2001-01-01'
DEFAULT
values no longer can be specified for AUTO_INCREMENT
columns. (In 4.0, a DEFAULT
value is silently ignored; in 4.1,
an error occurs.)
LIMIT
no longer accepts negative arguments.
Use some large number (maximum 18446744073709551615) instead of -1.
SERIALIZE
is no longer a valid mode value for the sql_mode
variable. You should use SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
instead. SERIALIZE
is no longer valid for the --sql-mode
option
for mysqld
, either. Use --transaction-isolation=SERIALIZABLE
instead.
C API Changes:
mysql_real_query()
now return 1
on error,
not -1
. You may have to change some old applications if they use
constructs like this:
if (mysql_real_query(mysql_object, query, query_length) == -1) { printf("Got error"); }Change the call to test for a non-zero value instead:
if (mysql_real_query(mysql_object, query, query_length) != 0) { printf("Got error"); }
Password-Handling Changes:
The password hashing mechanism has changed in 4.1 to provide better security, but this may cause compatibility problems if you still have clients that use the client library from 4.0 or earlier. (It is very likely that you will have 4.0 clients in situations where clients connect from remote hosts that have not yet upgraded to 4.1.) The following list indicates some possible upgrade strategies. They represent various tradeoffs between the goal of compatibility with old clients and the goal of security.
mysql_fix_privilege_tables
script
to widen the Password
column in the user
table so
that it can hold long password hashes. But run the server with the
--old-passwords
option to provide backward compatibility that
allows pre-4.1 clients to continue to connect to their short-hash
accounts.
Eventually, when all your clients are upgraded to 4.1, you can stop using the
--old-passwords
server option. You can also change the passwords for
your MySQL accounts to use the new more secure format.
mysql_fix_privilege_tables
script to widen the
Password
column in the user
table. If you know that all clients
also have been upgraded to 4.1, don't run the server with the
--old-passwords
option. Instead, change the passwords on all existing
accounts so that they have the new format. A pure-4.1 installation
is the most secure.
Further background on password hashing with respect to client authentication
and password-changing operations may be found in section 5.4.9 Password Hashing in MySQL 4.1 and
section A.2.3 Client does not support authentication protocol
.
In general, you should do the following when upgrading to MySQL 4.0 from 3.23:
mysql_fix_privilege_tables
script and is described
in section 2.5.8 Upgrading the Grant Tables.
ISAM
files to MyISAM
files. One way to do this
is with the
mysql_convert_table_format
script. (This is a Perl script;
it requires that DBI be installed.) To convert the tables in a given database,
use this command:
shell> mysql_convert_table_format database db_nameNote that this should be used only if all tables in the given database are
ISAM
or MyISAM
tables. To avoid converting tables
of other types to MyISAM
, you can explicitly list the names
of your ISAM
tables after the database name on the command
line.
Individual tables can be changed to MyISAM
by using the following
ALTER TABLE
statement for each table to be converted:
mysql> ALTER TABLE tbl_name TYPE=MyISAM;If you are not sure of the table type for a given table, use this statement:
mysql> SHOW TABLE STATUS LIKE 'tbl_name';
DBD::mysql
module). If you do, you should recompile
them, because the data structures used in `libmysqlclient.so' have changed.
The same applies to other MySQL interfaces as well, such as the Python
MySQLdb
module.
MySQL 4.0 will work even if you don't perform the preceding actions, but you
will not be able to use the new security privileges in MySQL 4.0 and you
may run into problems when upgrading later to MySQL 4.1 or newer. The
ISAM
file format still works in MySQL 4.0, but is deprecated and
is not compiled in by default as of MySQL 4.1. MyISAM
tables should
be used instead.
Old clients should work with a Version 4.0 server without any problems.
Even if you perform the preceding actions, you can still downgrade to MySQL
3.23.52 or newer if you run into problems with the MySQL 4.0 series. In
this case, you must use mysqldump
to dump any tables that use
full-text indexes and reload the dump file into the 3.23 server. This is
necessary because 4.0 uses a new format for full-text indexing.
The following lists describe changes that may affect applications and that you should watch out for when upgrading to version 4.0:
Server Changes:
mysql.user
table.
See section 5.4.3 Privileges Provided by MySQL.
To get these new privileges to work, you must update the grant tables.
The procedure is described in section 2.5.8 Upgrading the Grant Tables.
Until you do this, all
accounts have the SHOW DATABASES
, CREATE TEMPORARY TABLES
,
and LOCK TABLES
privileges. SUPER
and EXECUTE
privileges take their value from PROCESS
.
REPLICATION SLAVE
and REPLICATION CLIENT
take their
values from FILE
.
If you have any scripts that create new MySQL user accounts, you may want to change
them to use the new privileges. If you are not using GRANT
commands in the scripts, this is a good time to change your scripts to use
GRANT
instead of modifying the grant tables directly.
From version 4.0.2 on, the option --safe-show-database
is deprecated
(and no longer does anything). See section 5.3.3 Startup Options for mysqld
Concerning Security.
If you get Access denied
errors for new users in version 4.0.2 and up, you
should check whether you need some of the new grants that you didn't need
before. In particular, you will need REPLICATION SLAVE
(instead of FILE
) for new slave servers.
safe_mysqld
has been renamed to mysqld_safe
. For backward
compatibility, binary distributions will for some time include
safe_mysqld
as a symlink to mysqld_safe
.
InnoDB
support is now included by default in binary distributions.
If you build MySQL from source, InnoDB
is configured in by default.
If you do not use InnoDB
and want to save memory when running a
server that has InnoDB
support enabled, use the --skip-innodb
server startup option. To compile MySQL without InnoDB
support, run
configure
with the --without-innodb
option.
myisam_max_extra_sort_file_size
and
myisam_max_extra_sort_file_size
now are given in bytes
(they were given in megabytes before 4.0.3).
mysqld
now has the option --temp-pool
enabled by default
because this gives better performance with some operating systems (most
notably Linux).
mysqld
startup options --skip-locking
and
--enable-locking
were renamed to --skip-external-locking
and --external-locking
.
MyISAM
/ISAM
files is now
turned off by default. You can turn this on with
--external-locking
. (However, this is never needed for most users.)
Old Name | New Name |
myisam_bulk_insert_tree_size | bulk_insert_buffer_size
|
query_cache_startup_type | query_cache_type
|
record_buffer | read_buffer_size
|
record_rnd_buffer | read_rnd_buffer_size
|
sort_buffer | sort_buffer_size
|
warnings | log-warnings
|
--err-log | --log-error (for mysqld_safe )
|
record_buffer
, sort_buffer
, and
warnings
will still work in MySQL 4.0 but are deprecated.
SQL Changes:
Old Name | New Name |
SQL_BIG_TABLES | BIG_TABLES
|
SQL_LOW_PRIORITY_UPDATES | LOW_PRIORITY_UPDATES
|
SQL_MAX_JOIN_SIZE | MAX_JOIN_SIZE
|
SQL_QUERY_CACHE_TYPE | QUERY_CACHE_TYPE
|
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=skip_count
instead of
SET SQL_SLAVE_SKIP_COUNTER=skip_count
.
SHOW MASTER STATUS
now returns an empty set if binary logging is not
enabled.
SHOW SLAVE STATUS
now returns an empty set if the slave is not
initialized.
SHOW INDEX
has two more columns than it had in 3.23 (Null
and
Index_type
).
SHOW OPEN TABLES
has changed.
ORDER BY col_name DESC
sorts NULL
values last, as of
MySQL 4.0.11. In 3.23 and in earlier 4.0 versions, this was not
always consistent.
CHECK
, LOCALTIME
, and LOCALTIMESTAMP
now are reserved words.
DOUBLE
and FLOAT
columns now honor the
UNSIGNED
flag on storage (before, UNSIGNED
was ignored for
these columns).
|
, &
, <<
,
>>
, and ~
) is now unsigned. This may cause problems if you
are using them in a context where you want a signed result.
See section 13.7 Cast Functions.
Note: When you use subtraction between integer values where
one is of type UNSIGNED
, the result will be unsigned. In other
words, before upgrading to MySQL 4.0, you should check your application
for cases in which you are subtracting a value from an unsigned entity and
want a negative answer or subtracting an unsigned value from an
integer column. You can disable this behavior by using the
--sql-mode=NO_UNSIGNED_SUBTRACTION
option when starting
mysqld
. See section 5.2.2 The Server SQL Mode.
BIGINT
columns (instead
of using strings, as you did in MySQL 3.23). Using strings will still
work, but using integers is more efficient.
INSERT INTO ... SELECT
always had IGNORE
enabled.
As of 4.0.1, MySQL will stop (and possibly roll back) by default in case of
an error unless you specify IGNORE
.
TRUNCATE TABLE
when you want to delete all rows
from a table and you don't need to obtain a count of the number of rows
that were deleted. (DELETE FROM tbl_name
returns a row count in
4.0 and doesn't reset the AUTO_INCREMENT
counter, and
TRUNCATE TABLE
is faster.)
LOCK TABLES
statement when trying to execute TRUNCATE TABLE
or DROP
DATABASE
.
MATCH ... AGAINST (... IN BOOLEAN MODE)
full-text searches
with your tables, you must rebuild their indexes with REPAIR TABLE
tbl_name USE_FRM
. If you attempt a boolean full-text search without
rebuilding the indexes this way, the search will return incorrect results.
See section 13.6.4 Fine-Tuning MySQL Full-Text Search.
LOCATE()
and INSTR()
are case sensitive if one of the
arguments is a binary string. Otherwise they are case insensitive.
STRCMP()
now uses the current character set when performing comparisons.
This makes the default comparison behavior not case sensitive unless
one or both of the operands are binary strings.
HEX(string)
now returns the characters in string
converted to
hexadecimal. If you want to convert a number to hexadecimal, you should
ensure that you call HEX()
with a numeric argument.
RAND(seed)
returns a different random number series in 4.0 than in
3.23; this was done to further differentiate RAND(seed)
and
RAND(seed+1)
.
IFNULL(A,B)
is now set to be the
more ``general'' of the types of A
and B
. (The general-to-specific
order is string, REAL
, INTEGER
).
C API Changes:
mysql_drop_db()
, mysql_create_db()
, and
mysql_connect()
are no longer supported unless you compile
MySQL with CFLAGS=-DUSE_OLD_FUNCTIONS
. However, it is preferable
to change client programs to use the new 4.0 API instead.
MYSQL_FIELD
structure, length
and max_length
have
changed from unsigned int
to unsigned long
. This should not
cause any problems, except that they may generate warning messages when
used as arguments in the printf()
class of functions.
mysql_thread_init()
and
mysql_thread_end()
. See section 21.2.14 How to Make a Threaded Client.
Other Changes:
DBD::mysql
module, use a recent
version. Version 2.9003 is recommended. Versions older than 1.2218 should
not be used because they use the deprecated mysql_drop_db()
call.
MySQL 3.22 and 3.21 clients will work without any problems with a MySQL 3.23 server.
When upgrading to MySQL 3.23 from an earlier version, note the following changes:
Table Changes:
MyISAM
type and the old
ISAM
type. By default, all new tables are created with type
MyISAM
unless you start mysqld
with the
--default-table-type=isam
option. You don't have to convert your old
ISAM
tables to use them with MySQL 3.23. You can convert an
ISAM
table to MyISAM
format with ALTER TABLE tbl_name
TYPE=MyISAM
or the Perl script mysql_convert_table_format
.
tis620
character set must be fixed
with myisamchk -r
or REPAIR TABLE
.
german
character sort order for ISAM
tables, you must repair them with isamchk -r
, because we have made
some changes in the sort order.
Client Program Changes:
mysql
is now by default started with the
--no-named-commands (-g)
option. This option can be disabled with
--enable-named-commands (-G)
. This may cause incompatibility problems in
some cases--for example, in SQL scripts that use named commands without a
semicolon. Long format commands still work from the first line.
mysqldump
files to be compatible between
MySQL 3.22 and 3.23, you should not use the
--opt
or --all
option to mysqldump
.
SQL Changes:
DROP DATABASE
on a symbolically linked database, both the
link and the original database are deleted. This didn't happen in MySQL 3.22
because configure
didn't detect the availability of the
readlink()
system call.
OPTIMIZE TABLE
now works only for MyISAM
tables.
For other table types, you can use ALTER TABLE
to optimize the table.
During OPTIMIZE TABLE
, the table is now locked to prevent it from being
used by other threads.
MONTH()
) will now
return 0 for 0000-00-00
dates. In MySQL 3.22, these functions returned
NULL
.
IF()
now depends on both arguments,
not just the first one.
AUTO_INCREMENT
columns should not be used to store negative
numbers. The reason for this is that negative numbers caused problems
when wrapping from -1 to 0. You should not store 0 in AUTO_INCREMENT
columns, either; CHECK TABLE
will complain about 0 values because
they may change if you dump and restore the table. AUTO_INCREMENT
for MyISAM
tables is now handled at a lower level and is much
faster than before. In addition, for MyISAM
tables, old numbers
are no longer reused, even if you delete rows from the table.
CASE
, DELAYED
, ELSE
, END
, FULLTEXT
,
INNER
, RIGHT
, THEN
, and WHEN
now are reserved words.
FLOAT(p)
now is a true floating-point type and not a value with a
fixed number of decimals.
DECIMAL(length,dec)
type, the
length
argument no longer includes a place for the sign or the
decimal point.
TIME
string must now be of one of the following formats:
[[[DAYS] [H]H:]MM:]SS[.fraction]
or
[[[[[H]H]H]H]MM]SS[.fraction]
.
LIKE
now compares strings using the same character comparison rules
as for the =
operator. If you require the old behavior, you can
compile MySQL with the CXXFLAGS=-DLIKE_CMP_TOUPPER
flag.
REGEXP
now is case insensitive if neither of the strings is a binary
string.
MyISAM
(`.MYI') tables, you should use
the CHECK TABLE
statement or the myisamchk
command. For
ISAM
(`.ISM') tables, use the isamchk
command.
DATE_FORMAT()
to make sure that there is a
`%' before each format character.
(MySQL 3.22 already allowed this syntax, but now `%' is required.)
SELECT DISTINCT ...
was
almost always sorted. In MySQL 3.23, you must use GROUP BY
or
ORDER BY
to obtain sorted output.
SUM()
now returns NULL
instead of 0 if
there are no matching rows. This is required by standard SQL.
AND
or OR
with NULL
values will now return
NULL
instead of 0. This mostly affects queries that use NOT
on an AND/OR
expression as NOT NULL
= NULL
.
LPAD()
and RPAD()
now shorten the result string if it's longer
than the length argument.
C API Changes:
mysql_fetch_fields_direct()
now is a function instead of a macro.
It now returns a pointer to a MYSQL_FIELD
instead of a
MYSQL_FIELD
.
mysql_num_fields()
no longer can be used on a MYSQL*
object (it's
now a function that takes a MYSQL_RES*
value as an argument). With a
MYSQL*
object, you now should use mysql_field_count()
instead.
Nothing that affects compatibility has changed between versions 3.21 and 3.22.
The only pitfall is that new tables that are created with DATE
type
columns will use the new way to store the date. You can't access these new
columns from an old version of mysqld
.
When upgrading to MySQL 3.23 from an earlier version, note the following changes:
mysql_fix_privilege_tables
script. This will add the
new privileges that you need to use the GRANT
command. If you forget
this, you will get Access denied
when you try to use ALTER
TABLE
, CREATE INDEX
, or DROP INDEX
. The procedure for updating
the grant tables is described in section 2.5.8 Upgrading the Grant Tables.
mysql_real_connect()
has changed. If you have
an old client program that calls this function, you must pass a 0
for
the new db
argument (or recode the client to send the db
element for faster connections). You must also call mysql_init()
before calling mysql_real_connect()
. This change was done to allow
the new mysql_options()
function to save options in the MYSQL
handler structure.
mysqld
variable key_buffer
has been renamed to
key_buffer_size
, but you can still use the old name in your
startup files.
If you are running a version older than Version 3.20.28 and want to switch to Version 3.21, you need to do the following:
You can start the mysqld
Version 3.21 server with the
--old-protocol
option to use it with clients from a Version 3.20
distribution. In this case, the server uses the old pre-3.21
password()
checking rather than the new method. Also, the new client
function mysql_errno()
will not return any server error, only
CR_UNKNOWN_ERROR
. The function does work for client errors.
If you are not using the --old-protocol
option to
mysqld
, you will need to make the following changes:
MyODBC
2.x driver.
scripts/add_long_password
script must be run to convert the
Password
field in the mysql.user
table to CHAR(16)
.
mysql.user
table to get 62-bit
rather than 31-bit passwords.
MySQL 3.20.28 and above can handle the new user
table
format without affecting clients. If you have a MySQL version earlier
than 3.20.28, passwords will no longer work with it if you convert the
user
table. So to be safe, you should first upgrade to at least Version
3.20.28 and then upgrade to Version 3.21.
The new client code works with a 3.20.x mysqld
server, so
if you experience problems with 3.21.x, you can use the old 3.20.x server
without having to recompile the clients again.
If you are not using the --old-protocol
option to mysqld
,
old clients will be unable to connect and will issue the following error
message:
ERROR: Protocol mismatch. Server Version = 10 Client Version = 9
The Perl DBI interface also supports the old
mysqlperl
interface. The only change you have to make if you use
mysqlperl
is to change the arguments to the connect()
function.
The new arguments are: host
, database
, user
,
and password
(note that the user
and password
arguments
have changed places).
The following changes may affect queries in old applications:
HAVING
must now be specified before any ORDER BY
clause.
LOCATE()
have been swapped.
DATE
,
TIME
, and TIMESTAMP
.
When upgrading MySQL under Windows, please follow these steps:
NET STOP MySQL
or with
the Services
utility if you
are running MySQL as a service, or with mysqladmin shutdown
otherwise).
WinMySQLAdmin
program if it is running.
C:\mysql4
. Overwriting the old installation is recommended.
NET START MySQL
if you run MySQL
as a service, or invoke mysqld
directly otherwise.
Possible error situations:
A system error has occurred. System error 1067 has occurred. The process terminated unexpectedly.
These errors mean that your option file (by default `C:\my.cnf') contains an option that cannot be recognized by MySQL. You can verify that this is the case by trying to restart MySQL with the option file renamed to prevent the server from using it. (For example, rename `C:\my.cnf' to `C:\my_cnf.old'.) Once you have verified it, you need to identify which option is the culprit. Create a new `my.cnf' file and move parts of the old file to it (restarting the server after you move each part) until you determine which option causes server startup to fail.
Some releases introduce changes to the structure of the grant tables
(the tables in the mysql
database)
to add new privileges or features. To make sure that your grant tables
are current when you update to a new version of MySQL, you should update
your grant tables as well.
On Unix or Unix-like systems, update the grant tables by running the
mysql_fix_privilege_tables
script:
shell> mysql_fix_privilege_tables
You must run this script while the server is running. It attempts to
connect to the server running on the local host as root
.
If your root
account requires a password, indicate the password
on the command line. For MySQL 4.1 and up, specify the password like this:
shell> mysql_fix_privilege_tables --password=root_password
Prior to MySQL 4.1, specify the password like this:
shell> mysql_fix_privilege_tables root_password
The mysql_fix_privilege_tables
script performs any actions
necessary to convert your grant tables to the current format. You
might see some Duplicate column name
warnings as it runs; you can
ignore them.
After running the script, stop the server and restart it.
On Windows systems, there isn't an easy way to update the grant tables
until MySQL 4.0.15. From version 4.0.15 on, MySQL distributions include a
mysql_fix_privilege_tables.sql
SQL script that you can run using
the mysql
client. If your MySQL installation is located at
`C:\mysql', the commands look like this:
C:\> C:\mysql\bin\mysql -u root -p mysql mysql> SOURCE C:\mysql\scripts\mysql_fix_privilege_tables.sql
If your installation is located in some other directory, adjust the pathnames appropriately.
The mysql
command will prompt you for the root
password; enter it
when prompted.
As with the Unix procedure, you might see some Duplicate column name
warnings as mysql
processes the statements in the
mysql_fix_privilege_tables.sql
script; you can ignore them.
After running the script, stop the server and restart it.
If you are using MySQL 3.23 or later, you can copy the `.frm',
`.MYI', and `.MYD' files for MyISAM
tables between different
architectures that support the same floating-point format. (MySQL takes care
of any byte-swapping issues.)
See section 15.1 The MyISAM
Storage Engine.
The MySQL ISAM
data and index files (`.ISD' and `*.ISM',
respectively) are architecture dependent and in some cases operating
system dependent. If you want to move your applications to another
machine that has a different architecture or operating system than your
current machine, you should not try to move a database by simply copying
the files to the other machine. Use mysqldump
instead.
By default, mysqldump
will create a file containing SQL statements.
You can then transfer the file to the other machine and feed it as input
to the mysql
client.
Try mysqldump --help
to see what options are available.
If you are moving the data to a newer version of MySQL, you should use
mysqldump --opt
to take advantage of any optimizations that result
in a dump file that is smaller and can be processed faster.
The easiest (although not the fastest) way to move a database between two machines is to run the following commands on the machine on which the database is located:
shell> mysqladmin -h 'other hostname' create db_name shell> mysqldump --opt db_name | mysql -h 'other hostname' db_name
If you want to copy a database from a remote machine over a slow network, you can use:
shell> mysqladmin create db_name shell> mysqldump -h 'other hostname' --opt --compress db_name | mysql db_name
You can also store the result in a file, then transfer the file to the target machine and load the file into the database there. For example, you can dump a database to a file on the source machine like this:
shell> mysqldump --quick db_name | gzip > db_name.contents.gz
(The file created in this example is compressed.) Transfer the file containing the database contents to the target machine and run these commands there:
shell> mysqladmin create db_name shell> gunzip < db_name.contents.gz | mysql db_name
You can also use mysqldump
and mysqlimport
to transfer
the database.
For big tables, this is much faster than simply using mysqldump
.
In the following commands, DUMPDIR
represents the full pathname
of the directory you use to store the output from mysqldump
.
First, create the directory for the output files and dump the database:
shell> mkdir DUMPDIR shell> mysqldump --tab=DUMPDIR db_name
Then transfer the files in the DUMPDIR
directory to some corresponding
directory on the target machine and load the files into MySQL
there:
shell> mysqladmin create db_name # create database shell> cat DUMPDIR/*.sql | mysql db_name # create tables in database shell> mysqlimport db_name DUMPDIR/*.txt # load data into tables
Also, don't forget to copy the mysql
database because that is
where the user
, db
, and host
grant tables are stored.
You might have to run commands as the MySQL root
user on the new
machine until you have the mysql
database in place.
After you import the mysql
database on the new machine, execute
mysqladmin flush-privileges
so that the server reloads the grant table
information.
This section discusses issues that have been found to occur on Linux. The first few subsections describe general operating system-related issues, problems that can occur when using binary or source distributions, and post-installation issues. The remaining subsections discuss problems that occur with Linux on specific platforms.
Note that most of these problems occur on older versions of Linux. If you are running a recent version, you likely will see none of them.
MySQL needs at least Linux Version 2.0.
Warning: We have seen some strange problems with Linux 2.2.14 and MySQL on SMP systems. We also have reports from some MySQL users that they have encountered serious stability problems using MySQL with kernel 2.2.14. If you are using this kernel, you should upgrade to 2.2.19 (or newer) or to a 2.4 kernel. If you have a multiple-CPU box, then you should seriously consider using 2.4 because it will give you a significant speed boost. Your system also will be more stable.
When using LinuxThreads, you will see a minimum of three mysqld
processes
running. These are in fact threads. There will be one thread for the
LinuxThreads manager, one thread to handle connections, and one thread
to handle alarms and signals.
The Linux-Intel binary and RPM releases of MySQL are configured for the highest possible speed. We are always trying to use the fastest stable compiler available.
The binary release is linked with -static
, which means you do not
normally need to worry about which version of the system libraries you
have. You need not install LinuxThreads, either. A program linked with
-static
is slightly larger than a dynamically linked program,
but also slightly faster (3-5%). However, one problem with a statically
linked program is that you can't use user-defined functions (UDFs).
If you are going to write or use UDFs (this is something for C or C++
programmers only), you must compile MySQL yourself using dynamic linking.
A known issue with binary distributions is that on older Linux
systems that use libc
(such as Red Hat 4.x or Slackware), you will get
some non-fatal problems with hostname resolution. If your system uses
libc
rather than glibc2
,
you probably will encounter some difficulties with hostname resolution and
getpwnam()
. This happens because glibc
unfortunately depends on some external libraries to implement hostname
resolution and getpwent()
, even when compiled with -static
.
These problems manifest themselves in two ways:
mysql_install_db
:
Sorry, the host 'xxxx' could not be looked upYou can deal with this by executing
mysql_install_db --force
, which will not execute the
resolveip
test in mysql_install_db
. The downside is that
you can't use hostnames in the grant tables: Except for localhost
,
you must use IP numbers instead. If you are using an old version of MySQL
that doesn't support --force
, you must manually remove the
resolveip
test in mysql_install
using an editor.
mysqld
with the --user
option:
getpwnam: No such file or directoryTo work around this, start
mysqld
by using
the su
command rather than by specifying the --user
option. This causes the system itself to change the user ID of the
mysqld
process so that mysqld
need not do so.
Another solution, which solves both problems, is to not use a binary
distribution. Get a MySQL source distribution (in RPM or tar.gz
format) and install that instead.
On some Linux 2.2 versions, you may get the error Resource
temporarily unavailable
when clients make a lot of new connections to
a mysqld
server over TCP/IP. The problem is that Linux has a
delay between the time that you close a TCP/IP socket and the time that
the system actually frees it. There is room for only a finite number
of TCP/IP slots, so you will encounter the resource-unavailable error if
clients attempt too many new TCP/IP connections during a short time. For
example, you may see the error when you run the MySQL `test-connect'
benchmark over TCP/IP.
We have inquired about this problem a few times on different Linux mailing lists but have never been able to find a suitable resolution. The only known ``fix'' is for the clients to use persistent connections, or, if you are running the database server and clients on the same machine, to use Unix socket file connections rather than TCP/IP connections.
The following notes regarding glibc
apply only to the situation
when you build MySQL
yourself. If you are running Linux on an x86 machine, in most cases it is
much better for you to just use our binary. We link our binaries against
the best patched version of glibc
we can come up with and with the
best compiler options, in an attempt to make it suitable for a high-load
server. For a typical user, even for setups with a lot of concurrent
connections or tables exceeding the 2GB limit, our binary is
the best choice in most cases. After reading the following text, if you
are in doubt about what to do, try our binary first to see whether it meets
your needs. If you discover that it is not good enough, then
you may want to try your own build. In that case, we would appreciate
a note about it so that we can build a better binary next time.
MySQL uses LinuxThreads on Linux. If you are using an old
Linux version that doesn't have glibc2
, you must install
LinuxThreads before trying to compile MySQL. You can get
LinuxThreads at http://dev.mysql.com/downloads/os-linux.html.
Note that glibc
versions before and including Version 2.1.1 have
a fatal bug in pthread_mutex_timedwait()
handling, which is used
when you issue INSERT DELAYED
statements. We recommend that you not use
INSERT DELAYED
before upgrading glibc
.
Note that Linux kernel and the LinuxThread library can by default only have 1,024 threads. If you plan to have more than 1,000 concurrent connections, you will need to make some changes to LinuxThreads:
PTHREAD_THREADS_MAX
in
`sysdeps/unix/sysv/linux/bits/local_lim.h' to 4096 and decrease
STACK_SIZE
in `linuxthreads/internals.h' to 256KB. The
paths are relative to the root of glibc
. (Note that MySQL will
not be stable with around 600-1000 connections if STACK_SIZE
is the default of 2MB.)
The page http://www.volano.com/linuxnotes.html contains additional information about circumventing thread limits in LinuxThreads.
There is another issue that greatly hurts MySQL performance, especially on
SMP systems. The mutex implementation in LinuxThreads in glibc
2.1 is very bad for programs with many threads that hold the mutex
only for a short time. This produces a paradoxical result: If you link
MySQL against an unmodified LinuxThreads, removing processors from an
SMP actually improves MySQL performance in many cases. We have made a
patch available for glibc
2.1.3 to correct this behavior
(http://www.mysql.com/Downloads/Linux/linuxthreads-2.1-patch).
With glibc
2.2.2,
MySQL 3.23.36 will use the adaptive mutex, which is much
better than even the patched one in glibc
2.1.3. Be warned, however,
that under some conditions, the current mutex code in glibc
2.2.2
overspins, which hurts MySQL performance. The likelihood that this condition
will occur can be reduced by renicing the mysqld
process to the highest
priority. We have also been able to correct the overspin behavior with
a patch, available at
http://www.mysql.com/Downloads/Linux/linuxthreads-2.2.2.patch.
It combines the correction of overspin, maximum number of
threads, and stack spacing all in one. You will need to apply it in the
linuxthreads
directory with
patch -p0 </tmp/linuxthreads-2.2.2.patch
.
We hope it will be included in
some form in future releases of glibc
2.2. In any case, if
you link against glibc
2.2.2, you still need to correct
STACK_SIZE
and PTHREAD_THREADS_MAX
. We hope that the defaults
will be corrected to some more acceptable values for high-load
MySQL setup in the future, so that the commands needed to produce
your own build can be reduced to ./configure; make; make install
.
We recommend that you use these patches to build a special static
version of libpthread.a
and use it only for statically linking
against MySQL. We know that the patches are safe for MySQL
and significantly improve its performance, but we cannot say anything
about other applications. If you link other applications that require
LinuxThreads against the
patched static version of the library, or build a patched shared version and
install it on your system, you do so at your own risk.
If you experience any strange problems during the installation of MySQL, or with some common utilities hanging, it is very likely that they are either library or compiler related. If this is the case, using our binary will resolve them.
If you link your own MySQL client programs, you may see the following error at runtime:
ld.so.1: fatal: libmysqlclient.so.#: open failed: No such file or directory
This problem can be avoided by one of the following methods:
-Wl,r/full/path/to/libmysqlclient.so
flag rather than with -Lpath
).
libmysqclient.so
to `/usr/lib'.
LD_RUN_PATH
environment variable before running your client.
If you are using the Fujitsu compiler (fcc/FCC
), you will have
some problems compiling MySQL because the Linux header files are very
gcc
oriented.
The following configure
line should work with fcc/FCC
:
CC=fcc CFLAGS="-O -K fast -K lib -K omitfp -Kpreex -D_GNU_SOURCE \ -DCONST=const -DNO_STRTOLL_PROTO" \ CXX=FCC CXXFLAGS="-O -K fast -K lib \ -K omitfp -K preex --no_exceptions --no_rtti -D_GNU_SOURCE \ -DCONST=const -Dalloca=__builtin_alloca -DNO_STRTOLL_PROTO \ '-D_EXTERN_INLINE=static __inline'" \ ./configure \ --prefix=/usr/local/mysql --enable-assembler \ --with-mysqld-ldflags=-all-static --disable-shared \ --with-low-memory
mysql.server
can be found in the `support-files' directory under
the MySQL installation directory or in a MySQL source tree. You can install
it as `/etc/init.d/mysql' for automatic MySQL startup and shutdown.
See section 2.4.2.2 Starting and Stopping MySQL Automatically.
If MySQL can't open enough files or connections, it may be that you haven't configured Linux to handle enough files.
In Linux 2.2 and onward, you can check the number of allocated file handles as follows:
shell> cat /proc/sys/fs/file-max shell> cat /proc/sys/fs/dquot-max shell> cat /proc/sys/fs/super-max
If you have more than 16MB of memory, you should add something like the following to your init scripts (for example, `/etc/init.d/boot.local' on SuSE Linux):
echo 65536 > /proc/sys/fs/file-max echo 8192 > /proc/sys/fs/dquot-max echo 1024 > /proc/sys/fs/super-max
You can also run the echo
commands from the command line as root
,
but these settings will be lost the next time your computer restarts.
Alternatively, you can set these parameters on startup by using the
sysctl
tool, which is used by many Linux distributions (SuSE has
added it as well, beginning with SuSE Linux 8.0). Just put the following
values into a file named `/etc/sysctl.conf':
# Increase some values for MySQL fs.file-max = 65536 fs.dquot-max = 8192 fs.super-max = 1024
You should also add the following to `/etc/my.cnf':
[mysqld_safe] open-files-limit=8192
This should allow the server a limit of 8,192 for the combined number of connections and open files.
The STACK_SIZE
constant in LinuxThreads controls the spacing of thread
stacks in the address space. It needs to be large enough so that there will
be plenty of room for each individual thread stack, but small enough
to keep the stack of some threads from running into the global mysqld
data. Unfortunately, as we have experimentally discovered, the Linux
implementation of mmap()
will successfully unmap an already mapped
region if you ask it to map out an address already in use, zeroing out the data
on the entire page instead of returning an error. So, the safety of
mysqld
or any other threaded application depends on ``gentlemanly''
behavior of the code that creates threads. The user must take measures to
make sure that the number of running threads at any time is sufficiently low for
thread stacks to stay away from the global heap. With mysqld
, you
should enforce this behavior by setting a reasonable value for
the max_connections
variable.
If you build MySQL yourself, you can patch LinuxThreads for better stack use.
See section 2.6.1.3 Linux Source Distribution Notes.
If you do not want to patch
LinuxThreads, you should set max_connections
to a value no higher
than 500. It should be even less if you have a large key buffer, large
heap tables, or some other things that make mysqld
allocate a lot
of memory, or if you are running a 2.2 kernel with a 2GB patch. If you are
using our binary or RPM version 3.23.25 or later, you can safely set
max_connections
at 1500, assuming no large key buffer or heap tables
with lots of data. The more you reduce STACK_SIZE
in LinuxThreads
the more threads you can safely create. We recommend values between
128KB and 256KB.
If you use a lot of concurrent connections, you may suffer from a ``feature'' in the 2.2 kernel that attempts to prevent fork bomb attacks by penalizing a process for forking or cloning a child. This causes MySQL not to scale well as you increase the number of concurrent clients. On single-CPU systems, we have seen this manifested as very slow thread creation: It may take a long time to connect to MySQL (as long as one minute), and it may take just as long to shut it down. On multiple-CPU systems, we have observed a gradual drop in query speed as the number of clients increases. In the process of trying to find a solution, we have received a kernel patch from one of our users who claimed it made a lot of difference for his site. The patch is available at http://www.mysql.com/Downloads/Patches/linux-fork.patch. We have now done rather extensive testing of this patch on both development and production systems. It has significantly improved MySQL performance without causing any problems and we now recommend it to our users who still run high-load servers on 2.2 kernels.
This issue has been fixed in the 2.4 kernel, so if you are not satisfied with the current performance of your system, rather than patching your 2.2 kernel, it might be easier to upgrade to 2.4. On SMP systems, upgrading also will give you a nice SMP boost in addition to fixing the fairness bug.
We have tested MySQL on the 2.4 kernel on a two-CPU machine and found MySQL scales much better. There was virtually no slowdown on query throughput all the way up to 1,000 clients, and the MySQL scaling factor (computed as the ratio of maximum throughput to the throughput for one client) was 180%. We have observed similar results on a four-CPU system: Virtually no slowdown as the number of clients was increased up to 1,000, and a 300% scaling factor. Based on these results, for a high-load SMP server using a 2.2 kernel, we definitely recommend upgrading to the 2.4 kernel at this point.
We have discovered that it is essential to run the mysqld
process
with the highest possible priority on the 2.4 kernel to achieve maximum
performance. This can be done by adding a renice -20 $$
command
to mysqld_safe
. In our testing on a four-CPU machine, increasing
the priority resulted in a 60% throughput increase with 400 clients.
We are currently also trying to collect more information on how well MySQL performs with a 2.4 kernel on four-way and eight-way systems. If you have access such a system and have done some benchmarks, please send an email message to [email protected] with the results. We will review them for inclusion in the manual.
If you see a dead mysqld
server process with ps
, this usually
means that you have found a bug in MySQL or you have a corrupted
table. See section A.4.2 What to Do If MySQL Keeps Crashing.
To get a core dump on Linux if mysqld
dies with a SIGSEGV
signal,
you can start mysqld
with the --core-file
option. Note
that you also probably need to raise the core file size by adding
ulimit -c 1000000
to mysqld_safe
or starting
mysqld_safe
with --core-file-size=1000000
.
See section 5.1.3 The mysqld_safe
Server Startup Script.
MySQL requires libc
Version 5.4.12 or newer. It's known to
work with libc
5.4.46. glibc
Version 2.0.6 and later should
also work. There have been some problems with the glibc
RPMs from
Red Hat, so if you have problems, check whether there are any updates.
The glibc
2.0.7-19 and 2.0.7-29 RPMs are known to work.
If you are using Red Hat 8.0 or a new glibc
2.2.x library, you may see
mysqld
die in gethostbyaddr()
. This happens because the new
glibc
library requires a stack size greater than 128KB for this call.
To fix the problem, start mysqld
with the --thread-stack=192K
option. (Use -O thread_stack=192K
before MySQL 4.)
This stack size is now the default on MySQL 4.0.10 and above, so you should
not see the problem.
If you are using gcc
3.0 and above to compile MySQL, you must install
the libstdc++v3
library before compiling MySQL; if you don't do
this, you will get an error about a missing __cxa_pure_virtual
symbol during linking.
On some older Linux distributions, configure
may produce an error
like this:
Syntax error in sched.h. Change _P to __P in the /usr/include/sched.h file. See the Installation chapter in the Reference Manual.
Just do what the error message says. Add an extra underscore to the
_P
macro name that has only one underscore, then try again.
You may get some warnings when compiling. Those shown here can be ignored:
mysqld.cc -o objs-thread/mysqld.o mysqld.cc: In function `void init_signals()': mysqld.cc:315: warning: assignment of negative value `-1' to `long unsigned int' mysqld.cc: In function `void * signal_hand(void *)': mysqld.cc:346: warning: assignment of negative value `-1' to `long unsigned int'
If mysqld
always dumps core when it starts, the problem may be that
you have an old `/lib/libc.a'. Try renaming it, then remove
`sql/mysqld' and do a new make install
and try again. This
problem has been reported on some Slackware installations.
If you get the following error when linking mysqld
,
it means that your `libg++.a' is not installed correctly:
/usr/lib/libc.a(putc.o): In function `_IO_putc': putc.o(.text+0x0): multiple definition of `_IO_putc'
You can avoid using `libg++.a' by running configure
like this:
shell> CXX=gcc ./configure
If mysqld
crashes immediately and you are running Red Hat Version 5.0
with a version of glibc
older than 2.0.7-5, you should make sure that
you have installed all glibc
patches. There is a lot of information
about this in the MySQL mail archives, available online at
http://lists.mysql.com/.
In some implementations, readdir_r()
is broken. The symptom is
that the SHOW DATABASES
statement always returns an empty set.
This can be fixed by removing HAVE_READDIR_R
from `config.h'
after configuring and before compiling.
MySQL 3.23.12 is the first MySQL version that is tested on Linux-Alpha. If you plan to use MySQL on Linux-Alpha, you should ensure that you have this version or newer.
We have tested MySQL on Alpha with our benchmarks and test suite, and it appears to work nicely.
We currently build the MySQL binary packages on SuSE Linux 7.0 for AXP, kernel 2.4.4-SMP, Compaq C compiler (V6.2-505) and Compaq C++ compiler (V6.3-006) on a Compaq DS20 machine with an Alpha EV6 processor.
You can find the preceding compilers at
http://www.support.compaq.com/alpha-tools/. By using these compilers
rather than gcc
, we get about 9-14% better MySQL performance.
Note that until MySQL version 3.23.52 and 4.0.2, we optimized the binary for
the current CPU only (by using the -fast
compile option). This means
that for older versions, you can use our Alpha binaries only if you have an
Alpha EV6 processor.
For all following releases, we added the -arch generic
flag
to our compile options, which makes sure that the binary runs on all Alpha
processors. We also compile statically to avoid library problems.
The configure
command looks like this:
CC=ccc CFLAGS="-fast -arch generic" CXX=cxx \ CXXFLAGS="-fast -arch generic -noexceptions -nortti" \ ./configure --prefix=/usr/local/mysql --disable-shared \ --with-extra-charsets=complex --enable-thread-safe-client \ --with-mysqld-ldflags=-non_shared --with-client-ldflags=-non_shared
If you want to use egcs
, the following configure
line worked
for us:
CFLAGS="-O3 -fomit-frame-pointer" CXX=gcc \ CXXFLAGS="-O3 -fomit-frame-pointer -felide-constructors \ -fno-exceptions -fno-rtti" \ ./configure --prefix=/usr/local/mysql --disable-shared
Some known problems when running MySQL on Linux-Alpha:
gdb 4.18
. You should use gdb
5.1 instead.
mysqld
statically when using gcc
, the
resulting image will dump core at startup time. In other words, do not
use --with-mysqld-ldflags=-all-static
with gcc
.
MySQL should work on MkLinux with the newest glibc
package
(tested with glibc
2.0.7).
To get MySQL to work on Qube2 (Linux Mips), you need the
newest glibc
libraries. glibc-2.0.7-29C2
is known to
work. You must also use the egcs
C++ compiler
(egcs-1.0.2-9
, gcc 2.95.2
or newer).
To get MySQL to compile on Linux IA-64, we use the following configure
command for building with gcc
2.96:
CC=gcc \ CFLAGS="-O3 -fno-omit-frame-pointer" \ CXX=gcc \ CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors \ -fno-exceptions -fno-rtti" \ ./configure --prefix=/usr/local/mysql \ "--with-comment=Official MySQL binary" \ --with-extra-charsets=complex
On IA-64, the MySQL client binaries use shared libraries. This means
that if you install our binary distribution at a location other than
`/usr/local/mysql', you need to add the path of the directory
where you have `libmysqlclient.so' installed either to the
`/etc/ld.so.conf' file or to the value of your LD_LIBRARY_PATH
environment variable.
See section A.3.1 Problems Linking to the MySQL Client Library.
On Mac OS X, tar
cannot handle long filenames. If you need to unpack a
`.tar.gz' distribution, use gnutar
instead.
MySQL should work without any problems on Mac OS X 10.x (Darwin).
Our binary for Mac OS X is compiled on Darwin 6.3 with the following
configure
line:
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc \ CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors \ -fno-exceptions -fno-rtti" \ ./configure --prefix=/usr/local/mysql \ --with-extra-charsets=complex --enable-thread-safe-client \ --enable-local-infile --disable-shared
See section 2.2.3 Installing MySQL on Mac OS X.
For current versions of Mac OS X Server, no operating system changes are necessary before compiling MySQL. Compiling for the Server platform is the same as for the client version of Mac OS X. (However, note that MySQL comes preinstalled on Mac OS X Server, so you need not build it yourself.)
For older versions (Mac OS X Server 1.2, a.k.a. Rhapsody), you must first install a pthread package before trying to configure MySQL.
See section 2.2.3 Installing MySQL on Mac OS X.
On Solaris, you may run into trouble even before you get the MySQL
distribution unpacked! Solaris tar
can't handle long filenames, so
you may see an error like this when you unpack MySQL:
x mysql-3.22.12-beta/bench/Results/ATIS-mysql_odbc-NT_4.0-cmp-db2, informix,ms-sql,mysql,oracle,solid,sybase, 0 bytes, 0 tape blocks tar: directory checksum error
In this case, you must use GNU tar
(gtar
) to unpack the
distribution. You can find a precompiled copy for Solaris at
http://dev.mysql.com/downloads/os-solaris.html.
Sun native threads work only on Solaris 2.5 and higher. For Version 2.4 and earlier, MySQL automatically uses MIT-pthreads. See section 2.3.5 MIT-pthreads Notes.
If you get the following error from configure
,
it means that you have something wrong with your compiler installation:
checking for restartable system calls... configure: error can not run test programs while cross compiling
In this case, you should upgrade your compiler to a newer version. You may also be able to solve this problem by inserting the following row into the `config.cache' file:
ac_cv_sys_restartable_syscalls=${ac_cv_sys_restartable_syscalls='no'}
If you are using Solaris on a SPARC, the recommended compiler is
gcc
2.95.2 or 3.2. You can find this at http://gcc.gnu.org/.
Note that egcs
1.1.1 and gcc
2.8.1 don't work reliably on
SPARC!
The recommended configure
line when using gcc
2.95.2 is:
CC=gcc CFLAGS="-O3" \ CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti" \ ./configure --prefix=/usr/local/mysql --with-low-memory \ --enable-assembler
If you have an UltraSPARC system, you can get 4% better performance by adding
-mcpu=v8 -Wa,-xarch=v8plusa
to the CFLAGS
and CXXFLAGS
environment variables.
If you have Sun's Forte 5.0 (or newer) compiler, you can
run configure
like this:
CC=cc CFLAGS="-Xa -fast -native -xstrconst -mt" \ CXX=CC CXXFLAGS="-noex -mt" \ ./configure --prefix=/usr/local/mysql --enable-assembler
To create a 64-bit binary with Sun's Forte compiler, use the following configuration options:
CC=cc CFLAGS="-Xa -fast -native -xstrconst -mt -xarch=v9" \ CXX=CC CXXFLAGS="-noex -mt -xarch=v9" ASFLAGS="-xarch=v9" \ ./configure --prefix=/usr/local/mysql --enable-assembler
To create a 64-bit Solaris binary using gcc
, add -m64
to
CFLAGS
and CXXFLAGS
and remove --enable-assembler
from
the configure
line. This works only with MySQL
4.0 and up; MySQL 3.23 does not include the required modifications to
support this.
In the MySQL benchmarks, we got a 4% speedup on an UltraSPARC when using
Forte 5.0 in 32-bit mode compared to using gcc
3.2 with the -mcpu
flag.
If you create a 64-bit mysqld
binary, it is 4% slower than the 32-bit
binary, but can handle more threads and memory.
If you get a problem with fdatasync
or sched_yield
,
you can fix this by adding LIBS=-lrt
to the configure
line
For compilers older than WorkShop 5.3, you might have to edit the
configure
script. Change this line:
#if !defined(__STDC__) || __STDC__ != 1
To this:
#if !defined(__STDC__)
If you turn on __STDC__
with the -Xc
option, the Sun compiler
can't compile with the Solaris `pthread.h' header file. This is a Sun
bug (broken compiler or broken include file).
If mysqld
issues the following error message when you run it, you have
tried to compile MySQL with the Sun compiler without enabling the -mt
multi-thread option:
libc internal error: _rmutex_unlock: rmutex not held
Add -mt
to CFLAGS
and CXXFLAGS
and recompile.
If you are using the SFW version of gcc
(which comes with Solaris 8),
you must add `/opt/sfw/lib' to the environment variable
LD_LIBRARY_PATH
before running configure
.
If you are using the gcc
available from sunfreeware.com
, you may
have many problems. To avoid this, you should recompile gcc
and GNU
binutils
on the machine where you will be running them.
If you get the following error when compiling MySQL with gcc
,
it means that your gcc
is not configured for your version of Solaris:
shell> gcc -O3 -g -O2 -DDBUG_OFF -o thr_alarm ... ./thr_alarm.c: In function `signal_hand': ./thr_alarm.c:556: too many arguments to function `sigwait'
The proper thing to do in this case is to get the newest version of
gcc
and compile it with your current gcc
compiler. At
least for Solaris 2.5, almost all binary versions of gcc
have
old, unusable include files that will break all programs that use
threads, and possibly other programs!
Solaris doesn't provide static versions of all system libraries
(libpthreads
and libdl
), so you can't compile MySQL
with --static
. If you try to do so, you will get one of the following
errors:
ld: fatal: library -ldl: not found undefined reference to `dlopen' cannot find -lrt
If you link your own MySQL client programs, you may see the following error at runtime:
ld.so.1: fatal: libmysqlclient.so.#: open failed: No such file or directory
This problem can be avoided by one of the following methods:
-Wl,r/full/path/to/libmysqlclient.so
flag rather than with -Lpath
).
libmysqclient.so
to `/usr/lib'.
LD_RUN_PATH
environment variable before running your client.
If you have problems with configure
trying to link with -lz
when
you don't have zlib
installed, you have two options:
zlib
from ftp.gnu.org
.
configure
with the --with-named-z-libs=no
option when
building MySQL.
If you are using gcc
and have problems with loading user-defined
functions (UDFs) into MySQL, try adding -lgcc
to the link line
for the UDF.
If you would like MySQL to start automatically, you can copy `support-files/mysql.server' to `/etc/init.d' and create a symbolic link to it named `/etc/rc3.d/S99mysql.server'.
If too many processes try to connect very rapidly to mysqld
, you will
see this error in the MySQL log:
Error in accept: Protocol error
You might try starting the server with the --back_log=50
option as a workaround for this. (Use -O back_log=50
before MySQL 4.)
Solaris doesn't support core files for setuid()
applications, so
you can't get a core file from mysqld
if you are using the
--user
option.
Normally, you can use a Solaris 2.6 binary on Solaris 2.7 and 2.8. Most of the Solaris 2.6 issues also apply for Solaris 2.7 and 2.8.
MySQL 3.23.4 and above should be able to detect new versions of Solaris automatically and enable workarounds for the following problems.
Solaris 2.7 / 2.8 has some bugs in the include files. You may see the
following error when you use gcc
:
/usr/include/widec.h:42: warning: `getwc' redefined /usr/include/wchar.h:326: warning: this is the location of the previous definition
If this occurs, you can fix the problem by copying
/usr/include/widec.h
to
.../lib/gcc-lib/os/gcc-version/include
and changing line 41 from this:
#if !defined(lint) && !defined(__lint)
To this:
#if !defined(lint) && !defined(__lint) && !defined(getwc)
Alternatively, you can edit `/usr/include/widec.h' directly. Either
way, after you make the fix, you should remove `config.cache' and run
configure
again.
If you get the following errors when you run make
, it's because
configure
didn't detect the `curses.h' file (probably
because of the error in `/usr/include/widec.h'):
In file included from mysql.cc:50: /usr/include/term.h:1060: syntax error before `,' /usr/include/term.h:1081: syntax error before `;'
The solution to this problem is to do one of the following:
CFLAGS=-DHAVE_CURSES_H CXXFLAGS=-DHAVE_CURSES_H ./configure
.
configure
.
#define HAVE_TERM
line from the `config.h' file and
run make
again.
If your linker can't find -lz
when linking
client programs, the problem is probably that your `libz.so' file is
installed in `/usr/local/lib'. You can fix this problem by one of the
following methods:
LD_LIBRARY_PATH
.
zlib
from your
Solaris 8 CD distribution.
configure
with the --with-named-z-libs=no
option when
building MySQL.
On Solaris 8 on x86, mysqld
will dump core if you remove the
debug symbols using strip
.
If you are using gcc
or egcs
on Solaris x86 and you
experience problems with core dumps under load, you should use the
following configure
command:
CC=gcc CFLAGS="-O3 -fomit-frame-pointer -DHAVE_CURSES_H" \ CXX=gcc \ CXXFLAGS="-O3 -fomit-frame-pointer -felide-constructors \ -fno-exceptions -fno-rtti -DHAVE_CURSES_H" \ ./configure --prefix=/usr/local/mysql
This will avoid problems with the libstdc++
library and with C++
exceptions.
If this doesn't help, you should compile a debug version and run
it with a trace file or under gdb
.
See section D.1.3 Debugging mysqld
under gdb
.
This section provides information about using MySQL on variants of BSD Unix.
FreeBSD 4.x or newer is recommended for running MySQL, because the thread
package is much more integrated.
To get a secure and stable system, you should use only FreeBSD kernels
that are marked -RELEASE
.
The easiest (and preferred) way to install MySQL is to use the
mysql-server
and mysql-client
ports available at
http://www.freebsd.org/.
Using these ports gives you the following benefits:
pkg_info -L
to see which files are installed.
pkg_delete
to remove MySQL if you no longer want it
on your machine.
It is recommended you use MIT-pthreads on FreeBSD 2.x, and native threads on
Versions 3 and up. It is possible to run with native threads on some late
2.2.x versions, but you may encounter problems shutting down mysqld
.
Unfortunately, certain function calls on FreeBSD are not yet fully thread-safe.
Most notably, this includes the gethostbyname()
function, which is
used by MySQL to convert hostnames into IP addresses. Under certain
circumstances, the mysqld
process will suddenly cause 100%
CPU load and will be unresponsive. If you encounter this problem, try to start
MySQL using the --skip-name-resolve
option.
Alternatively, you can link MySQL on FreeBSD 4.x against the LinuxThreads library, which avoids a few of the problems that the native FreeBSD thread implementation has. For a very good comparison of LinuxThreads versus native threads, see Jeremy Zawodny's article FreeBSD or Linux for your MySQL Server? at http://jeremy.zawodny.com/blog/archives/000697.html.
A known problem when using LinuxThreads on FreeBSD is that the
wait_timeout
value is not honored (probably a signal handling problem in
FreeBSD/LinuxThreads). This is supposed to be fixed in FreeBSD 5.0.
The symptom is that persistent connections can hang for a very long
time without getting closed down.
The MySQL build process requires GNU make (gmake
) to work. If
GNU make
is not available, you must install it first before compiling
MySQL.
The recommended way to compile and install MySQL on FreeBSD with
gcc
(2.95.2 and up) is:
CC=gcc CFLAGS="-O2 -fno-strength-reduce" \ CXX=gcc CXXFLAGS="-O2 -fno-rtti -fno-exceptions \ -felide-constructors -fno-strength-reduce" \ ./configure --prefix=/usr/local/mysql --enable-assembler gmake gmake install cd /usr/local/mysql bin/mysql_install_db --user=mysql bin/mysqld_safe &
If you notice that configure
will use MIT-pthreads, you should read
the MIT-pthreads notes. See section 2.3.5 MIT-pthreads Notes.
If you get an error from make install
that it can't find
`/usr/include/pthreads', configure
didn't detect that you need
MIT-pthreads. To fix this problem, remove `config.cache', then re-run
configure
with the --with-mit-threads
option.
Be sure that your name resolver setup is correct. Otherwise, you may
experience resolver delays or failures when connecting to mysqld
.
Also make sure that the localhost
entry in the `/etc/hosts' file is
correct. The file should start with a line similar to this:
127.0.0.1 localhost localhost.your.domain
FreeBSD is known to have a very low default file handle limit.
See section A.2.17 File Not Found. Start the server by using the
--open-files-limit
option for mysqld_safe
, or raise
the limits for the mysqld
user in `/etc/login.conf' and
rebuild it with cap_mkdb /etc/login.conf
. Also be sure that you set
the appropriate class for this user in the password file if you are not
using the default (use chpass mysqld-user-name
).
See section 5.1.3 The mysqld_safe
Server Startup Script.
If you have a lot of memory, you should consider rebuilding
the kernel to allow MySQL to use more than 512MB of RAM.
Take a look at option MAXDSIZ
in the LINT config
file for more information.
If you get problems with the current date in MySQL, setting the
TZ
variable will probably help. See section E Environment Variables.
To compile on NetBSD, you need GNU make
. Otherwise, the build process will
fail when make
tries to run lint
on C++ files.
On OpenBSD Version 2.5, you can compile MySQL with native threads with the following options:
CFLAGS=-pthread CXXFLAGS=-pthread ./configure --with-mit-threads=no
Our users have reported that OpenBSD 2.8 has a threading bug that causes problems with MySQL. The OpenBSD Developers have fixed the problem, but as of January 25, 2001, it's only available in the ``-current'' branch. The symptoms of this threading bug are slow response, high load, high CPU usage, and crashes.
If you get an error like Error in accept:: Bad file descriptor
or
error 9 when trying to open tables or directories, the problem is probably
that you have not allocated enough file descriptors for MySQL.
In this case, try starting mysqld_safe
as root
with the following
options:
mysqld_safe --user=mysql --open-files-limit=2048 &
If you get the following error when compiling MySQL, your
ulimit
value for virtual memory is too low:
item_func.h: In method `Item_func_ge::Item_func_ge(const Item_func_ge &)': item_func.h:28: virtual memory exhausted make[2]: *** [item_func.o] Error 1
Try using ulimit -v 80000
and run make
again. If this
doesn't work and you are using bash
, try switching to csh
or sh
; some BSDI users have reported problems with bash
and ulimit
.
If you are using gcc
, you may also use have to use the
--with-low-memory
flag for configure
to be able to compile
`sql_yacc.cc'.
If you get problems with the current date in MySQL, setting the
TZ
variable will probably help. See section E Environment Variables.
Upgrade to BSD/OS Version 3.1. If that is not possible, install BSDIpatch M300-038.
Use the following command when configuring MySQL:
env CXX=shlicc++ CC=shlicc2 \ ./configure \ --prefix=/usr/local/mysql \ --localstatedir=/var/mysql \ --without-perl \ --with-unix-socket-path=/var/mysql/mysql.sock
The following is also known to work:
env CC=gcc CXX=gcc CXXFLAGS=-O3 \ ./configure \ --prefix=/usr/local/mysql \ --with-unix-socket-path=/var/mysql/mysql.sock
You can change the directory locations if you wish, or just use the defaults by not specifying any locations.
If you have problems with performance under heavy load, try using the
--skip-thread-priority
option to mysqld
! This will run
all threads with the same priority. On BSDI Version 3.1, this gives better
performance, at least until BSDI fixes its thread scheduler.
If you get the error virtual memory exhausted
while compiling,
you should try using ulimit -v 80000
and running make
again.
If this doesn't work and you are using bash
, try switching to
csh
or sh
; some BSDI users have reported problems with
bash
and ulimit
.
BSDI Version 4.x has some thread-related bugs. If you want to use MySQL on this, you should install all thread-related patches. At least M400-023 should be installed.
On some BSDI Version 4.x systems, you may get problems with shared libraries.
The symptom is that you can't execute any client programs, for example,
mysqladmin
. In this case, you need to reconfigure not to use
shared libraries with the --disable-shared
option to configure.
Some customers have had problems on BSDI 4.0.1 that the mysqld
binary after a while can't open tables. This is because some
library/system-related bug causes mysqld
to change current
directory without having asked for that to happen.
The fix is to either upgrade MySQL to at least version 3.23.34 or, after
running configure
, remove the line #define HAVE_REALPATH
from
config.h
before running make
.
Note that this means that you can't symbolically link a database directories to another database directory or symbolic link a table to another database on BSDI. (Making a symbolic link to another disk is okay).
There are a couple of small problems when compiling MySQL on
HP-UX. We recommend that you use gcc
instead of the HP-UX native
compiler, because gcc
produces better code.
We recommend using gcc
2.95 on HP-UX. Don't use high optimization
flags (such as -O6
) because they may not be safe on HP-UX.
The following configure
line should work with gcc
2.95:
CFLAGS="-I/opt/dce/include -fpic" \ CXXFLAGS="-I/opt/dce/include -felide-constructors -fno-exceptions \ -fno-rtti" \ CXX=gcc \ ./configure --with-pthread \ --with-named-thread-libs='-ldce' \ --prefix=/usr/local/mysql --disable-shared
The following configure
line should work with gcc
3.1:
CFLAGS="-DHPUX -I/opt/dce/include -O3 -fPIC" CXX=gcc \ CXXFLAGS="-DHPUX -I/opt/dce/include -felide-constructors \ -fno-exceptions -fno-rtti -O3 -fPIC" \ ./configure --prefix=/usr/local/mysql \ --with-extra-charsets=complex --enable-thread-safe-client \ --enable-local-infile --with-pthread \ --with-named-thread-libs=-ldce --with-lib-ccflags=-fPIC --disable-shared
For HP-UX Version 11.x, we recommend MySQL 3.23.15 or later.
Because of some critical bugs in the standard HP-UX libraries, you should install the following patches before trying to run MySQL on HP-UX 11.0:
PHKL_22840 Streams cumulative PHNE_22397 ARPA cumulative
This will solve the problem of getting EWOULDBLOCK
from recv()
and EBADF
from accept()
in threaded applications.
If you are using gcc
2.95.1 on an unpatched HP-UX 11.x system,
you will get the error:
In file included from /usr/include/unistd.h:11, from ../include/global.h:125, from mysql_priv.h:15, from item.cc:19: /usr/include/sys/unistd.h:184: declaration of C function ... /usr/include/sys/pthread.h:440: previous declaration ... In file included from item.h:306, from mysql_priv.h:158, from item.cc:19:
The problem is that HP-UX doesn't define pthreads_atfork()
consistently.
It has conflicting prototypes in
`/usr/include/sys/unistd.h':184 and
`/usr/include/sys/pthread.h':440.
One solution is to copy `/usr/include/sys/unistd.h' into `mysql/include' and edit `unistd.h' and change it to match the definition in `pthread.h'. Look for this line:
extern int pthread_atfork(void (*prepare)(), void (*parent)(), void (*child)());
Change it to look like this:
extern int pthread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(void));
After making the change, the following configure
line should work:
CFLAGS="-fomit-frame-pointer -O3 -fpic" CXX=gcc \ CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti -O3" \ ./configure --prefix=/usr/local/mysql --disable-shared
If you are using MySQL 4.0.5 with the HP-UX compiler, you can use the following
command (which has been tested with cc
B.11.11.04):
CC=cc CXX=aCC CFLAGS=+DD64 CXXFLAGS=+DD64 ./configure \ --with-extra-character-set=complex
You can ignore any errors of the following type:
aCC: warning 901: unknown option: `-3': use +help for online documentation
If you get the following error from configure
,
verify that you don't have the path to the K&R compiler before the path
to the HP-UX C and C++ compiler:
checking for cc option to accept ANSI C... no configure: error: MySQL requires an ANSI C compiler (and a C++ compiler). Try gcc. See the Installation chapter in the Reference Manual.
Another reason for not being able to compile is that you didn't define
the +DD64
flags as just described.
Another possibility for HP-UX 11 is to use MySQL binaries for HP-UX 10.20. We have received reports from some users that these binaries work fine on HP-UX 11.00. If you encounter problems, be sure to check your HP-UX patch level.
Automatic detection of xlC
is missing from Autoconf, so a number of
variables need to be set before running configure
. The following
example uses the IBM compiler:
export CC="xlc_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192 " export CXX="xlC_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192" export CFLAGS="-I /usr/local/include" export LDFLAGS="-L /usr/local/lib" export CPPFLAGS=$CFLAGS export CXXFLAGS=$CFLAGS ./configure --prefix=/usr/local \ --localstatedir=/var/mysql \ --sysconfdir=/etc/mysql \ --sbindir='/usr/local/bin' \ --libexecdir='/usr/local/bin' \ --enable-thread-safe-client \ --enable-large-files
The preceding options are used to compile the MySQL distribution that can be found at http://www-frec.bull.com/.
If you change the -O3
to -O2
in the preceding configure
line, you must also remove the -qstrict
option. This is a limitation in
the IBM C compiler.
If you are using gcc
or egcs
to compile MySQL, you
must use the -fno-exceptions
flag, because the exception
handling in gcc
/egcs
is not thread-safe! (This is tested with
egcs
1.1.) There are also some known problems with IBM's assembler
that may cause it to generate bad code when used with gcc
.
We recommend the following configure
line with egcs
and
gcc 2.95
on AIX:
CC="gcc -pipe -mcpu=power -Wa,-many" \ CXX="gcc -pipe -mcpu=power -Wa,-many" \ CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti" \ ./configure --prefix=/usr/local/mysql --with-low-memory
The -Wa,-many
option is necessary for the compile to be successful.
IBM is aware of this problem but is in no hurry to fix it because of the
workaround that is available. We don't know if the -fno-exceptions
is required with gcc 2.95
, but because MySQL doesn't use exceptions
and the option generates faster code, we recommend that you should always
use it with egcs / gcc
.
If you get a problem with assembler code, try changing the -mcpu=xxx
option to match your CPU. Typically power2
, power
, or
powerpc
may need to be used. Alternatively, you might need to use
604
or 604e
. We are not positive but suspect that
power
would likely be safe most of the time, even on
a power2 machine.
If you don't know what your CPU is, execute a uname -m
command. It
will produce a string that looks like 000514676700
, with a format of
xxyyyyyymmss
where xx
and ss
are always 00
,
yyyyyy
is a unique system ID and mm
is the ID of the CPU Planar.
A chart of these values can be found at
http://publib.boulder.ibm.com/doc_link/en_US/a_doc_lib/cmds/aixcmds5/uname.htm.
This will give you a machine type and a machine model you can use to
determine what type of CPU you have.
If you have problems with signals (MySQL dies unexpectedly under high load), you may have found an OS bug with threads and signals. In this case, you can tell MySQL not to use signals by configuring as follows:
CFLAGS=-DDONT_USE_THR_ALARM CXX=gcc \ CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti \ -DDONT_USE_THR_ALARM" \ ./configure --prefix=/usr/local/mysql --with-debug \ --with-low-memory
This doesn't affect the performance of MySQL, but has the side
effect that you can't kill clients that are ``sleeping'' on a connection with
mysqladmin kill
or mysqladmin shutdown
. Instead, the client
will die when it issues its next command.
On some versions of AIX, linking with libbind.a
makes
getservbyname()
dump core. This is an AIX bug and should be reported
to IBM.
For AIX 4.2.1 and gcc
, you have to make the following changes.
After configuring, edit `config.h' and `include/my_config.h' and change the line that says this:
#define HAVE_SNPRINTF 1
to this:
#undef HAVE_SNPRINTF
And finally, in `mysqld.cc', you need to add a prototype for
initgroups()
.
#ifdef _AIX41 extern "C" int initgroups(const char *,int); #endif
If you need to allocate a lot of memory to the mysqld
process, it's not
enough to just use ulimit -d unlimited
. You may also have to modify
mysqld_safe
to add a line something like this:
export LDR_CNTRL='MAXDATA=0x80000000'
You can find more information about using a lot of memory at http://publib16.boulder.ibm.com/pseries/en_US/aixprggd/genprogc/lrg_prg_support.htm.
On SunOS 4, MIT-pthreads is needed to compile MySQL. This in turn
means you will need GNU make
.
Some SunOS 4 systems have problems with dynamic libraries and libtool
.
You can use the following configure
line to avoid this problem:
./configure --disable-shared --with-mysqld-ldflags=-all-static
When compiling readline
, you may get warnings about duplicate defines.
These can be ignored.
When compiling mysqld
, there will be some implicit declaration
of function
warnings. These can be ignored.
If you are using egcs
1.1.2 on Digital Unix, you should upgrade to
gcc
2.95.2, because egcs
on DEC has some serious bugs!
When compiling threaded programs under Digital Unix, the documentation
recommends using the -pthread
option for cc
and cxx
and
the -lmach -lexc
libraries (in addition to -lpthread
). You
should run configure
something like this:
CC="cc -pthread" CXX="cxx -pthread -O" \ ./configure --with-named-thread-libs="-lpthread -lmach -lexc -lc"
When compiling mysqld
, you may see a couple of warnings like this:
mysqld.cc: In function void handle_connections()': mysqld.cc:626: passing long unsigned int *' as argument 3 of accept(int,sockadddr *, int *)'
You can safely ignore these warnings. They occur because configure
can detect only errors, not warnings.
If you start the server directly from the command line, you may have problems
with it dying when you log out. (When you log out, your outstanding processes
receive a SIGHUP
signal.) If so, try starting the server like this:
nohup mysqld [options] &
nohup
causes the command following it to ignore any SIGHUP
signal sent from the terminal. Alternatively, start the server by running
mysqld_safe
, which invokes mysqld
using nohup
for you.
See section 5.1.3 The mysqld_safe
Server Startup Script.
If you get a problem when compiling `mysys/get_opt.c', just remove the
#define _NO_PROTO
line from the start of that file.
If you are using Compaq's CC compiler, the following configure
line
should work:
CC="cc -pthread" CFLAGS="-O4 -ansi_alias -ansi_args -fast -inline speed all -arch host" CXX="cxx -pthread" CXXFLAGS="-O4 -ansi_alias -ansi_args -fast -inline speed all \ -arch host -noexceptions -nortti" export CC CFLAGS CXX CXXFLAGS ./configure \ --prefix=/usr/local/mysql \ --with-low-memory \ --enable-large-files \ --enable-shared=yes \ --with-named-thread-libs="-lpthread -lmach -lexc -lc" gnumake
If you get a problem with libtool
when compiling with shared libraries
as just shown, when linking mysql
, you should be able to get around
this by issuing these commands:
cd mysql /bin/sh ../libtool --mode=link cxx -pthread -O3 -DDBUG_OFF \ -O4 -ansi_alias -ansi_args -fast -inline speed \ -speculate all \ -arch host -DUNDEF_HAVE_GETHOSTBYNAME_R \ -o mysql mysql.o readline.o sql_string.o completion_hash.o \ ../readline/libreadline.a -lcurses \ ../libmysql/.libs/libmysqlclient.so -lm cd .. gnumake gnumake install scripts/mysql_install_db
If you have problems compiling and have DEC CC
and gcc
installed, try running configure
like this:
CC=cc CFLAGS=-O CXX=gcc CXXFLAGS=-O3 \ ./configure --prefix=/usr/local/mysql
If you get problems with the `c_asm.h' file, you can create and use a 'dummy' `c_asm.h' file with:
touch include/c_asm.h CC=gcc CFLAGS=-I./include \ CXX=gcc CXXFLAGS=-O3 \ ./configure --prefix=/usr/local/mysql
Note that the following problems with the ld
program can be fixed
by downloading the latest DEC (Compaq) patch kit from:
http://ftp.support.compaq.com/public/unix/.
On OSF/1 V4.0D and compiler "DEC C V5.6-071 on Digital Unix V4.0 (Rev. 878),"
the compiler had some strange behavior (undefined asm
symbols).
/bin/ld
also appears to be broken (problems with _exit
undefined
errors occurring while linking mysqld
). On this system, we
have managed to compile MySQL with the following configure
line, after replacing /bin/ld
with the version from OSF 4.0C:
CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql
With the Digital compiler "C++ V6.1-029," the following should work:
CC=cc -pthread CFLAGS=-O4 -ansi_alias -ansi_args -fast -inline speed \ -speculate all -arch host CXX=cxx -pthread CXXFLAGS=-O4 -ansi_alias -ansi_args -fast -inline speed \ -speculate all -arch host -noexceptions -nortti export CC CFLAGS CXX CXXFLAGS ./configure --prefix=/usr/mysql/mysql \ --with-mysqld-ldflags=-all-static --disable-shared \ --with-named-thread-libs="-lmach -lexc -lc"
In some versions of OSF/1, the alloca()
function is broken. Fix
this by removing the line in `config.h' that defines 'HAVE_ALLOCA'
.
The alloca()
function also may have an incorrect prototype in
/usr/include/alloca.h
. This warning resulting from this can be ignored.
configure
will use the following thread libraries automatically:
--with-named-thread-libs="-lpthread -lmach -lexc -lc"
.
When using gcc
, you can also try running configure
like this:
CFLAGS=-D_PTHREAD_USE_D4 CXX=gcc CXXFLAGS=-O3 ./configure ...
If you have problems with signals (MySQL dies unexpectedly under high load), you may have found an OS bug with threads and signals. In this case, you can tell MySQL not to use signals by configuring with:
CFLAGS=-DDONT_USE_THR_ALARM \ CXXFLAGS=-DDONT_USE_THR_ALARM \ ./configure ...
This doesn't affect the performance of MySQL, but has the side
effect that you can't kill clients that are ``sleeping'' on a connection with
mysqladmin kill
or mysqladmin shutdown
. Instead, the client
will die when it issues its next command.
With gcc
2.95.2, you will probably run into the following compile error:
sql_acl.cc:1456: Internal compiler error in `scan_region', at except.c:2566 Please submit a full bug report.
To fix this, you should change to the sql
directory and do a
cut-and-paste of the last gcc
line, but change -O3
to
-O0
(or add -O0
immediately after gcc
if you don't
have any -O
option on your compile line). After this is done, you
can just change back to the top-level directory and run make
again.
If you are using Irix Version 6.5.3 or newer, mysqld
will be able to
create threads only if you run it as a user that has CAP_SCHED_MGT
privileges (such as root
) or give the mysqld
server this privilege
with the following shell command:
chcap "CAP_SCHED_MGT+epi" /opt/mysql/libexec/mysqld
You may have to undefine some symbols in `config.h' after running
configure
and before compiling.
In some Irix implementations, the alloca()
function is broken. If the
mysqld
server dies on some SELECT
statements, remove the lines
from `config.h' that define HAVE_ALLOC
and HAVE_ALLOCA_H
.
If mysqladmin create
doesn't work, remove the line from `config.h'
that defines HAVE_READDIR_R
. You may have to remove the
HAVE_TERM_H
line as well.
SGI recommends that you install all the patches on this page as a set: http://support.sgi.com/surfzone/patches/patchset/6.2_indigo.rps.html
At the very minimum, you should install the latest kernel rollup, the
latest rld
rollup, and the latest libc
rollup.
You definitely need all the POSIX patches on this page, for pthreads support:
http://support.sgi.com/surfzone/patches/patchset/6.2_posix.rps.html
If you get the something like the following error when compiling `mysql.cc':
"/usr/include/curses.h", line 82: error(1084): invalid combination of type
Type the following in the top-level directory of your MySQL source tree:
extra/replace bool curses_bool < /usr/include/curses.h > include/curses.h make
There have also been reports of scheduling problems. If only one thread is running, performance is slow. Avoid this by starting another client. This may lead to a two-to-tenfold increase in execution speed thereafter for the other thread. This is a poorly understood problem with Irix threads; you may have to improvise to find solutions until this can be fixed.
If you are compiling with gcc
, you can use the following
configure
command:
CC=gcc CXX=gcc CXXFLAGS=-O3 \ ./configure --prefix=/usr/local/mysql --enable-thread-safe-client \ --with-named-thread-libs=-lpthread
On Irix 6.5.11 with native Irix C and C++ compilers ver. 7.3.1.2, the following is reported to work
CC=cc CXX=CC CFLAGS='-O3 -n32 -TARG:platform=IP22 -I/usr/local/include \ -L/usr/local/lib' CXXFLAGS='-O3 -n32 -TARG:platform=IP22 \ -I/usr/local/include -L/usr/local/lib' \ ./configure --prefix=/usr/local/mysql --with-innodb --with-berkeley-db \ --with-libwrap=/usr/local \ --with-named-curses-libs=/usr/local/lib/libncurses.a
The current port is tested only on ``sco3.2v5.0.5,'' ``sco3.2v5.0.6,'' and ``sco3.2v5.0.7'' systems. There has also been a lot of progress on a port to ``sco 3.2v4.2.''
For the moment, the recommended compiler on OpenServer is gcc
2.95.2.
With this, you should be able to compile MySQL with just:
CC=gcc CXX=gcc ./configure ... (options)
./configure
in the `threads/src' directory and select
the SCO OpenServer option. This command copies `Makefile.SCO5' to
`Makefile'.
make
.
root
,
then cd
to the `thread/src' directory and run make
install
.
make
when making MySQL.
mysqld_safe
as root
, you probably will get only the
default 110 open files per process. mysqld
will write a note about this
in the log file.
gcc
2.95.2 or newer!
The following configure
command should work:
./configure --prefix=/usr/local/mysql --disable-shared
configure
command should work:
CFLAGS="-D_XOPEN_XPG4" CXX=gcc CXXFLAGS="-D_XOPEN_XPG4" \ ./configure \ --prefix=/usr/local/mysql \ --with-named-thread-libs="-lgthreads -lsocket -lgen -lgthreads" \ --with-named-curses-libs="-lcurses"You may get some problems with some include files. In this case, you can find new SCO-specific include files at http://www.mysql.com/Downloads/SCO/SCO-3.2v4.2-includes.tar.gz. You should unpack this file in the `include' directory of your MySQL source tree.
SCO development notes:
mysqld
with -lgthreads -lsocket -lgthreads
.
malloc
. If you encounter problems with memory usage,
make sure that `gmalloc.o' is included in `libgthreads.a' and
`libgthreads.so'.
read()
,
write()
, getmsg()
, connect()
, accept()
,
select()
, and wait()
.
mysqld
unstable. You have to remove this one if you want to run
mysqld
on an OpenServer 5.0.6 machine.
libsocket.so.2
at
ftp://ftp.sco.com/pub/security/OpenServer and
ftp://ftp.sco.com/pub/security/sse for OpenServer 5.0.x
telnetd
fix at
ftp://stage.caldera.com/pub/security/openserver/ or
ftp://stage.caldera.com/pub/security/openserver/CSSA-2001-SCO.10/
as both libsocket.so.2
and libresolv.so.1
with instructions for
installing on pre-OSR506 systems.
It's probably a good idea to install these patches before trying to
compile/use MySQL.
On UnixWare 7.1.0, you must use a version of MySQL at least as recent as 3.22.13 to get fixes for some portability and OS problems.
We have been able to compile MySQL with the following configure
command on UnixWare Version 7.1.x:
CC=cc CXX=CC ./configure --prefix=/usr/local/mysql
If you want to use gcc
, you must use gcc
2.95.2 or newer.
CC=gcc CXX=g++ ./configure --prefix=/usr/local/mysql
SCO provides operating system patches at ftp://ftp.sco.com/pub/unixware7 for UnixWare 7.1.1 and 7.1.3 and at ftp://ftp.sco.com/pub/openunix8 for OpenUNIX 8.0.0. SCO provides information about security fixes at ftp://ftp.sco.com/pub/security/OpenUNIX for OpenUNIX and at ftp://ftp.sco.com/pub/security/UnixWare for UnixWare.
MySQL uses quite a few open files. Because of this, you should add something like the following to your `CONFIG.SYS' file:
SET EMXOPT=-c -n -h1024
If you don't do this, you will probably run into the following error:
File 'xxxx' not found (Errcode: 24)
When using MySQL with OS/2 Warp 3, FixPack 29 or above is required. With OS/2 Warp 4, FixPack 4 or above is required. This is a requirement of the Pthreads library. MySQL must be installed on a partition with a type that supports long filenames, such as HPFS, FAT32, and so on.
The `INSTALL.CMD' script must be run from OS/2's own `CMD.EXE' and may not work with replacement shells such as `4OS2.EXE'.
The `scripts/mysql-install-db' script has been renamed. It is now called `install.cmd' and is a REXX script, which will set up the default MySQL security settings and create the WorkPlace Shell icons for MySQL.
Dynamic module support is compiled in but not fully tested. Dynamic modules should be compiled using the Pthreads runtime library.
gcc -Zdll -Zmt -Zcrtdll=pthrdrtl -I../include -I../regex -I.. \ -o example udf_example.cc -L../lib -lmysqlclient udf_example.def mv example.dll example.udf
Note: Due to limitations in OS/2, UDF module name stems must not
exceed eight characters. Modules are stored in the `/mysql2/udf'
directory; the safe-mysqld.cmd
script will put this directory in
the BEGINLIBPATH
environment variable. When using UDF modules,
specified extensions are ignored--it is assumed to be `.udf'.
For example, in Unix, the shared module might be named `example.so'
and you would load a function from it like this:
mysql> CREATE FUNCTION metaphon RETURNS STRING SONAME 'example.so';
In OS/2, the module would be named `example.udf', but you would not specify the module extension:
mysql> CREATE FUNCTION metaphon RETURNS STRING SONAME 'example';
We have in the past talked with some BeOS developers who have said that MySQL is 80% ported to BeOS, but we haven't heard from them in a while.
Perl support for MySQL is provided by means of the DBI
/DBD
client interface. The interface requires Perl Version 5.6.0 or later.
It will not work if you have an older version of Perl.
If you want to use transactions with Perl DBI, you need to have
DBD::mysql
version 1.2216 or newer. Version 2.9003 or newer
is recommended.
If you are using the MySQL 4.1 client library, you must use
DBD::mysql
2.9003 or newer.
As of MySQL 3.22.8, Perl support is no longer included with MySQL
distributions. You can obtain the necessary modules from
http://search.cpan.org for Unix, or by using the ActiveState
ppm
program on Windows. The following sections describe how to do
this.
Perl support for MySQL must be installed if you want to run the MySQL benchmark scripts. See section 7.1.4 The MySQL Benchmark Suite.
MySQL Perl support requires that you've installed MySQL client programming support (libraries and header files). Most installation methods install the necessary files. However, if you installed MySQL from RPM files on Linux, be sure that you've installed the developer RPM. The client programs are in the client RPM, but client programming support is in the developer RPM.
If you want to install Perl support, the files you will need can be obtained from the CPAN (Comprehensive Perl Archive Network) at http://search.cpan.org.
The easiest way to install Perl modules on Unix is to use the CPAN
module. For example:
shell> perl -MCPAN -e shell cpan> install DBI cpan> install DBD::mysql
The DBD::mysql
installation runs a number of tests.
These tests require being able to connect to the local MySQL server
as the anonymous user with no password. If you have removed anonymous
accounts or assigned them passwords, the tests fail. You can use force
install DBD::mysql
to ignore the failed tests.
DBI
requires the Data::Dumper
module. It may already be
installed; if not, you should install it before installing DBI
.
It is also possible to download the module distributions in the form of
compressed tar
archives and build the modules manually. For example,
to unpack and build a DBI distribution, use a procedure such as this:
shell> gunzip < DBI-VERSION.tar.gz | tar xvf -This command creates a directory named `DBI-VERSION'.
shell> cd DBI-VERSION
shell> perl Makefile.PL shell> make shell> make test shell> make install
The make test
command is important because it verifies that the
module is working. Note that when you run that command during the
DBD::mysql
installation to exercise the interface code, the
MySQL server must be running or the test will fail.
It is a good idea to rebuild and reinstall the DBD::mysql
distribution whenever you install a new release of MySQL,
particularly if you notice symptoms such as that all your DBI
scripts
fail after you upgrade MySQL.
If you don't have access rights to install Perl modules in the system directory or if you want to install local Perl modules, the following reference may be useful: http://servers.digitaldaze.com/extensions/perl/modules.html#modules
Look under the heading ``Installing New Modules that Require Locally Installed Modules.''
On Windows, you should do the following to install the MySQL
DBD
module with ActiveState Perl:
HTTP_proxy
variable. For example, you might try:
set HTTP_proxy=my.proxy.com:3128
C:\> C:\perl\bin\ppm.pl
DBI
:
ppm> install DBI
install \ ftp://ftp.de.uu.net/pub/CPAN/authors/id/JWIED/DBD-mysql-1.2212.x86.ppd
This procedure should work at least with ActiveState Perl Version 5.6.
If you can't get the procedure to work, you should instead install the
MyODBC
driver and connect to the MySQL server through
ODBC:
use DBI; $dbh= DBI->connect("DBI:ODBC:$dsn",$user,$password) || die "Got error $DBI::errstr when connecting to $dsn\n";
DBI
/DBD
InterfaceIf Perl reports that it can't find the `../mysql/mysql.so' module, then the problem is probably that Perl can't locate the shared library `libmysqlclient.so'.
You should be able to fix this by one of the following methods:
DBD::mysql
distribution with perl
Makefile.PL -static -config
rather than perl Makefile.PL
.
-L
options used to compile DBD::mysql
to reflect
the actual location of `libmysqlclient.so'.
LD_RUN_PATH
environment variable. Some systems use
LD_LIBRARY_PATH
instead.
Note that you may also need to modify the -L
options if there are
other libraries that the linker fails to find. For example, if the linker
cannot find libc
because it is in `/lib' and the link command
specifies -L/usr/lib
, change the -L
option to -L/lib
or add -L/lib
to the existing link command.
If you get the following errors from DBD::mysql
,
you are probably using gcc
(or using an old binary compiled with
gcc
):
/usr/bin/perl: can't resolve symbol '__moddi3' /usr/bin/perl: can't resolve symbol '__divdi3'
Add -L/usr/lib/gcc-lib/... -lgcc
to the link command when the
`mysql.so' library gets built (check the output from make
for
`mysql.so' when you compile the Perl client). The -L
option
should specify the pathname of the directory where `libgcc.a' is located
on your system.
Another cause of this problem may be that Perl and MySQL aren't both
compiled with gcc
. In this case, you can solve the mismatch by
compiling both with gcc
.
You may see the following error from DBD::mysql
when you run the tests:
t/00base............install_driver(mysql) failed: Can't load '../blib/arch/auto/DBD/mysql/mysql.so' for module DBD::mysql: ../blib/arch/auto/DBD/mysql/mysql.so: undefined symbol: uncompress at /usr/lib/perl5/5.00503/i586-linux/DynaLoader.pm line 169.
This means that you need to include the -lz
compression library on the
link line. That can be done by changing the following line in the file
`lib/DBD/mysql/Install.pm':
$sysliblist .= " -lm";
Change that line to:
$sysliblist .= " -lm -lz";
After this, you must run make realclean
and then
proceed with the installation from the beginning.
If you want to install DBI on SCO, you have to edit the
`Makefile' in DBI-xxx and each subdirectory.
Note that the following assumes gcc
2.95.2 or newer:
OLD: NEW: CC = cc CC = gcc CCCDLFLAGS = -KPIC -W1,-Bexport CCCDLFLAGS = -fpic CCDLFLAGS = -wl,-Bexport CCDLFLAGS = LD = ld LD = gcc -G -fpic LDDLFLAGS = -G -L/usr/local/lib LDDLFLAGS = -L/usr/local/lib LDFLAGS = -belf -L/usr/local/lib LDFLAGS = -L/usr/local/lib LD = ld LD = gcc -G -fpic OPTIMISE = -Od OPTIMISE = -O1 OLD: CCCFLAGS = -belf -dy -w0 -U M_XENIX -DPERL_SCO5 -I/usr/local/include NEW: CCFLAGS = -U M_XENIX -DPERL_SCO5 -I/usr/local/include
These changes are necessary
because the Perl dynaloader will not load the DBI
modules
if they were compiled with icc
or cc
.
If you want to use the Perl module on a system that doesn't support
dynamic linking (such as SCO), you can generate a static version of
Perl that includes DBI
and DBD::mysql
. The way this works
is that you generate a version of Perl with the DBI
code linked
in and install it on top of your current Perl. Then you use that to
build a version of Perl that additionally has the DBD
code linked
in, and install that.
On SCO, you must have the following environment variables set:
LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:/usr/progressive/lib
Or:
LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:\ /usr/progressive/lib:/usr/skunk/lib LIBPATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:\ /usr/progressive/lib:/usr/skunk/lib MANPATH=scohelp:/usr/man:/usr/local1/man:/usr/local/man:\ /usr/skunk/man:
First, create a Perl that includes a statically linked DBI
module by
running these commands in the directory where your DBI
distribution is
located:
shell> perl Makefile.PL -static -config shell> make shell> make install shell> make perl
Then you must install the new Perl. The output of make perl
will
indicate the exact make
command you will need to execute to perform
the installation. On SCO, this is
make -f Makefile.aperl inst_perl MAP_TARGET=perl
.
Next, use the just-created Perl to create another Perl that also includes a
statically linked DBD::mysql
by running these commands in the
directory where your DBD::mysql
distribution is located:
shell> perl Makefile.PL -static -config shell> make shell> make install shell> make perl
Finally, you should install this new Perl. Again, the output of make
perl
indicates the command to use.
Go to the first, previous, next, last section, table of contents.