diff options
Diffstat (limited to 'INSTALL-SOURCE')
-rw-r--r-- | INSTALL-SOURCE | 9580 |
1 files changed, 9575 insertions, 5 deletions
diff --git a/INSTALL-SOURCE b/INSTALL-SOURCE index 3a5dd22fa38..f30781efec1 100644 --- a/INSTALL-SOURCE +++ b/INSTALL-SOURCE @@ -1,8 +1,9578 @@ -You can find information about how to install from a source distributions at +Chapter 2. Installing and Upgrading MySQL - http://dev.mysql.com/doc/refman/5.1/en/installing-source.html + This chapter describes how to obtain and install MySQL. A summary + of the procedure follows and later sections provide the details. + If you plan to upgrade an existing version of MySQL to a newer + version rather than install MySQL for the first time, see Section + 2.12.1, "Upgrading MySQL," for information about upgrade + procedures and about issues that you should consider before + upgrading. -The MySQL Reference Manual is also available in various formats on -http://dev.mysql.com/doc; if you're interested in the DocBook XML -sources go to http://svn.mysql.com. + If you are interested in migrating to MySQL from another database + system, you may wish to read Section A.8, "MySQL 5.1 FAQ --- + Migration," which contains answers to some common questions + concerning migration issues. + + 1. Determine whether MySQL runs and is supported on your + platform. Please note that not all platforms are equally + suitable for running MySQL, and that not all platforms on + which MySQL is known to run are officially supported by Sun + Microsystems, Inc.: + + + For MySQL Enterprise Server, the officially supported + platforms are listed at + http://www.mysql.com/support/supportedplatforms.html. + + + MySQL Community Server runs on the platforms listed at + Section 2.1.1, "Operating Systems Supported by MySQL + Community Server." + + 2. Choose which distribution to install. Several versions of + MySQL are available, and most are available in several + distribution formats. You can choose from pre-packaged + distributions containing binary (precompiled) programs or + source code. When in doubt, use a binary distribution. We also + provide public access to our current source tree for those who + want to see our most recent developments and help us test new + code. To determine which version and type of distribution you + should use, see Section 2.1.2, "Choosing Which MySQL + Distribution to Install." + + 3. Download the distribution that you want to install. For + instructions, see Section 2.1.3, "How to Get MySQL." To verify + the integrity of the distribution, use the instructions in + Section 2.1.4, "Verifying Package Integrity Using MD5 + Checksums or GnuPG." + + 4. Install the distribution. To install MySQL from a binary + distribution, use the instructions in Section 2.2, "Standard + MySQL Installation Using a Binary Distribution." To install + MySQL from a source distribution or from the current + development source tree, use the instructions in Section 2.10, + "MySQL Installation Using a Source Distribution." + If you encounter installation difficulties, see Section 2.13, + "Operating System-Specific Notes," for information on solving + problems for particular platforms. + + 5. Perform any necessary post-installation setup. After + installing MySQL, read Section 2.11, "Post-Installation Setup + and Testing." This section contains important information + about making sure the MySQL server is working properly. It + also describes how to secure the initial MySQL user accounts, + which have no passwords until you assign passwords. The + section applies whether you install MySQL using a binary or + source distribution. + + 6. If you want to run the MySQL benchmark scripts, Perl support + for MySQL must be available. See Section 2.15, "Perl + Installation Notes." + +2.1. General Installation Issues + + The MySQL installation procedure depends on whether you will + install MySQL Enterprise Server or MySQL Community Server. The set + of applicable platforms depends on which distribution you will + install: + + * For MySQL Enterprise Server, the officially supported + platforms are listed at + http://www.mysql.com/support/supportedplatforms.html. + + * MySQL Community Server runs on the platforms listed at Section + 2.1.1, "Operating Systems Supported by MySQL Community + Server." + + For MySQL Enterprise Server, install the main distribution plus + any service packs or hotfixes that you wish to apply using the + Enterprise Installer. For platforms that do not yet have an + Enterprise Installer, use the Community Server instructions. + + For MySQL Community Server, install the main distribution plus any + hotfixes and updates: + + * Download a binary release, or download a source release and + build MySQL yourself from the source code. + + * Retrieve MySQL from the Bazaar tree and build it from source. + The Bazaar tree contains the latest developer code. + + The immediately following sections contain the information + necessary to choose, download, and verify your distribution. The + instructions in later sections of the chapter describe how to + install the distribution that you choose. For binary + distributions, see the instructions at Section 2.2, "Standard + MySQL Installation Using a Binary Distribution." To build MySQL + from source, use the instructions at Section 2.10, "MySQL + Installation Using a Source Distribution." + +2.1.1. Operating Systems Supported by MySQL Community Server + + This section lists the operating systems on which MySQL Community + Server is known to run. + +Important + + Sun Microsystems, Inc. does not necessarily provide official + support for all the platforms listed in this section. For + information about those platforms that are officially supported, + see MySQL Server Supported Platforms + (http://www.mysql.com/support/supportedplatforms.html) on the + MySQL Web site. + + 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.) + + MySQL has been reported to compile successfully on the following + combinations of operating system and thread package. + + * AIX 4.x, 5.x with native threads. See Section 2.13.5.3, + "IBM-AIX notes." + + * Amiga. + + * FreeBSD 5.x and up with native threads. + + * HP-UX 11.x with the native threads. See Section 2.13.5.2, + "HP-UX Version 11.x Notes." + + * Linux, builds on all fairly recent Linux distributions with + glibc 2.3. See Section 2.13.1, "Linux Notes." + + * Mac OS X. See Section 2.13.2, "Mac OS X Notes." + + * NetBSD 1.3/1.4 Intel and NetBSD 1.3 Alpha. See Section + 2.13.4.2, "NetBSD Notes." + + * Novell NetWare 6.0 and 6.5. See Section 2.8, "Installing MySQL + on NetWare." + + * OpenBSD 2.5 and with native threads. OpenBSD earlier than 2.5 + with the MIT-pthreads package. See Section 2.13.4.3, "OpenBSD + 2.5 Notes." + + * SCO OpenServer 5.0.X with a recent port of the FSU Pthreads + package. See Section 2.13.5.8, "SCO UNIX and OpenServer 5.0.x + Notes." + + * SCO Openserver 6.0.x. See Section 2.13.5.9, "SCO OpenServer + 6.0.x Notes." + + * SCO UnixWare 7.1.x. See Section 2.13.5.10, "SCO UnixWare 7.1.x + and OpenUNIX 8.0.0 Notes." + + * SGI Irix 6.x with native threads. See Section 2.13.5.7, "SGI + Irix Notes." + + * Solaris 2.5 and above with native threads on SPARC and x86. + See Section 2.13.3, "Solaris Notes." + + * Tru64 Unix. See Section 2.13.5.5, "Alpha-DEC-UNIX Notes + (Tru64)." + + * Windows 2000, Windows XP, Windows Vista, Windows Server 2003, + and Windows Server 2008. See Section 2.3, "Installing MySQL on + Windows." + + MySQL has also been known to run on other systems in the past. See + Section 2.13, "Operating System-Specific Notes." Some porting + effort might be required for current versions of MySQL on these + systems. + + 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: + + * General stability of the thread library. A platform may have + an excellent reputation otherwise, but MySQL is only as stable + as the thread library it calls, even if everything else is + perfect. + + * The capability of the kernel and the thread library to take + advantage of symmetric multi-processor (SMP) systems. In other + words, when a process creates a thread, it should be possible + for that thread to run on a CPU different from the original + process. + + * The capability of the kernel and the thread library to run + many threads that acquire and release a mutex over a short + critical region frequently without excessive context switches. + If the implementation of pthread_mutex_lock() is too anxious + to yield CPU time, this hurts MySQL tremendously. If this + issue is not taken care of, adding extra CPUs actually makes + MySQL slower. + + * General file system stability and performance. + + * If your tables are large, performance is affected by the + ability of the file system to deal with large files at all and + to deal with them efficiently. + + * Our level of expertise here at Sun Microsystems, Inc. with the + platform. If we know a platform well, we enable + platform-specific optimizations and fixes at compile time. We + can also provide advice on configuring your system optimally + for MySQL. + + * The amount of testing we have done internally for similar + configurations. + + * The number of users that have run MySQL successfully on the + platform in similar configurations. If this number is high, + the likelihood of encountering platform-specific surprises is + much smaller. + +2.1.2. Choosing Which MySQL Distribution to Install + + 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. + +2.1.2.1. Choosing Which Version of MySQL to Install + + 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: + + * MySQL 6.0 is the current development release series. + + * MySQL 5.1 is the current General Availability (Production) + release series. New releases are issued for bugfixes only; no + new features are being added that could affect stability. + + * MySQL 5.0 is the previous stable (production-quality) release + series. + + * MySQL 4.1, 4.0, and 3.23 are old stable (production-quality) + release series. MySQL 4.1 is now at the end of the product + lifecycle. Active development and support for these versions + has ended. Extended support for MySQL 4.1 and 4.0 is + available. According to the MySQL Lifecycle Policy (see + http://www.mysql.com/company/legal/lifecycle/#policy), only + Security and Severity Level 1 issues will still be fixed for + MySQL 4.0 and 4.1. + + We do not believe in a complete code freeze because this prevents + us from making bugfixes and other fixes that must be done. By + "somewhat frozen" we mean that we may add small things that should + not affect anything that currently works in a production release. + 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 General Availability + release series. Currently, this is MySQL 5.1. 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 older system and want to upgrade, but do not + 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 + only 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 Bazaar repositories. + These are not "releases" as such, but are available as previews of + the code on which future releases are to be based. + + The MySQL naming scheme uses release names that consist of three + numbers and a suffix; for example, mysql-5.0.12-beta. The numbers + within the release name are interpreted as follows: + + * The first number (5) is the major version and describes the + file format. All MySQL 5 releases have the same file format. + + * The second number (0) is the release level. Taken together, + the major version and release level constitute the release + series number. + + * The third number (12) 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 is for preview purposes only. + Known bugs should be documented in the News section (see + Appendix C, "MySQL Change History"). Most alpha releases + implement new commands and extensions. Active development that + may involve major code changes can occur in an alpha release. + However, we do conduct testing before issuing a release. + + * beta indicates that the release is appropriate for use with + new development. Within beta releases, the features and + compatibility should remain consistent. However, beta releases + may contain numerous and major unaddressed bugs. + All APIs, externally visible structures, and columns for SQL + statements will not change during future beta, release + candidate, or production releases. + + * rc indicates a Release Candidate. Release candidates are + believed to be stable, having passed all of MySQL's internal + testing, and with all known fatal runtime bugs fixed. However, + the release has not been in widespread use long enough to know + for sure that all bugs have been identified. Only minor fixes + are added. (A release candidate is what formerly was known as + a gamma release.) + + * If there is no suffix, it indicates that the release is a + General Availability (GA) or Production release. GA releases + are stable, having successfully passed through all earlier + release stages and are believed to be reliable, free of + serious bugs, and suitable for use in production systems. Only + critical bugfixes are applied to the release. + + MySQL uses a naming scheme that is slightly different from most + other products. In general, it is usually safe to use any version + that has been out for a couple of weeks without being replaced by + a new version within the same 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 these tools: + + * An internal test suite + The mysql-test directory contains an extensive set of test + cases. We run these tests for every server binary. See Section + 22.1.2, "MySQL Test Suite," for more information about this + test suite. + + * The MySQL benchmark suite + This suite runs a range of common queries. It is also a test + to determine whether the latest batch of optimizations + actually made the code faster. See Section 7.1.4, "The MySQL + Benchmark Suite." + + * The crash-me test + This test tries to determine what features the database + supports and what its capabilities and limitations are. See + Section 7.1.4, "The MySQL Benchmark Suite." + + We also test the newest MySQL version in our internal production + environment, on at least one machine. We have more than 100GB of + data to work with. + +2.1.2.2. Choosing a Distribution Format + + 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 PKG package installers for Mac OS X + or Solaris. Distributions also are available as Zip archives or + compressed tar files. + + Reasons to choose a binary distribution include the following: + + * Binary distributions generally are easier to install than + source distributions. + + * To satisfy different user requirements, we provide several + servers in binary distributions. mysqld is an optimized server + that is a smaller, faster binary. mysqld-debug is compiled + with debugging support. + Each of these servers is compiled from the same source + distribution, though with different configuration options. All + native MySQL clients can connect to servers from either MySQL + version. + + Under some circumstances, you may be better off installing MySQL + from a source distribution: + + * You want to install MySQL at some explicit location. The + standard binary distributions are ready to run at any + installation location, but you might require even more + flexibility to place MySQL components where you want. + + * You want to configure mysqld to ensure that features are + available that might not be included in the standard binary + distributions. Here is a list of the most common extra options + that you may want to use to ensure feature availability: + + + --with-libwrap + + + --with-named-z-libs (this is done for some of the + binaries) + + + --with-debug[=full] + + * You want to configure 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. + + * You have a special compiler (such as 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. + + * You want to use the latest sources from one of the Bazaar + repositories to have access to all current bugfixes. For + example, if you have found a bug and reported it to the MySQL + development team, the bugfix is committed to the source + repository and you can access it there. The bugfix does not + appear in a release until a release actually is issued. + + * You want to read (or modify) the C and C++ code that makes up + MySQL. For this purpose, you should get a source distribution, + because the source code is always the ultimate manual. + + * Source distributions contain more tests and examples than + binary distributions. + +2.1.2.3. How and When Updates Are Released + + MySQL is evolving quite rapidly and we want to share new + developments with other MySQL users. We try to produce a new + release whenever we have new and useful features that others also + seem to have a need for. + + We also try to help users who request features that are easy to + implement. We take note of what our licensed users want, and we + especially take note of what our support customers want and try to + help them in this regard. + + No one is required to download a new release. The News section + helps you determine whether the new release has something you + really want. See Appendix C, "MySQL Change History." + + We use the following policy when updating MySQL: + + * Enterprise Server releases are meant to appear every 18 + months, supplemented by quarterly service packs and monthly + rapid updates. Community Server releases are meant to appear + 2-3 times per year. + + * Releases are issued within each series. Enterprise Server + releases are numbered using even numbers (for example, + 5.1.20). Community Server releases are numbered using odd + numbers (for example, 5.1.21). + + * Binary distributions for some platforms are made by us for + major releases. Other people may make binary distributions for + other systems, but probably less frequently. + + * We make fixes available as soon as we have identified and + corrected small or non-critical but annoying bugs. The fixes + are available in source form immediately from our public + Bazaar repositories, and are included in the next release. + + * If by any chance a security vulnerability or critical bug is + found in a release, our policy is to fix it in a new release + as soon as possible. (We would like other companies to do + this, too!) + +2.1.2.4. MySQL Binaries Compiled by Sun Microsystems, Inc. + + As a service of Sun Microsystems, Inc., 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 compressed tar files (.tar.gz files). See Section + 2.2, "Standard MySQL Installation Using a Binary Distribution." + + The RPM distributions for MySQL 5.1 releases that we make + available through our Web site are generated by MySQL AB. + + For Windows distributions, see Section 2.3, "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. + + Anyone who has more optimal options for any of the following + configure commands can mail them to the MySQL internals mailing + list. See Section 1.5.1, "MySQL Mailing Lists." + + If you want to compile a debug version of MySQL, you should add + --with-debug or --with-debug=full to the following configure + commands and remove any -fomit-frame-pointer options. + + The following binaries are built on our own development systems: + + * Linux 2.4.xx x86 with 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 + + * Linux 2.4.x x86 with icc (Intel C++ Compiler 8.1 or later + releases): +CC=icc CXX=icpc 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-innod +b + Note that versions 8.1 and newer of the Intel compiler have + separate drivers for 'pure' C (icc) and C++ (icpc); if you use + icc version 8.0 or older for building MySQL, you will need to + set CXX=icc. + + * Linux 2.4.xx Intel Itanium 2 with 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 + + * Linux 2.4.xx Intel Itanium with 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 + + * Linux 2.4.xx alpha with 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 + + * Linux 2.x.xx ppc with 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/b +in +--with-extra-charsets=complex --enable-thread-safe-client +--enable-local-infile --disable-shared --with-embedded-server +--with-innodb + + * Linux 2.4.xx s390 with 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 + + * Linux 2.4.xx x86_64 (AMD64) with gcc 3.2.1: +CXX=gcc ./configure --prefix=/usr/local/mysql +--with-extra-charsets=complex --enable-thread-safe-client +--enable-local-infile --disable-shared + + * Sun Solaris 8 x86 with 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/b +in +--with-extra-charsets=complex --enable-thread-safe-client +--enable-local-infile --disable-shared --with-innodb + + * Sun Solaris 8 SPARC with 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 + + * Sun Solaris 8 SPARC 64-bit with gcc 3.2: +CC=gcc CFLAGS="-O3 -m64 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O +3 +-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 + + * Sun Solaris 9 SPARC with 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=-lc +urses +--disable-shared + + * Sun Solaris 9 SPARC with 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 + + * IBM AIX 4.3.2 ppc with 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 + + * IBM AIX 4.3.3 ppc with 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/mysq +l/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 + + * IBM AIX 5.1.0 ppc with gcc 3.3: +CFLAGS="-O2 -mcpu=powerpc -Wa,-many" CXX=gcc CXXFLAGS="-O2 -mcpu=powe +rpc +-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 + + * IBM AIX 5.2.0 ppc with 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/mysq +l/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 + + * HP-UX 10.20 pa-risc1.1 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 + + * HP-UX 11.00 pa-risc with 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 + + * HP-UX 11.11 pa-risc2.0 64bit with 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 + + * HP-UX 11.11 pa-risc2.0 32bit with 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 + + * HP-UX 11.22 ia64 64bit with 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/mysq +l/data +--libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex +--enable-thread-safe-client --enable-local-infile --disable-shared +--with-embedded-server --with-innodb + + * Apple Mac OS X 10.2 powerpc with 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 + + * FreeBSD 4.7 i386 with 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 + + * FreeBSD 4.7 i386 using LinuxThreads with 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 + + * QNX Neutrino 6.2.1 i386 with 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 Sun Microsystems, Inc. by other users. These are + provided only as a courtesy; we do not have full control over + these systems, so we can provide only limited support for the + binaries built on them. + + * SCO Unix 3.2v5.0.7 i386 with gcc 2.95.3: +CFLAGS="-O3 -mpentium" LDFLAGS=-static CXX=gcc CXXFLAGS="-O3 -mpentiu +m +-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-cli +ent +--disable-shared + + * SCO UnixWare 7.1.4 i386 with 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-cli +ent +--disable-shared --with-readline + + * SCO OpenServer 6.0.0 i386 with 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-cli +ent +--disable-shared --with-readline + + * Compaq Tru64 OSF/1 V5.1 732 alpha with 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-named-thread-libs="-lpthread -lmach -lexc -lc" --disable-share +d +--with-mysqld-ldflags=-all-static + + * SGI Irix 6.5 IP32 with 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 + + * FreeBSD/sparc64 5.0 with gcc 3.2.1: +CFLAGS=-DHAVE_BROKEN_REALPATH ./configure --prefix=/usr/local/mysql +--localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/b +in +--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 we have provided in the past. These binaries no longer are + being updated, but the compile options are listed here for + reference purposes. + + * Linux 2.2.xx SPARC with 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 + + * Linux 2.2.x with x686 with 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 + + * SunOS 4.1.4 2 sun4c with gcc 2.7.2.1: +CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors" ./configure +--prefix=/usr/local/mysql --disable-shared --with-extra-charsets=comp +lex +--enable-assembler + + * SunOS 5.5.1 (and above) sun4u with 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 + + * SunOS 5.6 i86pc with gcc 2.8.1: +CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql +--with-low-memory --with-extra-charsets=complex + + * BSDI BSD/OS 3.1 i386 with gcc 2.7.2.1: +CC=gcc CXX=gcc CXXFLAGS=-O ./configure --prefix=/usr/local/mysql +--with-extra-charsets=complex + + * BSDI BSD/OS 2.1 i386 with gcc 2.7.2: +CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql +--with-extra-charsets=complex + + * AIX 4.2 with gcc 2.7.2.2: +CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql +--with-extra-charsets=complex + +2.1.3. How to Get MySQL + + Check our downloads page at http://dev.mysql.com/downloads/ for + information about the current version of MySQL and for downloading + instructions. For a complete up-to-date list of MySQL download + mirror sites, see http://dev.mysql.com/downloads/mirrors.html. You + can also find information there about becoming a MySQL mirror site + and how to report a bad or out-of-date mirror. + + Our main mirror is located at http://mirrors.sunsite.dk/mysql/. + +2.1.4. Verifying Package Integrity Using MD5 Checksums or 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. There are three means of + integrity checking: + + * MD5 checksums + + * Cryptographic signatures using GnuPG, the GNU Privacy Guard + + * For RPM packages, the built-in RPM integrity verification + mechanism + + 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 webmaster@mysql.com or + build@mysql.com. Do not report downloading problems using the + bug-reporting system. + +2.1.4.1. Verifying the MD5 Checksum + + 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-5.1.35-linux-i686.tar.gz +aaab65abbec64d5e907dcd41b8699945 mysql-standard-5.1.35-linux-i686.ta +r.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 + + Make sure to verify the checksum of the archive file (for example, + the .zip or .tar.gz file) and not of the files that are contained + inside of the archive. + + 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 use the command openssl md5 + package_name instead. A Windows implementation of the md5 command + line utility is available from http://www.fourmilab.ch/md5/. + winMd5Sum is a graphical MD5 checking tool that can be obtained + from http://www.nullriver.com/index/products/winmd5sum. + +2.1.4.2. Signature Checking Using 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. + + We sign MySQL downloadable packages with GnuPG (GNU Privacy + Guard). GnuPG is an Open Source alternative to the 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 + ship with GnuPG installed by default. For more information about + GnuPG, see http://www.openpgp.org/. + + To verify the signature for a specific package, you first need to + obtain a copy of our public GPG build key, which you can download + from http://keyserver.pgp.com/. The key that you want to obtain is + named build@mysql.com. Alternatively, you can cut and paste the + key directly from the following text: +-----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 +bT6IXQQTEQIAHQUCR6yUtAUJDTBYqAULBwoDBAMVAwIDFgIBAheAAAoJEIxxjTtQ +cuH1rpIAn38+BlBI815Dou9VXMIAsQEk4G3tAJ9+Cz69Y/Xwm611lzteJrCAA32+ +aYhMBBMRAgAMBQI+PqPRBYMJZgC7AAoJEElQ4SqycpHyJOEAn1mxHijft00bKXvu +cSo/pECUmppiAJ41M9MRVj5VcdH/KN/KjRtW6tHFPYhMBBMRAgAMBQI+QoIDBYMJ +YiKJAAoJELb1zU3GuiQ/lpEAoIhpp6BozKI8p6eaabzF5MlJH58pAKCu/ROofK8J +Eg2aLos+5zEYrB/LsohGBBARAgAGBQI/rOOvAAoJEK/FI0h4g3QP9pYAoNtSISDD +AAU2HafyAYlLD/yUC4hKAJ0czMsBLbo0M/xPaJ6Ox9Q5Hmw2uIhGBBARAgAGBQI/ +tEN3AAoJEIWWr6swc05mxsMAnRag9X61Ygu1kbfBiqDku4czTd9pAJ4q5W8KZ0+2 +ujTrEPN55NdWtnXj4YhGBBARAgAGBQJDW7PqAAoJEIvYLm8wuUtcf3QAnRCyqF0C +pMCTdIGc7bDO5I7CIMhTAJ0UTGx0O1d/VwvdDiKWj45N2tNbYIhGBBMRAgAGBQJE +8TMmAAoJEPZJxPRgk1MMCnEAoIm2pP0sIcVh9Yo0YYGAqORrTOL3AJwIbcy+e8HM +NSoNV5u51RnrVKie34hMBBARAgAMBQJBgcsBBYMGItmLAAoJEBhZ0B9ne6HsQo0A +nA/LCTQ3P5kvJvDhg1DsfVTFnJxpAJ49WFjg/kIcaN5iP1JfaBAITZI3H4hMBBAR +AgAMBQJBgcs0BYMGItlYAAoJEIHC9+viE7aSIiMAnRVTVVAfMXvJhV6D5uHfWeeD +046TAJ4kjwP2bHyd6DjCymq+BdEDz63axohMBBARAgAMBQJBgctiBYMGItkqAAoJ +EGtw7Nldw/RzCaoAmwWM6+Rj1zl4D/PIys5nW48Hql3hAJ0bLOBthv96g+7oUy9U +j09Uh41lF4hMBBARAgAMBQJB0JMkBYMF1BFoAAoJEH0lygrBKafCYlUAoIb1r5D6 +qMLMPMO1krHk3MNbX5b5AJ4vryx5fw6iJctC5GWJ+Y8ytXab34hMBBARAgAMBQJC +K1u6BYMFeUjSAAoJEOYbpIkV67mr8xMAoJMy+UJC0sqXMPSxh3BUsdcmtFS+AJ9+ +Z15LpoOnAidTT/K9iODXGViK6ohMBBIRAgAMBQJAKlk6BYMHektSAAoJEDyhHzSU ++vhhJlwAnA/gOdwOThjO8O+dFtdbpKuImfXJAJ0TL53QKp92EzscZSz49lD2YkoE +qohMBBIRAgAMBQJAPfq6BYMHZqnSAAoJEPLXXGPjnGWcst8AoLQ3MJWqttMNHDbl +xSyzXhFGhRU8AJ4ukRzfNJqElQHQ00ZM2WnCVNzOUIhMBBIRAgAMBQJBDgqEBYMG +lpoIAAoJEDnKK/Q9aopf/N0AniE2fcCKO1wDIwusuGVlC+JvnnWbAKDDoUSEYuNn +5qzRbrzWW5zBno/Nb4hMBBIRAgAMBQJCgKU0BYMFI/9YAAoJEAQNwIV8g5+o4yQA +nA9QOFLV5POCddyUMqB/fnctuO9eAJ4sJbLKP/Z3SAiTpKrNo+XZRxauqIhMBBMR +AgAMBQI+TU2EBYMJV1cIAAoJEC27dr+t1MkzBQwAoJU+RuTVSn+TI+uWxUpT82/d +s5NkAJ9bnNodffyMMK7GyMiv/TzifiTD+4hMBBMRAgAMBQJB14B2BYMFzSQWAAoJ +EGbv28jNgv0+P7wAn13uu8YkhwfNMJJhWdpK2/qM/4AQAJ40drnKW2qJ5EEIJwtx +pwapgrzWiYhMBBMRAgAMBQJCGIEOBYMFjCN+AAoJEHbBAxyiMW6hoO4An0Ith3Kx +5/sixbjZR9aEjoePGTNKAJ94SldLiESaYaJx2lGIlD9bbVoHQYhdBBMRAgAdBQJH +rJTPBQkNMFioBQsHCgMEAxUDAgMWAgECF4AACgkQjHGNO1By4fV0KgCgsLpG2wP0 +rc3s07Fync9g7MfairMAoIUefSNKrGTsTxvLeyH4DLzJW/QFiHsEMBECADsFAkJ3 +NfU0HQBPb3BzLi4uIHNob3VsZCBoYXZlIGJlZW4gbG9jYWwhIEknbSAqc28qIHN0 +dXBpZC4uLgAKCRA5yiv0PWqKX+9HAJ0WjTx/rqgouK4QCrOV/2IOU+jMQQCfYSC8 +JgsIIeN8aiyuStTdYrk0VWCIjwQwEQIATwUCRW8Av0gdAFNob3VsZCBoYXZlIGJl +ZW4gYSBsb2NhbCBzaWduYXR1cmUsIG9yIHNvbWV0aGluZyAtIFdURiB3YXMgSSB0 +aGlua2luZz8ACgkQOcor9D1qil+g+wCfcFWoo5qUl4XTE9K8tH3Q+xGWeYYAnjii +KxjtOXc0ls+BlqXxbfZ9uqBsiQIiBBABAgAMBQJBgcuFBYMGItkHAAoJEKrj5s5m +oURoqC8QAIISudocbJRhrTAROOPoMsReyp46Jdp3iL1oFDGcPfkZSBwWh8L+cJjh +dycIwwSeZ1D2h9S5Tc4EnoE0khsS6wBpuAuih5s//coRqIIiLKEdhTmNqulkCH5m +imCzc5zXWZDW0hpLr2InGsZMuh2QCwAkB4RTBM+r18cUXMLV4YHKyjIVaDhsiPP/ +MKUj6rJNsUDmDq1GiJdOjySjtCFjYADlQYSD7zcd1vpqQLThnZBESvEoCqumEfOP +xemNU6xAB0CL+pUpB40pE6Un6Krr5h6yZxYZ/N5vzt0Y3B5UUMkgYDSpjbulNvaU +TFiOxEU3gJvXc1+h0BsxM7FwBZnuMA8LEA+UdQb76YcyuFBcROhmcEUTiducLu84 +E2BZ2NSBdymRQKSinhvXsEWlH6Txm1gtJLynYsvPi4B4JxKbb+awnFPusL8W+gfz +jbygeKdyqzYgKj3M79R3geaY7Q75Kxl1UogiOKcbI5VZvg47OQCWeeERnejqEAdx +EQiwGA/ARhVOP/1l0LQA7jg2P1xTtrBqqC2ufDB+v+jhXaCXxstKSW1lTbv/b0d6 +454UaOUV7RisN39pE2zFvJvY7bwfiwbUJVmYLm4rWJAEOJLIDtDRtt2h8JahDObm +3CWkpadjw57S5v1c/mn+xV9yTgVx5YUfC/788L1HNKXfeVDq8zbAiQIiBBMBAgAM +BQJCnwocBYMFBZpwAAoJENjCCglaJFfPIT4P/25zvPp8ixqV85igs3rRqMBtBsj+ +5EoEW6DJnlGhoi26yf1nasC2frVasWG7i4JIm0U3WfLZERGDjR/nqlOCEqsP5gS3 +43N7r4UpDkBsYh0WxH/ZtST5llFK3zd7XgtxvqKL98l/OSgijH2W2SJ9DGpjtO+T +iegq7igtJzw7Vax9z/LQH2xhRQKZR9yernwMSYaJ72i9SyWbK3k0+e95fGnlR5pF +zlGq320rYHgD7v9yoQ2t1klsAxK6e3b7Z+RiJG6cAU8o8F0kGxjWzF4v8D1op7S+ +IoRdB0Bap01ko0KLyt3+g4/33/2UxsW50BtfqcvYNJvU4bZns1YSqAgDOOanBhg8 +Ip5XPlDxH6J/3997n5JNj/nk5ojfd8nYfe/5TjflWNiput6tZ7frEki1wl6pTNbv +V9C1eLUJMSXfDZyHtUXmiP9DKNpsucCUeBKWRKLqnsHLkLYydsIeUJ8+ciKc+EWh +FxEY+Ml72cXAaz5BuW9L8KHNzZZfez/ZJabiARQpFfjOwAnmhzJ9r++TEKRLEr96 +taUI9/8nVPvT6LnBpcM38Td6dJ639YvuH3ilAqmPPw50YvglIEe4BUYD5r52Seqc +8XQowouGOuBX4vs7zgWFuYA/s9ebfGaIw+uJd/56Xl9ll6q5CghqB/yt1EceFEnF +CAjQc2SeRo6qzx22uQINBD4+ox0QCADv4Yl/Fsx1jjCyU+eMf2sXg3ap9awQ3+XF +pmglhzdrozTZYKceXpqFPb+0ErbDVAjhgW15HjuAK+2Bvo7Ukd986jYd8uZENGJG +N3UNMIep7JfsIeFyCGP901GVbZnSXlAURyZX1TRWGndoV9YLhSN+zctT6GQBbMTv +NoPlwf0nvK//rG5lXDjXXHSHhSqxNxYy7SIzUHMQupfUNjsvCg8Rv871GRt/h+Yt +7XUTMhoJrg+oBFdBlzh2FKKcy3ordfgGtGwpN+jMG7vgXjsPwiVt/m9Jgdu4Tmn/ +WggPOeSD+nyRb7cXG5avJxyKoVNw3PbXnLJff0tcWeUvMpRv8XkbAAMFB/4vCqpr +wIatF+w4AnGKbrcId+3LmZRzmtRKdOyUZgQg4JHUF5Bq7I9ls8OwMP0xnVlpJp9q +cW/AUbouXH3GRTu3Or68ouhaSbi7nF/e+fnlWOdJ3VpD15CdRxeIvhycEahNs5Yj +f0RzLOCyXMF0L74w+NxBNwDunolRWw/qgAHcVBaDni25SjQRzxuwzxvcS/jYua5B +Pk10ocbAexdM+2XSSWThtCTg5qMeyLLUExqGlPbuNaMmUyIlz4hYnSaCGQoe33bq +z/KZ91/keR1DVzK+zPm2vJUjcXHvxd5Jh9C+67CqnYfXf2lcYSSDSfop1Q5611la +F7vRgY0/DXKNYlPUiEwEGBECAAwFAkeslPwFCQ0wWN8ACgkQjHGNO1By4fWlzgCf +Qj3rkfcljYZOuLOn50J7PFuF7FoAnjwWGhwVi9+Fm2B5RZvpo++BBkdP +=Xquv +-----END PGP PUBLIC KEY BLOCK----- + + To import the build key into your personal public GPG keyring, use + gpg --import. For example, if you have saved the key in a file + named mysql_pubkey.asc, the import command looks like this: +shell> gpg --import mysql_pubkey.asc +gpg: key 5072E1F5: public key "MySQL Package signing key (www.mysql.c +om) <build@mysql.com>" imported +gpg: Total number processed: 1 +gpg: imported: 1 +gpg: no ultimately trusted keys found + + You can also download the key from the public keyserver using the + public key id, 5072E1F5: +shell> gpg --recv-keys 5072E1F5 +gpg: requesting key 5072E1F5 from hkp server subkeys.pgp.net +gpg: key 5072E1F5: "MySQL Package signing key (www.mysql.com) <build@ +mysql.com>" 2 new signatures +gpg: no ultimately trusted keys found +gpg: Total number processed: 1 +gpg: new signatures: 2 + + If you want to import the key into your RPM configuration to + validate RPM install packages, you should be able to import the + key directly: +shell> rpm --import mysql_pubkey.asc + + If you experience problems, try exporting the key from gpg and + importing: +shell> gpg --export -a 5072e1f5 > 5072e1f5.asc +shell> rpm --import 5072e1f5.asc + + Alternatively, rpm also supports loading the key directly from a + URL, and you cas use this manual page: +shell> rpm --import http://dev.mysql.com/doc/refman/5.1/en/checking-g +pg-signature.html + + 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, as shown by the examples in the following table. + Distribution file mysql-standard-5.1.35-linux-i686.tar.gz + Signature file mysql-standard-5.1.35-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-5.1.35-linux-i686.tar.gz.asc +gpg: Signature made Tue 12 Jul 2005 23:35:41 EST using DSA key ID 507 +2E1F5 +gpg: Good signature from "MySQL Package signing key (www.mysql.com) < +build@mysql.com>" + + The Good signature message indicates that everything is all right. + You can ignore any insecure memory warning you might obtain. + + See the GPG documentation for more information on how to work with + public keys. + +2.1.4.3. Signature Checking Using 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-5.1.35-0.glibc23.i386.rpm +MySQL-server-5.1.35-0.glibc23.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 Section 2.1.4.2, "Signature Checking Using GnuPG." + Then use rpm --import to import the key. For example, if you have + saved the public key in a file named mysql_pubkey.asc, import it + using this command: +shell> rpm --import mysql_pubkey.asc + + If you need to obtain the MySQL public key, see Section 2.1.4.2, + "Signature Checking Using GnuPG." + +2.1.5. Installation Layouts + + This section describes the default layout of the directories + created by installing binary or source distributions provided by + Sun Microsystems, Inc. A distribution provided by another vendor + might use a layout different from those shown here. + + For MySQL 5.1 on Windows, the default installation directory is + C:\Program Files\MySQL\MySQL Server 5.1. (Some Windows users + prefer to install in C:\mysql, the directory that formerly was + used as the default. However, the layout of the subdirectories + remains the same.) The installation directory has the following + subdirectories. + Directory Contents of Directory + bin Client programs and the mysqld server + data Log files, databases + Docs Manual in CHM format + examples Example programs and scripts + include Include (header) files + lib Libraries + scripts Utility scripts + share Error message files + + Installations created from our 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/info Manual in Info format + /usr/share/man Unix manual pages + /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 Manual in Info format + man Unix manual pages + 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 + Docs Manual in Info, CHM formats + man Unix manual pages + 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 its installation directory, the layout of a source + installation differs from that of a binary installation in the + following ways: + + * The mysqld server is installed in the libexec directory rather + than in the bin directory. + + * The data directory is var rather than data. + + * mysql_install_db is installed in the bin directory rather than + in the scripts directory. + + * The header file and library directories are include/mysql and + lib/mysql rather than include and lib. + + 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. + +2.2. Standard MySQL Installation Using a Binary Distribution + + The next several sections cover 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.9, "Installing MySQL from tar.gz Packages 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. + +2.3. Installing MySQL on Windows + + A native Windows distribution of MySQL has been available since + version 3.21 and represents a sizable percentage of the daily + downloads of MySQL. This section describes the process for + installing MySQL on Windows. + +Note + + If you are upgrading MySQL from an existing installation older + than MySQL 4.1.5, you must first perform the procedure described + in Section 2.3.14, "Upgrading MySQL on Windows." + + To run MySQL on Windows, you need the following: + + * A Windows operating system such as Windows 2000, Windows XP, + Windows Vista, Windows Server 2003, or Windows Server 2008. + A Windows operating system permits you to run the MySQL server + as a service. See Section 2.3.11, "Starting MySQL as a Windows + Service." + Generally, you should install MySQL on Windows using an + account that has administrator rights. Otherwise, you may + encounter problems with certain operations such as editing the + PATH environment variable or accessing the Service Control + Manager. Once installed, MySQL does not need to be executed + using a user with Administrator privileges. + + * TCP/IP protocol support. + + * Enough space on the hard drive to unpack, install, and create + the databases in accordance with your requirements (generally + a minimum of 200 megabytes is recommended.) + + For a list of limitations within the Windows version of MySQL, see + Section D.7.3, "Windows Platform Limitations." + + There may also be other requirements, depending on how you plan to + use MySQL: + + * If you plan to connect to the MySQL server via ODBC, you need + a Connector/ODBC driver. See Section 21.1, "MySQL + Connector/ODBC." + + * If you plan to use MySQL server with ADO.NET applications, you + need the Connector/NET driver. See Section 21.2, "MySQL + Connector/NET." + + * If you need tables with a size larger than 4GB, install MySQL + on an NTFS or newer file system. Don't forget to use MAX_ROWS + and AVG_ROW_LENGTH when you create tables. See Section + 12.1.17, "CREATE TABLE Syntax." + + MySQL for Windows is available in several distribution formats: + + * Binary distributions are available that contain a setup + program that installs everything you need so that you can + start the server immediately. Another binary distribution + format contains an archive that you simply unpack in the + installation location and then configure yourself. For + details, see Section 2.3.1, "Choosing An Installation + Package." + + * The source distribution contains all the code and support + files for building the executables using the Visual Studio + compiler system. + + Generally speaking, you should use a binary distribution that + includes an installer. It is simpler to use than the others, and + you need no additional tools to get MySQL up and running. The + installer for the Windows version of MySQL, combined with a GUI + Configuration Wizard, automatically installs MySQL, creates an + option file, starts the server, and secures the default user + accounts. + +Caution + + Using virus scanning software such as Norton/Symantec Anti-Virus + on directories containing MySQL data and temporary tables can + cause issues, both in terms of the performance of MySQL and the + virus-scanning software mis-identifying the contents of the files + as containing spam. This is because of the fingerprinting + mechanism used by the virus scanning software, and the way in + which MySQL rapidly updates different files, which may be + identified as a potential security risk. + + After installing MySQL Server, it is recommended that you disable + virus scanning on the main directory (datadir) being used to store + your MySQL table data. There is usually a system built into the + virus scanning software to allow certain directories to be + specifically ignored during virus scanning. + + In addition, by default, MySQL creates temporary files in the + standard Windows temporary directory. To prevent the temporary + files also being scanned, you should configure a separate + temporary directory for MySQL temporary files and add this to the + virus scanning exclusion list. To do this, add a configuration + option for the tmpdir parameter to your my.ini configuration file. + For more information, see Section 2.3.7, "Creating an Option + File." + + The following section describes how to install MySQL on Windows + using a binary distribution. To use an installation package that + does not include an installer, follow the procedure described in + Section 2.3.5, "Installing MySQL from a Noinstall Zip Archive." To + install using a source distribution, see Section 2.10.6, + "Installing MySQL from Source on Windows." + + MySQL distributions for Windows can be downloaded from + http://dev.mysql.com/downloads/. See Section 2.1.3, "How to Get + MySQL." + +2.3.1. Choosing An Installation Package + + For MySQL 5.1, there are three installation packages to choose + from when installing MySQL on Windows: + + * The Essentials Package: This package has a file name similar + to mysql-essential-5.1.35-win32.msi and contains the minimum + set of files needed to install MySQL on Windows, including the + Configuration Wizard. This package does not include optional + components such as the embedded server and benchmark suite. + + * The Complete Package: This package has a file name similar to + mysql-5.1.35-win32.zip and contains all files needed for a + complete Windows installation, including the Configuration + Wizard. This package includes optional components such as the + embedded server and benchmark suite. + + * The Noinstall Archive: This package has a file name similar to + mysql-noinstall-5.1.35-win32.zip and contains all the files + found in the Complete install package, with the exception of + the Configuration Wizard. This package does not include an + automated installer, and must be manually installed and + configured. + + The Essentials package is recommended for most users. It is + provided as an .msi file for use with the Windows Installer. The + Complete and Noinstall distributions are packaged as Zip archives. + To use them, you must have a tool that can unpack .zip files. + + Your choice of install package affects the installation process + you must follow. If you choose to install either the Essentials or + Complete install packages, see Section 2.3.2, "Installing MySQL + with the Automated Installer." If you choose to install MySQL from + the Noinstall archive, see Section 2.3.5, "Installing MySQL from a + Noinstall Zip Archive." + +2.3.2. Installing MySQL with the Automated Installer + + New MySQL users can use the MySQL Installation Wizard and MySQL + Configuration Wizard to install MySQL on Windows. These are + designed to install and configure MySQL in such a way that new + users can immediately get started using MySQL. + + The MySQL Installation Wizard and MySQL Configuration Wizard are + available in the Essentials and Complete install packages. They + are recommended for most standard MySQL installations. Exceptions + include users who need to install multiple instances of MySQL on a + single server host and advanced users who want complete control of + server configuration. + +2.3.3. Using the MySQL Installation Wizard + + MySQL Installation Wizard is an installer for the MySQL server + that uses the latest installer technologies for Microsoft Windows. + The MySQL Installation Wizard, in combination with the MySQL + Configuration Wizard, allows a user to install and configure a + MySQL server that is ready for use immediately after installation. + + The MySQL Installation Wizard is the standard installer for all + MySQL server distributions, version 4.1.5 and higher. Users of + previous versions of MySQL need to shut down and remove their + existing MySQL installations manually before installing MySQL with + the MySQL Installation Wizard. See Section 2.3.3.6, "Upgrading + MySQL with the Installation Wizard," for more information on + upgrading from a previous version. + + Microsoft has included an improved version of their Microsoft + Windows Installer (MSI) in the recent versions of Windows. MSI has + become the de-facto standard for application installations on + Windows 2000, Windows XP, and Windows Server 2003. The MySQL + Installation Wizard makes use of this technology to provide a + smoother and more flexible installation process. + + The Microsoft Windows Installer Engine was updated with the + release of Windows XP; those using a previous version of Windows + can reference this Microsoft Knowledge Base article + (http://support.microsoft.com/default.aspx?scid=kb;EN-US;292539) + for information on upgrading to the latest version of the Windows + Installer Engine. + + In addition, Microsoft has introduced the WiX (Windows Installer + XML) toolkit recently. This is the first highly acknowledged Open + Source project from Microsoft. We have switched to WiX because it + is an Open Source project and it allows us to handle the complete + Windows installation process in a flexible manner using scripts. + + Improving the MySQL Installation Wizard depends on the support and + feedback of users like you. If you find that the MySQL + Installation Wizard is lacking some feature important to you, or + if you discover a bug, please report it in our bugs database using + the instructions given in Section 1.6, "How to Report Bugs or + Problems." + +2.3.3.1. Downloading and Starting the MySQL Installation Wizard + + The MySQL installation packages can be downloaded from + http://dev.mysql.com/downloads/. If the package you download is + contained within a Zip archive, you need to extract the archive + first. + +Note + + If you are installing on Windows Vista it is best to open a + network port before beginning the installation. To do this, first + ensure that you are logged in as an Administrator, go to the + Control Panel, and double click the Windows Firewall icon. Choose + the Allow a program through Windows Firewall option and click the + Add port button. Enter MySQL into the Name text box and 3306 (or + the port of your choice) into the Port number text box. Also + ensure that the TCP protocol radio button is selected. If you + wish, you can also limit access to the MySQL server by choosing + the Change scope button. Confirm your choices by clicking the OK + button. If you do not open a port prior to installation, you + cannot configure the MySQL server immediately after installation. + Additionally, when running the MySQL Installation Wizard on + Windows Vista, ensure that you are logged in as a user with + administrative rights. + + The process for starting the wizard depends on the contents of the + installation package you download. If there is a setup.exe file + present, double-click it to start the installation process. If + there is an .msi file present, double-click it to start the + installation process. + +2.3.3.2. Choosing an Install Type + + There are three installation types available: Typical, Complete, + and Custom. + + The Typical installation type installs the MySQL server, the mysql + command-line client, and the command-line utilities. The + command-line clients and utilities include mysqldump, myisamchk, + and several other tools to help you manage the MySQL server. + + The Complete installation type installs all components included in + the installation package. The full installation package includes + components such as the embedded server library, the benchmark + suite, support scripts, and documentation. + + The Custom installation type gives you complete control over which + packages you wish to install and the installation path that is + used. See Section 2.3.3.3, "The Custom Install Dialog," for more + information on performing a custom install. + + If you choose the Typical or Complete installation types and click + the Next button, you advance to the confirmation screen to verify + your choices and begin the installation. If you choose the Custom + installation type and click the Next button, you advance to the + custom installation dialog, described in Section 2.3.3.3, "The + Custom Install Dialog." + +2.3.3.3. The Custom Install Dialog + + If you wish to change the installation path or the specific + components that are installed by the MySQL Installation Wizard, + choose the Custom installation type. + + A tree view on the left side of the custom install dialog lists + all available components. Components that are not installed have a + red X icon; components that are installed have a gray icon. To + change whether a component is installed, click on that component's + icon and choose a new option from the drop-down list that appears. + + You can change the default installation path by clicking the + Change... button to the right of the displayed installation path. + + After choosing your installation components and installation path, + click the Next button to advance to the confirmation dialog. + +2.3.3.4. The Confirmation Dialog + + Once you choose an installation type and optionally choose your + installation components, you advance to the confirmation dialog. + Your installation type and installation path are displayed for you + to review. + + To install MySQL if you are satisfied with your settings, click + the Install button. To change your settings, click the Back + button. To exit the MySQL Installation Wizard without installing + MySQL, click the Cancel button. + + After installation is complete, you have the option of registering + with the MySQL web site. Registration gives you access to post in + the MySQL forums at forums.mysql.com (http://forums.mysql.com), + along with the ability to report bugs at bugs.mysql.com + (http://bugs.mysql.com) and to subscribe to our newsletter. The + final screen of the installer provides a summary of the + installation and gives you the option to launch the MySQL + Configuration Wizard, which you can use to create a configuration + file, install the MySQL service, and configure security settings. + +2.3.3.5. Changes Made by MySQL Installation Wizard + + Once you click the Install button, the MySQL Installation Wizard + begins the installation process and makes certain changes to your + system which are described in the sections that follow. + + Changes to the Registry + + The MySQL Installation Wizard creates one Windows registry key in + a typical install situation, located in + HKEY_LOCAL_MACHINE\SOFTWARE\MySQL AB. + + The MySQL Installation Wizard creates a key named after the major + version of the server that is being installed, such as MySQL + Server 5.1. It contains two string values, Location and Version. + The Location string contains the path to the installation + directory. In a default installation it contains C:\Program + Files\MySQL\MySQL Server 5.1\. The Version string contains the + release number. For example, for an installation of MySQL Server + 5.1.35, the key contains a value of 5.1.35. + + These registry keys are used to help external tools identify the + installed location of the MySQL server, preventing a complete scan + of the hard-disk to determine the installation path of the MySQL + server. The registry keys are not required to run the server, and + if you install MySQL using the noinstall Zip archive, the registry + keys are not created. + + Changes to the Start Menu + + The MySQL Installation Wizard creates a new entry in the Windows + Start menu under a common MySQL menu heading named after the major + version of MySQL that you have installed. For example, if you + install MySQL 5.1, the MySQL Installation Wizard creates a MySQL + Server 5.1 section in the Start menu. + + The following entries are created within the new Start menu + section: + + * MySQL Command Line Client: This is a shortcut to the mysql + command-line client and is configured to connect as the root + user. The shortcut prompts for a root user password when you + connect. + + * MySQL Server Instance Config Wizard: This is a shortcut to the + MySQL Configuration Wizard. Use this shortcut to configure a + newly installed server, or to reconfigure an existing server. + + * MySQL Documentation: This is a link to the MySQL server + documentation that is stored locally in the MySQL server + installation directory. This option is not available when the + MySQL server is installed using the Essentials installation + package. + + Changes to the File System + + The MySQL Installation Wizard by default installs the MySQL 5.1 + server to C:\Program Files\MySQL\MySQL Server 5.1, where Program + Files is the default location for applications in your system, and + 5.1 is the major version of your MySQL server. This is the + recommended location for the MySQL server, replacing the former + default location C:\mysql. + + By default, all MySQL applications are stored in a common + directory at C:\Program Files\MySQL, where Program Files is the + default location for applications in your Windows installation. A + typical MySQL installation on a developer machine might look like + this: +C:\Program Files\MySQL\MySQL Server 5.1 +C:\Program Files\MySQL\MySQL Administrator 1.0 +C:\Program Files\MySQL\MySQL Query Browser 1.0 + + This approach makes it easier to manage and maintain all MySQL + applications installed on a particular system. + + In MySQL 5.1.23 and earlier, the default location for the data + files used by MySQL is located within the corresponding MySQL + Server installation directory. For MySQL 5.1.24 and later, the + default location of the data directory is the AppData directory + configured for the user that installed the MySQL application. + +2.3.3.6. Upgrading MySQL with the Installation Wizard + + The MySQL Installation Wizard can perform server upgrades + automatically using the upgrade capabilities of MSI. That means + you do not need to remove a previous installation manually before + installing a new release. The installer automatically shuts down + and removes the previous MySQL service before installing the new + version. + + Automatic upgrades are available only when upgrading between + installations that have the same major and minor version numbers. + For example, you can upgrade automatically from MySQL 4.1.5 to + MySQL 4.1.6, but not from MySQL 5.0 to MySQL 5.1. + + See Section 2.3.14, "Upgrading MySQL on Windows." + +2.3.4. MySQL Server Instance Configuration Wizard + + The MySQL Server Instance Configuration Wizard helps automate the + process of configuring your server. It creates a custom MySQL + configuration file (my.ini or my.cnf) by asking you a series of + questions and then applying your responses to a template to + generate the configuration file that is tuned to your + installation. + + The MySQL Server Instance Configuration Wizard is included with + the MySQL 5.1 server. The MySQL Server Instance Configuration + Wizard is only available for Windows. + +2.3.4.1. Starting the MySQL Server Instance Configuration Wizard + + The MySQL Server Instance Configuration Wizard is normally started + as part of the installation process. You should only need to run + the MySQL Server Instance Configuration Wizard again when you need + to change the configuration parameters of your server. + + If you chose not to open a port prior to installing MySQL on + Windows Vista, you can choose to use the MySQL Server + Configuration Wizard after installation. However, you must open a + port in the Windows Firewall. To do this see the instructions + given in Section 2.3.3.1, "Downloading and Starting the MySQL + Installation Wizard." Rather than opening a port, you also have + the option of adding MySQL as a program that bypasses the Windows + Firewall. One or the other option is sufficient --- you need not + do both. Additionally, when running the MySQL Server Configuration + Wizard on Windows Vista ensure that you are logged in as a user + with administrative rights. + MySQL Server Instance Configuration Wizard + + You can launch the MySQL Configuration Wizard by clicking the + MySQL Server Instance Config Wizard entry in the MySQL section of + the Windows Start menu. + + Alternatively, you can navigate to the bin directory of your MySQL + installation and launch the MySQLInstanceConfig.exe file directly. + + The MySQL Server Instance Configuration Wizard places the my.ini + file in the installation directory for the MySQL server. This + helps associate configuration files with particular server + instances. + + To ensure that the MySQL server knows where to look for the my.ini + file, an argument similar to this is passed to the MySQL server as + part of the service installation: +--defaults-file="C:\Program Files\MySQL\MySQL Server 5.1\my.ini" + + Here, C:\Program Files\MySQL\MySQL Server 5.1 is replaced with the + installation path to the MySQL Server. The --defaults-file option + instructs the MySQL server to read the specified file for + configuration options when it starts. + + Apart from making changes to the my.ini file by running the MySQL + Server Instance Configuration Wizard again, you can modify it by + opening it with a text editor and making any necessary changes. + You can also modify the server configuration with the MySQL + Administrator (http://www.mysql.com/products/administrator/) + utility. For more information about server configuration, see + Section 5.1.2, "Server Command Options." + + MySQL clients and utilities such as the mysql and mysqldump + command-line clients are not able to locate the my.ini file + located in the server installation directory. To configure the + client and utility applications, create a new my.ini file in the + Windows installation directory (for example, C:\WINDOWS). + + Under Windows Server 2003, Windows Server 2000, Windows XP, and + Windows Vista MySQL Server Instance Configuration Wizard will + configure MySQL to work as a Windows service. To start and stop + MySQL you use the Services application that is supplied as part of + the Windows Administrator Tools. + +2.3.4.2. Choosing a Maintenance Option + + If the MySQL Server Instance Configuration Wizard detects an + existing configuration file, you have the option of either + reconfiguring your existing server, or removing the server + instance by deleting the configuration file and stopping and + removing the MySQL service. + + To reconfigure an existing server, choose the Re-configure + Instance option and click the Next button. Any existing + configuration file is not overwritten, but renamed (within the + same directory) using a timestamp (Windows) or sequential number + (Linux). To remove the existing server instance, choose the Remove + Instance option and click the Next button. + + If you choose the Remove Instance option, you advance to a + confirmation window. Click the Execute button. The MySQL Server + Configuration Wizard stops and removes the MySQL service, and then + deletes the configuration file. The server installation and its + data folder are not removed. + + If you choose the Re-configure Instance option, you advance to the + Configuration Type dialog where you can choose the type of + installation that you wish to configure. + +2.3.4.3. Choosing a Configuration Type + + When you start the MySQL Server Instance Configuration Wizard for + a new MySQL installation, or choose the Re-configure Instance + option for an existing installation, you advance to the + Configuration Type dialog. + MySQL Server Instance Configuration Wizard: Configuration Type + + There are two configuration types available: Detailed + Configuration and Standard Configuration. The Standard + Configuration option is intended for new users who want to get + started with MySQL quickly without having to make many decisions + about server configuration. The Detailed Configuration option is + intended for advanced users who want more fine-grained control + over server configuration. + + If you are new to MySQL and need a server configured as a + single-user developer machine, the Standard Configuration should + suit your needs. Choosing the Standard Configuration option causes + the MySQL Configuration Wizard to set all configuration options + automatically with the exception of Service Options and Security + Options. + + The Standard Configuration sets options that may be incompatible + with systems where there are existing MySQL installations. If you + have an existing MySQL installation on your system in addition to + the installation you wish to configure, the Detailed Configuration + option is recommended. + + To complete the Standard Configuration, please refer to the + sections on Service Options and Security Options in Section + 2.3.4.10, "The Service Options Dialog," and Section 2.3.4.11, "The + Security Options Dialog," respectively. + +2.3.4.4. The Server Type Dialog + + There are three different server types available to choose from. + The server type that you choose affects the decisions that the + MySQL Server Instance Configuration Wizard makes with regard to + memory, disk, and processor usage. + MySQL Server Instance Configuration Wizard: Server Type + + * Developer Machine: Choose this option for a typical desktop + workstation where MySQL is intended only for personal use. It + is assumed that many other desktop applications are running. + The MySQL server is configured to use minimal system + resources. + + * Server Machine: Choose this option for a server machine where + the MySQL server is running alongside other server + applications such as FTP, email, and Web servers. The MySQL + server is configured to use a moderate portion of the system + resources. + + * Dedicated MySQL Server Machine: Choose this option for a + server machine that is intended to run only the MySQL server. + It is assumed that no other applications are running. The + MySQL server is configured to use all available system + resources. + +Note + + By selecting one of the preconfigured configurations, the values + and settings of various options in your my.cnf or my.ini will be + altered accordingly. The default values and options as described + in the reference manual may therefore be different to the options + and values that were created during the execution of the + configuration wizard. + +2.3.4.5. The Database Usage Dialog + + The Database Usage dialog allows you to indicate the storage + engines that you expect to use when creating MySQL tables. The + option you choose determines whether the InnoDB storage engine is + available and what percentage of the server resources are + available to InnoDB. + MySQL Server Instance Configuration Wizard: Usage Dialog + + * Multifunctional Database: This option enables both the InnoDB + and MyISAM storage engines and divides resources evenly + between the two. This option is recommended for users who use + both storage engines on a regular basis. + + * Transactional Database Only: This option enables both the + InnoDB and MyISAM storage engines, but dedicates most server + resources to the InnoDB storage engine. This option is + recommended for users who use InnoDB almost exclusively and + make only minimal use of MyISAM. + + * Non-Transactional Database Only: This option disables the + InnoDB storage engine completely and dedicates all server + resources to the MyISAM storage engine. This option is + recommended for users who do not use InnoDB. + + The Configuration Wizard uses a template to generate the server + configuration file. The Database Usage dialog sets one of the + following option strings: +Multifunctional Database: MIXED +Transactional Database Only: INNODB +Non-Transactional Database Only: MYISAM + + When these options are processed through the default template + (my-template.ini) the result is: +Multifunctional Database: +default-storage-engine=InnoDB +_myisam_pct=50 + +Transactional Database Only: +default-storage-engine=InnoDB +_myisam_pct=5 + +Non-Transactional Database Only: +default-storage-engine=MyISAM +_myisam_pct=100 +skip-innodb + + The _myisam_pct value is used to calculate the percentage of + resources dedicated to MyISAM. The remaining resources are + allocated to InnoDB. + +2.3.4.6. The InnoDB Tablespace Dialog + + Some users may want to locate the InnoDB tablespace files in a + different location than the MySQL server data directory. Placing + the tablespace files in a separate location can be desirable if + your system has a higher capacity or higher performance storage + device available, such as a RAID storage system. + MySQL Server Instance Configuration Wizard: InnoDB Data Tablespace + + To change the default location for the InnoDB tablespace files, + choose a new drive from the drop-down list of drive letters and + choose a new path from the drop-down list of paths. To create a + custom path, click the ... button. + + If you are modifying the configuration of an existing server, you + must click the Modify button before you change the path. In this + situation you must move the existing tablespace files to the new + location manually before starting the server. + +2.3.4.7. The Concurrent Connections Dialog + + To prevent the server from running out of resources, it is + important to limit the number of concurrent connections to the + MySQL server that can be established. The Concurrent Connections + dialog allows you to choose the expected usage of your server, and + sets the limit for concurrent connections accordingly. It is also + possible to set the concurrent connection limit manually. + MySQL Server Instance Configuration Wizard: Connections + + * Decision Support (DSS)/OLAP: Choose this option if your server + does not require a large number of concurrent connections. The + maximum number of connections is set at 100, with an average + of 20 concurrent connections assumed. + + * Online Transaction Processing (OLTP): Choose this option if + your server requires a large number of concurrent connections. + The maximum number of connections is set at 500. + + * Manual Setting: Choose this option to set the maximum number + of concurrent connections to the server manually. Choose the + number of concurrent connections from the drop-down box + provided, or enter the maximum number of connections into the + drop-down box if the number you desire is not listed. + +2.3.4.8. The Networking and Strict Mode Options Dialog + + Use the Networking Options dialog to enable or disable TCP/IP + networking and to configure the port number that is used to + connect to the MySQL server. + MySQL Server Instance Configuration Wizard: Network Configuration + + TCP/IP networking is enabled by default. To disable TCP/IP + networking, uncheck the box next to the Enable TCP/IP Networking + option. + + Port 3306 is used by default. To change the port used to access + MySQL, choose a new port number from the drop-down box or type a + new port number directly into the drop-down box. If the port + number you choose is in use, you are prompted to confirm your + choice of port number. + + Set the Server SQL Mode to either enable or disable strict mode. + Enabling strict mode (default) makes MySQL behave more like other + database management systems. If you run applications that rely on + MySQL's old "forgiving" behavior, make sure to either adapt those + applications or to disable strict mode. For more information about + strict mode, see Section 5.1.7, "Server SQL Modes." + +2.3.4.9. The Character Set Dialog + + The MySQL server supports multiple character sets and it is + possible to set a default server character set that is applied to + all tables, columns, and databases unless overridden. Use the + Character Set dialog to change the default character set of the + MySQL server. + MySQL Server Instance Configuration Wizard: Character Set + + * Standard Character Set: Choose this option if you want to use + latin1 as the default server character set. latin1 is used for + English and many Western European languages. + + * Best Support For Multilingualism: Choose this option if you + want to use utf8 as the default server character set. This is + a Unicode character set that can store characters from many + different languages. + + * Manual Selected Default Character Set / Collation: Choose this + option if you want to pick the server's default character set + manually. Choose the desired character set from the provided + drop-down list. + +2.3.4.10. The Service Options Dialog + + On Windows platforms, the MySQL server can be installed as a + Windows service. When installed this way, the MySQL server can be + started automatically during system startup, and even restarted + automatically by Windows in the event of a service failure. + + The MySQL Server Instance Configuration Wizard installs the MySQL + server as a service by default, using the service name MySQL. If + you do not wish to install the service, uncheck the box next to + the Install As Windows Service option. You can change the service + name by picking a new service name from the drop-down box provided + or by entering a new service name into the drop-down box. + +Note + + Service names can include any legal character except forward (/) + or backward (\) slashes, and must be less than 256 characters + long. + +Warning + + If you are installing multiple versions of MySQL onto the same + machine, you must choose a different service name for each version + that you install. If you do not choose a different service for + each installed version then the service manager information will + be inconsistent and this will cause problems when you try to + uninstall a previous version. + + If you have already installed multiple versions using the same + service name, you must manually edit the contents of the + HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services parameters + within the Windows registry to update the association of the + service name with the correct server version. + + Typically, when installing multiple versions you create a service + name based on the version information. For example, you might + install MySQL 5.x as mysql5, or specific versions such as MySQL + 5.1.30 as mysql5130. + + To install the MySQL server as a service but not have it started + automatically at startup, uncheck the box next to the Launch the + MySQL Server Automatically option. + +2.3.4.11. The Security Options Dialog + + It is strongly recommended that you set a root password for your + MySQL server, and the MySQL Server Instance Configuration Wizard + requires by default that you do so. If you do not wish to set a + root password, uncheck the box next to the Modify Security + Settings option. + MySQL Server Instance Configuration Wizard: Security + + To set the root password, enter the desired password into both the + New root password and Confirm boxes. If you are reconfiguring an + existing server, you need to enter the existing root password into + the Current root password box. + + To prevent root logins from across the network, check the box next + to the Root may only connect from localhost option. This increases + the security of your root account. + + To create an anonymous user account, check the box next to the + Create An Anonymous Account option. Creating an anonymous account + can decrease server security and cause login and permission + difficulties. For this reason, it is not recommended. + +2.3.4.12. The Confirmation Dialog + + The final dialog in the MySQL Server Instance Configuration Wizard + is the Confirmation Dialog. To start the configuration process, + click the Execute button. To return to a previous dialog, click + the Back button. To exit the MySQL Server Instance Configuration + Wizard without configuring the server, click the Cancel button. + MySQL Server Instance Configuration Wizard: Confirmation + + After you click the Execute button, the MySQL Server Instance + Configuration Wizard performs a series of tasks and displays the + progress onscreen as the tasks are performed. + + The MySQL Server Instance Configuration Wizard first determines + configuration file options based on your choices using a template + prepared by MySQL developers and engineers. This template is named + my-template.ini and is located in your server installation + directory. + + The MySQL Configuration Wizard then writes these options to the + corresponding configuration file. + + If you chose to create a service for the MySQL server, the MySQL + Server Instance Configuration Wizard creates and starts the + service. If you are reconfiguring an existing service, the MySQL + Server Instance Configuration Wizard restarts the service to apply + your configuration changes. + + If you chose to set a root password, the MySQL Configuration + Wizard connects to the server, sets your new root password, and + applies any other security settings you may have selected. + + After the MySQL Server Instance Configuration Wizard has completed + its tasks, it displays a summary. Click the Finish button to exit + the MySQL Server Configuration Wizard. + +2.3.5. Installing MySQL from a Noinstall Zip Archive + + Users who are installing from the Noinstall package can use the + instructions in this section to manually install MySQL. The + process for installing MySQL from a Zip archive is as follows: + + 1. Extract the archive to the desired install directory + + 2. Create an option file + + 3. Choose a MySQL server type + + 4. Start the MySQL server + + 5. Secure the default user accounts + + This process is described in the sections that follow. + +2.3.6. Extracting the Install Archive + + To install MySQL manually, do the following: + + 1. If you are upgrading from a previous version please refer to + Section 2.3.14, "Upgrading MySQL on Windows," before beginning + the upgrade process. + + 2. Make sure that you are logged in as a user with administrator + privileges. + + 3. Choose an installation location. Traditionally, the MySQL + server is installed in C:\mysql. The MySQL Installation Wizard + installs MySQL under C:\Program Files\MySQL. If you do not + install MySQL at C:\mysql, you must specify the path to the + install directory during startup or in an option file. See + Section 2.3.7, "Creating an Option File." + + 4. Extract the install archive to the chosen installation + location using your preferred Zip archive tool. Some tools may + extract the archive to a folder within your chosen + installation location. If this occurs, you can move the + contents of the subfolder into the chosen installation + location. + +2.3.7. Creating an Option File + + 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 are used every time the server + starts, you may find it most convenient to use an option file to + specify your MySQL configuration. This is particularly true under + the following circumstances: + + * The installation or data directory locations are different + from the default locations (C:\Program Files\MySQL\MySQL + Server 5.1 and C:\Program Files\MySQL\MySQL Server 5.1\data). + + * You need to tune the server settings, such as memory, cache, + or InnoDB configuration information. + + 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. 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, and then in the + my.cnf file. However, to avoid confusion, it is best if you use + only one file. If your PC uses a boot loader where C: is not 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. + + You can also make use of the example option files included with + your MySQL distribution; see Section 4.2.3.2.2, "Preconfigured + Option Files." + + An option file can be created and modified with any text editor, + such as Notepad. For example, if MySQL is installed in E:\mysql + and the data directory is in E:\mydata\data, you can create an + option file containing a [mysqld] section to specify values for + the basedir and datadir options: +[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 path names are specified in option files using + (forward) slashes rather than backslashes. If you do use + backslashes, you must double them: +[mysqld] +# set basedir to your installation path +basedir=E:\\mysql +# set datadir to the location of your data directory +datadir=E:\\mydata\\data + + MySQL Enterprise For expert advice on the start-up options + appropriate to your circumstances, subscribe to the MySQL + Enterprise Monitor. For more information, see + http://www.mysql.com/products/enterprise/advisors.html. + + In MySQL 5.1.23 and earlier, the MySQL installer places the data + directory directly under the directory where you install MySQL. On + MySQL 5.1.24 and later, the data directory is located within the + AppData directory for the user running 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, if you want to use E:\mydata as the + data directory instead, you must do two things: + + 1. Move the entire data directory and all of its contents from + the default location (for example C:\Program Files\MySQL\MySQL + Server 5.1\data) to E:\mydata. + + 2. Use a --datadir option to specify the new data directory + location each time you start the server. + +2.3.8. Selecting a MySQL Server Type + + The following table shows the available servers for Windows in + MySQL 5.1.20 and earlier. + Binary Description + mysqld-nt Optimized binary with named-pipe support + mysqld Optimized binary without named-pipe support + mysqld-debug Like mysqld-nt, but compiled with full debugging and + automatic memory allocation checking + + The following table shows the available servers for Windows in + MySQL 5.1.21 and later. + Binary Description + mysqld Optimized binary with named-pipe support + mysqld-debug Like mysqld, but compiled with full debugging and + automatic memory allocation checking + + All of the preceding binaries are optimized for modern Intel + processors, but should work on any Intel i386-class or higher + processor. + + Each of the servers in a distribution support the same set of + storage engines. The SHOW ENGINES statement displays which engines + a given server supports. + + All Windows MySQL 5.1 servers have support for symbolic linking of + database directories. + + MySQL supports TCP/IP on all Windows platforms. MySQL servers on + Windows support named pipes as indicated in the following list. + However, the default is to use TCP/IP regardless of platform. + (Named pipes are slower than TCP/IP in many Windows + configurations.) + + Use of named pipes is subject to these conditions: + + * Named pipes are enabled only if you start the server with the + --enable-named-pipe option. It is necessary to use this option + explicitly because some users have experienced problems with + shutting down the MySQL server when named pipes were used. + + * For MySQL 5.1.20 and earlier, named-pipe connections are + allowed only by the mysqld-nt and mysqld-debug servers. For + MySQL 5.1.21 and later, the mysqld and mysqld-debug servers + both contain support for named-pipe connections. + +Note + + Most of the examples in this manual use mysqld as the server name. + If you choose to use a different server, such as mysqld-nt or + mysqld-debug, make the appropriate substitutions in the commands + that are shown in the examples. + +2.3.9. Starting the Server for the First Time + + This section gives a general overview of starting the MySQL + server. The following sections provide more specific information + for starting the MySQL server from the command line or as a + Windows service. + + The information here applies primarily if you installed MySQL + using the Noinstall version, or if you wish to configure and test + MySQL manually rather than with the GUI tools. + + The examples in these sections assume that MySQL is installed + under the default location of C:\Program Files\MySQL\MySQL Server + 5.1. Adjust the path names shown in the examples if you have MySQL + installed in a different location. + + Clients have two options. They can use TCP/IP, or they can use a + named pipe if the server supports named-pipe connections. + + MySQL for Windows also supports shared-memory connections if the + server is started with the --shared-memory option. Clients can + connect through shared memory by using the --protocol=MEMORY + option. + + For information about which server binary to run, see Section + 2.3.8, "Selecting a MySQL Server Type." + + Testing is best done from a command prompt in a console window (or + "DOS window"). In 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 make it easier for + you to identify and fix any problems. + + To start the server, enter this command: +C:\> "C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqld" --console + + For a server that includes InnoDB support, you should see the + messages similar to those following as it starts (the path names + and sizes may differ): +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 creat +ed +InnoDB: Setting log file c:\iblogs\ib_logfile0 size to 31457280 +InnoDB: Log file c:\iblogs\ib_logfile1 did not exist: new to be creat +ed +InnoDB: Setting log file c:\iblogs\ib_logfile1 size to 31457280 +InnoDB: Log file c:\iblogs\ib_logfile2 did not exist: new to be creat +ed +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: '5.1.35' socket: '' port: 3306 + + The server continues 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:\Program + Files\MySQL\MySQL Server 5.1\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.11, + "Post-Installation Setup and Testing." + +2.3.10. Starting MySQL from the Windows Command Line + + 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 (or "DOS window") and enter this command: +C:\> "C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqld" + + The path to mysqld may vary depending on the install location of + MySQL on your system. + + You can stop the MySQL server by executing this command: +C:\> "C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqladmin" -u root + shutdown + +Note + + If the MySQL root user account has a password, you need to invoke + mysqladmin with the -p option and supply the password when + prompted. + + This command invokes the MySQL administrative utility mysqladmin + to connect to the server and tell it to shut down. The command + connects as the MySQL root user, 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:\Program + Files\MySQL\MySQL Server 5.1\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 the --standalone and + --debug options. In this case, mysqld writes a log file + C:\mysqld.trace that should contain the reason why mysqld doesn't + start. See MySQL Internals: Porting + (http://forge.mysql.com/wiki/MySQL_Internals_Porting). + + Use mysqld --verbose --help to display all the options that mysqld + understands. + +2.3.11. Starting MySQL as a Windows Service + + On Windows, the recommended way to run MySQL is to install it as a + Windows service, whereby MySQL starts and stops automatically when + Windows starts and stops. A MySQL server installed as a service + can also be controlled from the command line using NET commands, + or with the graphical Services utility. Generally, to install + MySQL as a Windows service you should be logged in using an + account that has administrator rights. + + The Services utility (the Windows Service Control Manager) can be + found in the Windows Control Panel (under Administrative Tools on + Windows 2000, XP, Vista and Server 2003). To avoid conflicts, it + is advisable to close the Services utility while performing server + installation or removal operations from the command line. + + 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:\Program Files\MySQL\MySQL Server 5.1\bin\mysqladmin" + -u root shutdown + +Note + + If the MySQL root user account has a password, you need to invoke + mysqladmin with the -p option and supply the password when + prompted. + + This command invokes the MySQL administrative utility mysqladmin + to connect to the server and tell it to shut down. The command + connects as the MySQL root user, 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. + + Install the server as a service using this command: +C:\> "C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqld" --install + + The service-installation command does not start the server. + Instructions for that are given later in this section. + + To make it easier to invoke MySQL programs, you can add the path + name of the MySQL bin directory to your Windows system PATH + environment variable: + + * On the Windows desktop, right-click on the My Computer icon, + and select Properties. + + * Next select the Advanced tab from the System Properties menu + that appears, and click the Environment Variables button. + + * Under System Variables, select Path, and then click the Edit + button. The Edit System Variable dialogue should appear. + + * Place your cursor at the end of the text appearing in the + space marked Variable Value. (Use the End key to ensure that + your cursor is positioned at the very end of the text in this + space.) Then enter the complete path name of your MySQL bin + directory (for example, C:\Program Files\MySQL\MySQL Server + 5.1\bin), Note that there should be a semicolon separating + this path from any values present in this field. Dismiss this + dialogue, and each dialogue in turn, by clicking OK until all + of the dialogues that were opened have been dismissed. You + should now be able to invoke any MySQL executable program by + typing its name at the DOS prompt from any directory on the + system, without having to supply the path. This includes the + servers, the mysql client, and all MySQL command-line + utilities such as mysqladmin and mysqldump. + You should not add the MySQL bin directory to your Windows + PATH if you are running multiple MySQL servers on the same + machine. + +Warning + + You must exercise great care when editing your system PATH by + hand; accidental deletion or modification of any portion of the + existing PATH value can leave you with a malfunctioning or even + unusable system. + + The following additional arguments can be used in MySQL 5.1 when + installing the service: + + * You can specify a service name immediately following the + --install option. The default service name is MySQL. + + * If a service name is given, it can be followed by a single + option. By convention, this should be + --defaults-file=file_name to specify the name of an option + file from which the server should read options when it starts. + The use of a single option other than --defaults-file is + possible but discouraged. --defaults-file is more flexible + because it enables you to specify multiple startup options for + the server by placing them in the named option file. + + * You can also specify a --local-service option following the + service name. This causes the server to run using the + LocalService Windows account that has limited system + privileges. This account is available only for Windows XP or + newer. If both --defaults-file and --local-service are given + following the service name, they can be in any order. + + For a MySQL server that is installed as a Windows service, the + following rules determine the service name and option files that + the server uses: + + * If the service-installation command specifies no service name + or the default service name (MySQL) following the --install + option, the server uses the a service name of MySQL and reads + options from the [mysqld] group in the standard option files. + + * If the service-installation command specifies a service name + other than MySQL following the --install option, the server + uses that service name. It reads options from the [mysqld] + group and the group that has the same name as the service in + the standard option files. This allows you to use the [mysqld] + group for options that should be used by all MySQL services, + and an option group with the service name for use by the + server installed with that service name. + + * If the service-installation command specifies a + --defaults-file option after the service name, the server + reads options only from the [mysqld] group of the named file + and ignores the standard option files. + + As a more complex example, consider the following command: +C:\> "C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqld" + --install MySQL --defaults-file=C:\my-opts.cnf + + Here, the default service name (MySQL) 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 [mysqld] group from the standard option files. However, + because the --defaults-file option is present, the server reads + options from the [mysqld] option group, and only from the named + file. + + You can also specify options as Start parameters in the Windows + Services utility before you start the MySQL service. + + Once a MySQL server has been installed as a service, Windows + starts the service automatically whenever Windows starts. The + service also can be started immediately from the Services utility, + or by using a NET START MySQL command. 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 does not 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 MySQL data directory (for example, C:\Program + Files\MySQL\MySQL Server 5.1\data). It is the file with a suffix + of .err. + + When a MySQL server has been installed as a service, and the + service is running, Windows stops the service automatically when + Windows shuts down. The server also can be stopped manually by + using the Services utility, the NET STOP MySQL command, or the + mysqladmin shutdown command. + + You also have the choice of installing the server as a manual + service if you do not wish for 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:\Program Files\MySQL\MySQL Server 5.1\bin\mysqld" --install-m +anual + + To remove a server that is installed as a service, first stop it + if it is running by executing NET STOP MySQL. Then use the + --remove option to remove it: +C:\> "C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqld" --remove + + If mysqld is not running as a service, you can start it from the + command line. For instructions, see Section 2.3.10, "Starting + MySQL from the Windows Command Line." + + Please see Section 2.3.13, "Troubleshooting a MySQL Installation + Under Windows," if you encounter difficulties during installation. + +2.3.12. Testing The MySQL Installation + + You can test whether the MySQL server is working by executing any + of the following commands: +C:\> "C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqlshow" +C:\> "C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqlshow" -u root +mysql +C:\> "C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqladmin" version + status proc +C:\> "C:\Program Files\MySQL\MySQL Server 5.1\bin\mysql" test + + If mysqld is slow to respond to TCP/IP connections from client + programs, 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 or --protocol=PIPE option, or + by specifying . (period) as the host name. Use the --socket option + to specify the name of the pipe if you do not want to use the + default pipe name. + + Note that if you have set a password for the root account, deleted + the anonymous account, or created a new user account, then you + must use the appropriate -u and -p options with the commands shown + above in order to connect with the MySQL Server. See Section + 4.2.2, "Connecting to the MySQL Server." + + For more information about mysqlshow, see Section 4.5.6, + "mysqlshow --- Display Database, Table, and Column Information." + +2.3.13. Troubleshooting a MySQL Installation Under Windows + + When installing and running MySQL for the first time, you may + encounter certain errors that prevent the MySQL server from + starting. The purpose of this section is to help you diagnose and + correct some of these errors. + + Your first resource when troubleshooting server issues is the + error log. The MySQL server uses the error log to record + information relevant to the error that prevents the server from + starting. The error log is located in the data directory specified + in your my.ini file. The default data directory location is + C:\Program Files\MySQL\MySQL Server 5.1\data. See Section 5.2.2, + "The Error Log." + + Another source of information regarding possible errors is the + console messages displayed when the MySQL service is starting. Use + the NET START MySQL command from the command line after installing + mysqld as a service to see any error messages regarding the + starting of the MySQL server as a service. See Section 2.3.11, + "Starting MySQL as a Windows Service." + + The following examples show other common error messages you may + encounter when installing MySQL and starting the server for the + first time: + + * If the MySQL server cannot find the mysql privileges database + or other critical files, you may see these messages: +System error 1067 has occurred. +Fatal error: Can't open privilege tables: Table 'mysql.host' doesn't +exist + These messages often occur when the MySQL base or data + directories are installed in different locations than the + default locations (C:\Program Files\MySQL\MySQL Server 5.1 and + C:\Program Files\MySQL\MySQL Server 5.1\data, respectively). + This situation may occur when MySQL is upgraded and installed + to a new location, but the configuration file is not updated + to reflect the new location. In addition, there may be old and + new configuration files that conflict. Be sure to delete or + rename any old configuration files when upgrading MySQL. + If you have installed MySQL to a directory other than + C:\Program Files\MySQL\MySQL Server 5.1, you need to ensure + that the MySQL server is aware of this through the use of a + configuration (my.ini) file. The my.ini file needs to be + located in your Windows directory, typically C:\WINDOWS. You + can determine its exact location from the value of the WINDIR + environment variable by issuing the following command from the + command prompt: +C:\> echo %WINDIR% + An option file can be created and modified with any text + editor, such as Notepad. For example, if MySQL is installed in + E:\mysql and the data directory is D:\MySQLdata, you can + create the option file and set up a [mysqld] section to + specify values for the basedir and datadir options: +[mysqld] +# set basedir to your installation path +basedir=E:/mysql +# set datadir to the location of your data directory +datadir=D:/MySQLdata + Note that Windows path names are specified in option files + using (forward) slashes rather than backslashes. If you do use + backslashes, you must double them: +[mysqld] +# set basedir to your installation path +basedir=C:\\Program Files\\MySQL\\MySQL Server 5.1 +# set datadir to the location of your data directory +datadir=D:\\MySQLdata + If you change the datadir value in your MySQL configuration + file, you must move the contents of the existing MySQL data + directory before restarting the MySQL server. + See Section 2.3.7, "Creating an Option File." + + * If you reinstall or upgrade MySQL without first stopping and + removing the existing MySQL service and install MySQL using + the MySQL Configuration Wizard, you may see this error: +Error: Cannot create Windows service for MySql. Error: 0 + This occurs when the Configuration Wizard tries to install the + service and finds an existing service with the same name. + One solution to this problem is to choose a service name other + than mysql when using the configuration wizard. This allows + the new service to be installed correctly, but leaves the + outdated service in place. Although this is harmless, it is + best to remove old services that are no longer in use. + To permanently remove the old mysql service, execute the + following command as a user with administrative privileges, on + the command-line: +C:\> sc delete mysql +[SC] DeleteService SUCCESS + If the sc utility is not available for your version of + Windows, download the delsrv utility from + http://www.microsoft.com/windows2000/techinfo/reskit/tools/exi + sting/delsrv-o.asp and use the delsrv mysql syntax. + +2.3.14. Upgrading MySQL on Windows + + This section lists some of the steps you should take when + upgrading MySQL on Windows. + + 1. Review Section 2.12.1, "Upgrading MySQL," for additional + information on upgrading MySQL that is not specific to + Windows. + + 2. You should always back up your current MySQL installation + before performing an upgrade. See Section 6.1, "Database + Backups." + + 3. Download the latest Windows distribution of MySQL from + http://dev.mysql.com/downloads/. + + 4. Before upgrading MySQL, you must stop the server. If the + server is installed as a service, stop the service with the + following command from the command prompt: +C:\> NET STOP MySQL + If you are not running the MySQL server as a service, use the + following command to stop it: +C:\> "C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqladmin" -u root + shutdown + +Note + If the MySQL root user account has a password, you need to + invoke mysqladmin with the -p option and supply the password + when prompted. + + 5. When upgrading to MySQL 5.1 from a version previous to 4.1.5, + or when upgrading from a version of MySQL installed from a Zip + archive to a version of MySQL installed with the MySQL + Installation Wizard, you must manually remove the previous + installation and MySQL service (if the server is installed as + a service). + To remove the MySQL service, use the following command: +C:\> C:\mysql\bin\mysqld --remove + If you do not remove the existing service, the MySQL + Installation Wizard may fail to properly install the new MySQL + service. + + 6. When upgrading from MySQL 5.1.23 to MySQL 5.1.24, the change + in the default location of the data directory from a directory + within the MySQL installation to the AppData folder means that + you must manually copy the data files from your old + installation to the new location. + + 7. If you are using the MySQL Installation Wizard, start the + wizard as described in Section 2.3.3, "Using the MySQL + Installation Wizard." + + 8. If you are installing MySQL from a Zip archive, extract the + archive. You may either overwrite your existing MySQL + installation (usually located at C:\mysql), or install it into + a different directory, such as C:\mysql5. Overwriting the + existing installation is recommended. + + 9. If you were running MySQL as a Windows service and you had to + remove the service earlier in this procedure, reinstall the + service. (See Section 2.3.11, "Starting MySQL as a Windows + Service.") + 10. Restart the server. For example, use NET START MySQL if you + run MySQL as a service, or invoke mysqld directly otherwise. + 11. If you encounter errors, see Section 2.3.13, "Troubleshooting + a MySQL Installation Under Windows." + +2.3.15. MySQL on Windows Compared to MySQL on Unix + + MySQL for Windows has proven itself to be very stable. The Windows + version of MySQL has the same features as the corresponding Unix + version, with the following exceptions: + + * Limited number of ports + Windows systems have about 4,000 ports available for client + connections, and after a connection on a port closes, it takes + two to four minutes before the port can be reused. In + situations where clients connect to and disconnect from the + server at a high rate, it is possible for all available ports + to be used up before closed ports become available again. If + this happens, the MySQL server appears to be unresponsive even + though it is running. Note that ports may be used by other + applications running on the machine as well, in which case the + number of ports available to MySQL is lower. + For more information about this problem, see + http://support.microsoft.com/default.aspx?scid=kb;en-us;196271 + . + + * Concurrent reads + MySQL depends on the pread() and pwrite() system calls to be + able to mix INSERT and SELECT. Currently, we use mutexes to + emulate pread() and pwrite(). We intend to replace the file + level interface with a virtual interface in the future so that + we can use the readfile()/writefile() interface to get more + speed. The current implementation limits the number of open + files that MySQL 5.1 can use to 2,048, which means that you + cannot run as many concurrent threads on Windows as on Unix. + + * Blocking read + MySQL uses a blocking read for each connection. That has the + following implications if named-pipe connections are enabled: + + + A connection is not disconnected automatically after + eight hours, as happens with the Unix version of MySQL. + + + If a connection hangs, it is not possible to break it + without killing MySQL. + + + mysqladmin kill does not work on a sleeping connection. + + + mysqladmin shutdown cannot abort as long as there are + sleeping connections. + We plan to fix this problem in the future. + + * ALTER TABLE + While you are executing an 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 does not + work on Windows because the MERGE handler does the table + mapping hidden from the upper layer of MySQL. Because Windows + does not allow dropping files that are open, you first must + flush all MERGE tables (with FLUSH TABLES) or drop the MERGE + table before dropping the table. + + * DATA DIRECTORY and INDEX DIRECTORY + The 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 + You cannot drop a database that is in use by some thread. + + * Case-insensitive names + File names are not case sensitive on Windows, so MySQL + database and table names are also not case sensitive on + Windows. The only restriction is that database and table names + must be specified using the same case throughout a given + statement. See Section 8.2.2, "Identifier Case Sensitivity." + + * The "\" path name separator character + Path name components in Windows are separated by the "\" + character, which is also the escape character in MySQL. If you + are using LOAD DATA INFILE or SELECT ... INTO OUTFILE, use + Unix-style file names 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; + + * Problems with pipes + Pipes do not work reliably from the Windows command-line + prompt. If the pipe includes the character ^Z / CHAR(24), + Windows thinks that it has encountered end-of-file and aborts + the program. + This is mainly a problem when you try to apply a binary log as + follows: +C:\> mysqlbinlog binary_log_file | mysql --user=root + If 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. + + * Access denied for user error + If MySQL cannot resolve your host name properly, you may get + the following error when you attempt to run a MySQL client + program to connect to a server running on the same machine: +Access denied for user 'some_user'@'unknown' +to database 'mysql' + To fix this problem, 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: + + * Add macros to use the faster thread-safe increment/decrement + methods provided by Windows. + +2.4. Installing MySQL from RPM Packages on Linux + + The recommended way to install MySQL on RPM-based Linux + distributions is by using the RPM packages. The RPMs that we + provide to the community should work on all versions of Linux that + support RPM packages and use glibc 2.3. To obtain RPM packages, + see Section 2.1.3, "How to Get MySQL." + + For non-RPM Linux distributions, you can install MySQL using a + .tar.gz package. See Section 2.9, "Installing MySQL from tar.gz + Packages on Other Unix-Like Systems." + + We do provide some platform-specific RPMs; the difference between + a platform-specific RPM and a generic RPM is that a + platform-specific RPM is built on the targeted platform and is + linked dynamically whereas a generic RPM is linked statically with + LinuxThreads. + +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 us, 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.13.1.2, "Linux Binary Distribution Notes." + + In most cases, you need to install only the MySQL-server and + MySQL-client packages to get a functional MySQL installation. The + other packages are not required for a standard installation. + + RPMs for MySQL Cluster. Beginning with MySQL 5.1.24, standard + MySQL server RPMs built by MySQL no longer provide support for the + NDBCLUSTER storage engine. MySQL Cluster users wanting to upgrade + MySQL 5.1.23 or earlier installations from RPMs built by MySQL + should upgrade to MySQL Cluster NDB 6.2 or MySQL Cluster NDB 6.3; + RPMs that should work with most Linux distributions are available + for both of these release series. + +Important + + When upgrading a MySQL Cluster RPM installation, you must upgrade + all installed RPMs, including the Server and Client RPMs. + + For more information about installing MySQL Cluster from RPMs, see + Section 17.2.2, "MySQL Cluster Multi-Computer Installation." + + For upgrades, if your installation was originally produced by + installing multiple RPM packages, it is best to upgrade all the + packages, not just some. For example, if you previously installed + the server and client RPMs, do not upgrade just the server RPM. + + If you get a dependency failure when trying to install MySQL + packages (for example, error: removing these packages would break + dependencies: libmysqlclient.so.10 is needed by ...), you should + also install the MySQL-shared-compat package, which includes both + the shared libraries for backward compatibility + (libmysqlclient.so.12 for MySQL 4.0 and libmysqlclient.so.10 for + MySQL 3.23). + + Some 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. (Do not install both.) + + The RPM packages shown in the following list are available. The + names shown here use a suffix of .glibc23.i386.rpm, but particular + packages can have different suffixes, as described later. + + * MySQL-server-VERSION.glibc23.i386.rpm + The MySQL server. You need this unless you only want to + connect to a MySQL server running on another machine. + + * MySQL-client-VERSION.glibc23.i386.rpm + The standard MySQL client programs. You probably always want + to install this package. + + * MySQL-devel-VERSION.glibc23.i386.rpm + The libraries and include files that are needed if you want to + compile other MySQL clients, such as the Perl modules. + + * MySQL-debuginfo-VERSION.glibc23.i386.rpm + This package contains debugging information. debuginfo RPMs + are never needed to use MySQL software; this is true both for + the server and for client programs. However, they contain + additional information that might be needed by a debugger to + analyze a crash. + + * MySQL-shared-VERSION.glibc23.i386.rpm + This package contains the shared libraries + (libmysqlclient.so*) that certain languages and applications + need to dynamically load and use MySQL. It contains + single-threaded and thread-safe libraries. If you install this + package, do not install the MySQL-shared-compat package. + + * MySQL-shared-compat-VERSION.glibc23.i386.rpm + This package includes the shared libraries for MySQL 3.23, + 4.0, 4.1, and 5.1. It contains single-threaded and thread-safe + libraries. Install this package instead of MySQL-shared if you + have applications installed that are dynamically linked + against older versions of MySQL but you want to upgrade to the + current version without breaking the library dependencies. + + * MySQL-embedded-VERSION.glibc23.i386.rpm + The embedded MySQL server library. + + * MySQL-ndb-management-VERSION.glibc23.i386.rpm, + MySQL-ndb-storage-VERSION.glibc23.i386.rpm, + MySQL-ndb-tools-VERSION.glibc23.i386.rpm, + MySQL-ndb-extra-VERSION.glibc23.i386.rpm + Packages that contain additional files for MySQL Cluster + installations. + +Note + The MySQL-ndb-tools RPM requires a working installation of + perl. Prior to MySQL 5.1.18, the DBI and HTML::Template + packages were also required. See Section 2.15, "Perl + Installation Notes," and Section 17.9.15, "ndb_size.pl --- + NDBCLUSTER Size Requirement Estimator," for more information. + + * MySQL-test-VERSION.glibc23.i386.rpm + This package includes the MySQL test suite. + + * 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). + + The suffix of RPM package names (following the VERSION value) has + the following syntax: +.PLATFORM.CPU.rpm + + The PLATFORM and CPU values indicate the type of system for which + the package is built. PLATFORM indicates the platform and CPU + indicates the processor type or family. + + All packages are dynamically linked against glibc 2.3. The + PLATFORM value indicates whether the package is platform + independent or intended for a specific platform, as shown in the + following table. + glibc23 Platform independent, should run on any Linux distribution + that supports glibc 2.3 + rhel3, rhel4 Red Hat Enterprise Linux 3 or 4 + sles9, sles10 SuSE Linux Enterprise Server 9 or 10 + + In MySQL 5.1, only glibc23 packages are available currently. + + The CPU value indicates the processor type or family for which the + package is built. + i386 x86 processor, 386 and up + i586 x86 processor, Pentium and up + x86_64 64-bit x86 processor + ia64 Itanium (IA-64) processor + + To see all files in an RPM package (for example, a MySQL-server + RPM), run a command like this: +shell> rpm -qpl MySQL-server-VERSION.glibc23.i386.rpm + + To perform a standard minimal installation, install the server and + client RPMs: +shell> rpm -i MySQL-server-VERSION.glibc23.i386.rpm +shell> rpm -i MySQL-client-VERSION.glibc23.i386.rpm + + To install only the client programs, install just the client RPM: +shell> rpm -i MySQL-client-VERSION.glibc23.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 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.11.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 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 be + able to start using MySQL. + + If something goes wrong, you can find more information in the + binary installation section. See Section 2.9, "Installing MySQL + from tar.gz Packages 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.11, + "Post-Installation Setup and Testing." + + During RPM installation, a user named mysql and a group named + mysql are created on the system. This is done using the useradd, + groupadd, and usermod commands. Those commands require appropriate + administrative privileges, which is ensured for locally managed + users and groups (as listed in the /etc/passwd and /etc/group + files) by the RPM installation process being run by root. + + For non-local user management (LDAP, NIS, and so forth), the + administrative tools may require additional authentication (such + as a password), and will fail if the installing user does not + provide this authentication. Even if they fail, the RPM + installation will not abort but succeed, and this is intentional. + If they failed, some of the intended transfer of ownership may be + missing, and it is recommended that the system administrator then + manually ensures some appropriate user andgroup exists and + manually transfers ownership following the actions in the RPM spec + file. + +2.5. Installing MySQL on Mac OS X + + You can install MySQL on Mac OS X 10.3.x ("Panther") or newer + 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 or 10.2.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 + guides 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 installs itself into + /usr/local/mysql-VERSION and also installs a symbolic link, + /usr/local/mysql, that points to the new location. If a directory + named /usr/local/mysql exists, it is renamed to + /usr/local/mysql.bak first. Additionally, the installer creates + the grant tables in the mysql database by executing + mysql_install_db. + + 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, a version of MySQL should + already be installed. The following table shows the versions of + MySQL that ship with Mac OS X Server versions. + 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 + 10.4.0 4.1.10a + + 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." + + 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.x 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 4.4.8, "mysql_upgrade --- Check Tables for MySQL Upgrade." + + If you want MySQL to start automatically during system startup, + you also need to install the MySQL Startup Item. 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. 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 for MySQL is 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 want 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 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 Startup Item. However, it does not shut down a 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, use this command: +shell> sudo /Library/StartupItems/MySQLCOM/MySQLCOM start +(Enter your password, if necessary) +(Press Control-D or enter "exit" to exit the shell) + + 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 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.11, + "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 bash is: +alias mysql=/usr/local/mysql/bin/mysql +alias mysqladmin=/usr/local/mysql/bin/mysqladmin + + For tcsh, 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. You can do this by modifying the appropriate startup + file for your shell. For more information, see Section 4.2.1, + "Invoking MySQL Programs." + + If you are upgrading an existing installation, 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. + +2.6. Installing MySQL on Solaris + + If you install MySQL using a binary tarball distribution on + Solaris, you may run into trouble even before you get the MySQL + distribution unpacked, as the Solaris tar cannot handle long file + names. This means that you may see errors when you try to unpack + MySQL. + + If this occurs, 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. + + You can install MySQL on Solaris using a binary package in PKG + format instead of the binary tarball distribution. Before + installing using the binary PKG format, you should create the + mysql user and group, for example: +groupadd mysql +useradd -g mysql mysql + + Some basic PKG-handling commands follow: + + * To add a package: +pkgadd -d package_name.pkg + + * To remove a package: +pkgrm package_name + + * To get a full list of installed packages: +pkginfo + + * To get detailed information for a package: +pkginfo -l package_name + + * To list the files belonging to a package: +pkgchk -v package_name + + * To get packaging information for an arbitrary file: +pkgchk -l -p file_name + + For additional information about installing MySQL on Solaris, see + Section 2.13.3, "Solaris Notes." + +2.7. Installing MySQL on i5/OS + + The i5/OS POWER MySQL package was created in cooperation with IBM. + MySQL works within the Portable Application Solution Environment + (PASE) on the System i series of hardware and will also provide + database services for the Zend Core for i5/OS. + + MySQL for i5/OS is provided as a save file (.savf) package that + can be downloaded and installed directly without any additional + installation steps required. + + MySQL is only supported on i5/OS V5R4 or later releases. The i5/OS + PASE must be installed for MySQL to operate. You must be able to + login as a user in *SECOFR class. + + You should the installation notes and tips for i5/OS before + starting installation. See i5/OS Installation Notes. + +Note + + The installation package will use an existing configuration if you + have previously installed MySQL (which is identified by looking + for the file /etc/my.cnf). The values for the data directory + (DATADIR) and owner of the MySQL files (USRPRF) specified during + the installation will be ignored, and the values determined from + the /etc/my.cnf will be used instead. + + If you want to change these parameters during a new install, you + should temporarily rename /etc/my.cnf, install MySQL using the new + parameters you want to use, and then merge your previous + /etc/my.cnf configuration settings with the new /etc/my.cnf file + that is created during installation. + + To install MySQL on i5/OS, follow these steps: + + 1. Create a user profile MYSQL. The MYSQL user profile will own + all the MySQL files and databases and be the active user used + when the MySQL server is running. The profile should be + disabled so that you cannot log in as the MySQL user. To + create a user profile, use CRTUSRPRF: +CRTUSRPRF USRPRF(MYSQL) STATUS(*DISABLED) TEXT('MySQL user id') + + 2. On the System i machine, create a save file that will be used + to receive the downloaded installation save file. The file + should be located within the General Purpose Library (QGPL): +CRTSAVF FILE(QGPL/MYSQLINST) + + 3. Download the MySQL installation save file in 32-bit + (mysql-5.0.42-i5os-power-32bit.savf) or 64-bit + (mysql-5.0.42-i5os-power-64bit.savf) from MySQL Downloads + (http://dev.mysql.com/downloads). + + 4. You need to FTP the downloaded .savf file directly into the + QGPL/MYSQLINST file on the System i server. You can do this + through FTP using the following steps after logging in to the + System i machine: +ftp> bin +ftp> cd qgpl +ftp> put mysql-5.0.42-i5os-power.savf mysqlinst + + 5. Log into the System i server using a user in the *SECOFR + class, such as the QSECOFR user ID. + + 6. You need to restore the installation library stored in the + .savf save file: +RSTLIB MYSQLINST DEV(*SAVF) SAVF(QGPL/MYSQLINST) + + 7. You need to execute the installation command, + MYSQLINST/INSMYSQL. You can specify three parameter settings + during installation: + + + DIR('/opt/mysql') sets the installation location for the + MySQL files. The directory will be created if it does not + already exist. + + + DATADIR('/QOpenSys/mysal/data') sets the location of the + directory that will be used to store the database files + and binary logs. The default setting is + /QOpenSys/mysql/data. Note that if the installer detects + an existing installation (due to the existence of + /etc/my.cnf), then this parameter will be ignored. + + + USRPRF(MYSQL) sets the user profile that will own the + files that are installed. The profile will be created if + it does not already exist. + MySQL can be installed anywhere, for this example we will + assume MySQL has been installed into /opt/mysql. The MYSQL + user profile that was created earlier in this sequence should + be used for the profile: +MYSQLINST/INSMYSQL DIR('/opt/mysql') DATADIR('/opt/mysqldata') USRPRF +(MYSQL) + If you are updating an installation over an existing MySQL + installation, you should use the same parameter values that + were used when MySQL was originally installed. + The installation copies all the necessary files into a + directory matching the package version (for example + mysql-5.0.42-i5os-power-32bit), sets the ownership on those + files, sets up the MySQL environment and creates the MySQL + configuration file (in /etc/my.cnf) completing all the steps + in a typical binary installation process automatically. If + this is a new installation of MySQL, or if the installer + detects that this is a new version (because the /etc/my.cnf + file does not exist), then the initial core MySQL databases + will also be created during installation. + + 8. Once the installation has completed, you can delete the + installation file: +DLTLIB LIB(MYSQLINST) + + To start MySQL: + + 1. Log into the System i server using a user within the *SECOFR + class, such as the QSECOFR user ID. + +Note + You should start mysqld_safe using a user that in the PASE + environment has the id=0 (the equivalent of the standard Unix + root user). If you do not use a user with this ID then the + system will be unable to change the user when executing mysqld + as set using --user option. If this happens, mysqld may be + unable to read the files located within the MySQL data + directory and the execution will fail. + + 2. Enter the PASE environment using call qp2term. + + 3. Start the MySQL server by changing to the installation + directory and running mysqld_safe, specifying the user name + used to install the server. The installer conveniently + installs a symbolic link to the installation directory + (mysql-5.0.42-i5os-power-32bit) as /opt/mysql/mysql: +> cd /opt/mysql/mysql +> bin/mysqld_safe --user=mysql & + You should see a message similar to the following: +Starting mysqld daemon with databases » + from /opt/mysql/mysql-enterprise-5.0.42-i5os-power-32bit/data + + If you are having problems starting MySQL server, see Section + 2.11.2.3, "Starting and Troubleshooting the MySQL Server." + + To stop MySQL: + + 1. Log into the System i server using the *SECOFR class, such as + the QSECOFR user ID. + + 2. Enter the PASE environment using call qp2term. + + 3. Stop the MySQL server by changing into the installation + directory and running mysqladmin, specifying the user name + used to install the server: +> cd /opt/mysql/mysql +> bin/mysqladmin -u root shutdown + If the session that you started and stopped MySQL are the + same, you may get the log output from mysqld: + STOPPING server from pid file » + /opt/mysql/mysql-enterprise-5.0.42-i5os-power-32bit/data/I5DBX.R +CHLAND.IBM.COM.pid + 070718 10:34:20 mysqld ended + If the sessions used to start and stop MySQL are different, + you will not receive any confirmation of the shutdown. + + Note and tips + + * A problem has been identified with the installation process on + DBCS systems. If you are having problems install MySQL on a + DBCS system, you need to change your job's coded character set + identifier (CSSID) to 37 (EBCDIC) before executing the install + command, INSMYSQL. To do this, determine your existing CSSID + (using DSPJOB and selecting option 2), execute CHGJOB + CSSID(37), run INSMYSQL to install MySQL and then execute + CHGJOB again with your original CSSID. + + * If you want to use the Perl scripts that are included with + MySQL, you need to download the iSeries Tools for Developers + (5799-PTL). See + http://www-03.ibm.com/servers/enable/site/porting/tools/. + +2.8. Installing MySQL on NetWare + + Porting MySQL to NetWare was an effort spearheaded by Novell. + Novell customers should 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." + + To host MySQL, the NetWare server must meet these requirements: + + * The latest Support Pack of NetWare 6.5 + (http://support.novell.com/filefinder/18197/index.html) must + be installed. + + * The system must meet Novell's minimum requirements to run the + respective version of NetWare. + + * MySQL data and the program binaries must be installed on an + NSS volume; traditional volumes are not supported. + + To install MySQL for NetWare, use the following procedure: + + 1. If you are upgrading from a prior installation, stop the MySQL + server. This is done from the server console, using the + following command: +SERVER: mysqladmin -u root shutdown + +Note + If the MySQL root user account has a password, you need to + invoke mysqladmin with the -p option and supply the password + when prompted. + + 2. Log on to the target server from a client machine with access + to the location where you are installing MySQL. + + 3. Extract the binary package Zip file onto the server. Be sure + to allow the paths in the Zip file to be used. It is safe to + simply extract the file to SYS:\. + If you are upgrading from a prior installation, you may need + to copy the data directory (for example, SYS:MYSQL\DATA), as + well as my.cnf, if you have customized it. You can then delete + the old copy of MySQL. + + 4. You might want to rename the directory to something more + consistent and easy to use. The examples in this manual use + SYS:MYSQL to refer to the installation directory. + Note that MySQL installation on NetWare does not detect if a + version of MySQL is already installed outside the NetWare + release. Therefore, if you have installed the latest MySQL + version from the Web (for example, MySQL 4.1 or later) in + SYS:\MYSQL, you must rename the folder before upgrading the + NetWare server; otherwise, files in SYS:\MySQL are overwritten + by the MySQL version present in NetWare Support Pack. + + 5. At the server console, add a search path for the directory + containing the MySQL NLMs. For example: +SERVER: SEARCH ADD SYS:MYSQL\BIN + + 6. Initialize the data directory and the grant tables, if + necessary, by executing mysql_install_db at the server + console. + + 7. Start the MySQL server using mysqld_safe at the server + console. + + 8. To finish the installation, you should also add the following + commands to 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 5.1.x database server +SEARCH ADD SYS:MYSQL\BIN +MYSQLD_SAFE + If 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 5.1.x database server +SEARCH ADD SYS:MYSQL\BIN +MYSQLD_SAFE --skip-external-locking + It is also 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. Note that + the use of MySQL on Netware 6.0 is not officially supported. + mysqld_safe on NetWare provides a screen presence. When you + unload (shut down) the mysqld_safe NLM, the screen does not go + away by default. 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 5.1.x database server +SEARCH ADD SYS:MYSQL\BIN +MYSQLD_SAFE --autoclose + The behavior of mysqld_safe on NetWare is described further in + Section 4.3.2, "mysqld_safe --- MySQL Server Startup Script." + + 9. When installing MySQL, either for the first time or upgrading + from a previous version, download and install the latest and + appropriate Perl module and PHP extensions for NetWare: + + + Perl: + http://forge.novell.com/modules/xfcontent/downloads.php/p + erl/Modules/ + + + PHP: + http://forge.novell.com/modules/xfcontent/downloads.php/p + hp/Modules/ + + If there was an existing installation of MySQL on the NetWare + 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.11, + "Post-Installation Setup and Testing." + +2.9. Installing MySQL from tar.gz Packages on Other Unix-Like Systems + + 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.4, + "MySQL Binaries Compiled by Sun Microsystems, Inc.," 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, + 5.1.35), and OS indicates the type of operating system for which + the distribution is intended (for example, pc-linux-i686). + + 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: + + * GNU gunzip to uncompress the distribution. + + * A reasonable tar to unpack the distribution. GNU tar is known + to work. Some operating systems come with a preinstalled + version of tar that is known to have problems. For example, + the tar provided with early versions of Mac OS X, SunOS 4.x + and Solaris 8 and earlier are known to have problems with long + file names. On Mac OS X, you can use the preinstalled gnutar + program. On other systems with a deficient tar, you should + install GNU tar first. + + If you run into problems and need to file a bug report, please use + the instructions in Section 1.6, "How to Report Bugs or Problems." + + The basic commands that 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> chown -R mysql . +shell> chgrp -R mysql . +shell> scripts/mysql_install_db --user=mysql +shell> chown -R root . +shell> chown -R mysql data +shell> bin/mysqld_safe --user=mysql & + +Note + + This procedure does not set up any passwords for MySQL accounts. + After following the procedure, proceed to Section 2.11, + "Post-Installation Setup and Testing." + + A more detailed version of the preceding description for + installing a binary distribution follows: + + 1. Add a login user and group for mysqld to run as: +shell> groupadd mysql +shell> useradd -g mysql mysql + These commands add the mysql group and the mysql user. The + syntax for useradd and groupadd may differ slightly on + different versions of Unix, or they may have different names + such as 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. + + 2. Pick the directory under which you want to unpack the + distribution and change location into it. In the following + example, we unpack the distribution under /usr/local. (The + instructions, therefore, assume that you have permission to + create files and directories in /usr/local. If that directory + is protected, you must perform the installation as root.) +shell> cd /usr/local + + 3. Obtain a distribution file using the instructions in Section + 2.1.3, "How to Get MySQL." For a given release, binary + distributions for all platforms are built from the same MySQL + source distribution. + + 4. Unpack the distribution, which creates the installation + directory. Then create a symbolic link to that directory: +shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf - +shell> ln -s full-path-to-mysql-VERSION-OS mysql + The 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 + + 5. Change location into the installation directory: +shell> cd mysql + You will find several files and subdirectories in the mysql + directory. The most important for installation purposes are + the bin and scripts subdirectories: + + + The bin directory contains client programs and the + server. You should add the full path name of this + directory to your PATH environment variable so that your + shell finds the MySQL programs properly. See Section + 2.14, "Environment Variables." + + + The scripts directory contains the mysql_install_db + script used to initialize the mysql database containing + the grant tables that store the server access + permissions. + + 6. Ensure that the distribution contents are accessible to mysql. + If you unpacked the distribution as mysql, no further action + is required. If you unpacked the distribution as root, its + contents will be owned by root. Change its ownership to mysql + by executing the following commands as root in the + installation directory: +shell> chown -R mysql . +shell> chgrp -R mysql . + The first command changes the owner attribute of the files to + the mysql user. The second changes the group attribute to the + mysql group. + + 7. If you have not installed MySQL before, you must create the + MySQL data directory and initialize the grant tables: +shell> scripts/mysql_install_db --user=mysql + If you run the command as root, include the --user option as + shown. If you run the command while logged in as that user, + you can omit the --user option. + The command should create the data directory and its contents + with mysql as the owner. + After creating or updating the grant tables, you need to + restart the server manually. + + 8. Most of the MySQL installation can be owned by root if you + like. The exception is that the data directory must be owned + by mysql. To accomplish this, run the following commands as + root in the installation directory: +shell> chown -R root . +shell> chown -R mysql data + + 9. If you want MySQL to start automatically when you boot your + machine, you can copy 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.11.2.2, "Starting and Stopping + MySQL Automatically." + 10. You can set up new accounts using the bin/mysql_setpermission + script if you install the DBI and DBD::mysql Perl modules. See + Section 4.6.14, "mysql_setpermission --- Interactively Set + Permissions in Grant Tables." For Perl module installation + instructions, see Section 2.15, "Perl Installation Notes." + 11. If you would like to use mysqlaccess and have the MySQL + distribution in some non-standard location, 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 executable + Change the path to reflect the location where mysql actually + is stored on your system. If you do not do this, a Broken pipe + error will occur when you run mysqlaccess. + + After everything has been unpacked and installed, you should test + your distribution. To start the MySQL server, use the following + command: +shell> bin/mysqld_safe --user=mysql & + + If you run the command as root, you must use the --user option as + shown. The value of the option is 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 mysql, you can omit the + --user option. + + If the 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 4.3.2, + "mysqld_safe --- MySQL 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.11, + "Post-Installation Setup and Testing." + +2.10. MySQL Installation Using a Source Distribution + + Before you proceed with an installation from source, first check + whether our binary is available for your platform and whether it + works for you. We put a great deal of effort into ensuring 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." If you want to build MySQL from source on Windows, see + Section 2.10.6, "Installing MySQL from Source on Windows." + + 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.1.35. + + You need the following tools to build and install MySQL from + source: + + * GNU gunzip to uncompress the distribution. + + * A reasonable tar to unpack the distribution. GNU tar is known + to work. Some operating systems come with a preinstalled + version of tar that is known to have problems. For example, + the tar provided with early versions of Mac OS X, SunOS 4.x + and Solaris 8 and earlier are known to have problems with long + file names. On Mac OS X, you can use the preinstalled gnutar + program. On other systems with a deficient tar, you should + install GNU tar first. + + * A working ANSI C++ compiler. gcc 2.95.2 or later, 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 newer compiler exists for the platform. gcc + 2.95.2 or later is recommended. + + * A good make program. GNU make is always recommended and is + sometimes required. (BSD make fails, and vendor-provided make + implementations may fail as well.) If you have problems, we + recommend GNU make 3.75 or newer. + + * libtool 1.5.24 or later is also recommended. + + 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 gives you a fast and stable binary. + + If you run into problems and need to file a bug report, please use + the instructions in Section 1.6, "How to Report Bugs or Problems." + +2.10.1. Source Installation Overview + + The basic commands that 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> chown -R mysql . +shell> chgrp -R mysql . +shell> bin/mysql_install_db --user=mysql +shell> chown -R root . +shell> chown -R mysql var +shell> bin/mysqld_safe --user=mysql & + + If you start from a source RPM, do the following: +shell> rpmbuild --rebuild --clean MySQL-VERSION.src.rpm + + This makes a binary RPM that you can install. For older versions + of RPM, you may have to replace the command rpmbuild with rpm + instead. + +Note + + This procedure does not set up any passwords for MySQL accounts. + After following the procedure, proceed to Section 2.11, + "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: + + 1. Add a login user and group for mysqld to run as: +shell> groupadd mysql +shell> useradd -g mysql mysql + These commands add the mysql group and the mysql user. The + syntax for useradd and groupadd may differ slightly on + different versions of Unix, or they may have different names + such as 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. + + 2. Perform the following steps as the mysql user, except as + noted. + + 3. Pick the directory under which you want to unpack the + distribution and change location into it. + + 4. Obtain a distribution file using the instructions in Section + 2.1.3, "How to Get MySQL." + + 5. Unpack the distribution into the current directory: +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 + + 6. Change location into the top-level directory of the unpacked + distribution: +shell> cd mysql-VERSION + Note that currently you must configure and build MySQL from + this top-level directory. You cannot build it in a different + directory. + + 7. Configure the release and compile everything: +shell> ./configure --prefix=/usr/local/mysql +shell> make + When you run configure, you might want to specify other + options. Run ./configure --help for a list of options. Section + 2.10.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. To file a bug report, please use the instructions + in Section 1.6, "How to Report Bugs or Problems." + If the compile fails, see Section 2.10.4, "Dealing with + Problems Compiling MySQL," for help. + + 8. Install the distribution: +shell> make install + You might need to run this command as root. + If 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.cnf + You might need to run this command 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.2.3.2, "Using Option + Files," and Section 13.6.2, "InnoDB Configuration." + + 9. Change location into the installation directory: +shell> cd /usr/local/mysql + 10. If you ran the make install command as root, the installed + files will be owned by root. Ensure that the installation is + accessible to mysql by executing the following commands as + root in the installation directory: +shell> chown -R mysql . +shell> chgrp -R mysql . + The first command changes the owner attribute of the files to + the mysql user. The second changes the group attribute to the + mysql group. + 11. If you have not installed MySQL before, you must create the + MySQL data directory and initialize the grant tables: +shell> bin/mysql_install_db --user=mysql + If you run the command as root, include the --user option as + shown. If you run the command while logged in as mysql, you + can omit the --user option. + The command should create the data directory and its contents + with mysql as the owner. + After using mysql_install_db to create the grant tables for + MySQL, you must restart the server manually. The mysqld_safe + command to do this is shown in a later step. + 12. Most of the MySQL installation can be owned by root if you + like. The exception is that the data directory must be owned + by mysql. To accomplish this, run the following commands as + root in the installation directory: +shell> chown -R root . +shell> chown -R mysql var + 13. If you want MySQL to start automatically when you boot your + machine, you can copy 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; see also Section 2.11.2.2, "Starting and + Stopping MySQL Automatically." + 14. You can set up new accounts using the bin/mysql_setpermission + script if you install the DBI and DBD::mysql Perl modules. See + Section 4.6.14, "mysql_setpermission --- Interactively Set + Permissions in Grant Tables." For Perl module installation + instructions, see Section 2.15, "Perl Installation Notes." + + After everything has been installed, you should test your + distribution. To start the MySQL server, use the following + command: +shell> /usr/local/mysql/bin/mysqld_safe --user=mysql & + + If you run the command as root, you should use the --user option + as shown. The value of the option is 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. + + If the 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 4.3.2, + "mysqld_safe --- MySQL 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.11, + "Post-Installation Setup and Testing." + +2.10.2. Typical 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 2.14, + "Environment Variables." For a full list of options supported by + configure, run this command: +shell> ./configure --help + + A list of the available configure options is provided in the table + below. + + Table 2.1. Build (configure) Reference + Formats Description Default Introduced Removed + --bindir=DIR User executables EPREFIX/bin + --build=BUILD Configure for building on BUILD guessed + --cache-file=FILE Cache test results in FILE disabled + -C Alias for `--cache-file=config.cache' + --config-cache + --datadir=DIR Read-only architecture-independent data PREFIX/share + + --disable-FEATURE Do not include FEATURE + --disable-dependency-tracking Disable dependency tracking + --disable-grant-options Disable GRANT options + --disable-largefile Omit support for large files + --disable-libtool-lock Disable libtool lock + --disable-thread-safe-client Compile the client without threads + 5.1.7 + --enable-FEATURE Enable FEATURE + --enable-assembler Use assembler versions of some string functions + if available + --enable-dependency-tracking Do not reject slow dependency + extractors + --enable-fast-install Optimize for fast installation yes + --enable-local-infile Enable LOAD DATA LOCAL INFILE disabled + --enable-shared Build shared libraries yes + --enable-static Build static libraries yes + --enable-thread-safe-client Compile the client with threads + --exec-prefix=EPREFIX Install architecture-dependent files in + EPREFIX + -h Display this help and exit + --help + --help=short Display options specific to this package + --help=recursive Display the short help of all the included + packages + --host=HOST Cross-compile to build programs to run on HOST + --includedir=DIR C header files PREFIX/include + --infodir=DIR Info documentation PREFIX/info + --libdir=DIR Object code libraries EPREFIX/lib + --libexecdir=DIR Program executables EPREFIX/libexec + --localstatedir=DIR Modifiable single-machine data PREFIX/var + --mandir=DIR man documentation PREFIX/man + -n Do not create output files + --no-create + --oldincludedir=DIR C header files for non-gcc /usr/include + --prefix=PREFIX Install architecture-independent files in PREFIX + + --program-prefix=PREFIX Prepend PREFIX to installed program names + + --program-suffix=SUFFIX Append SUFFIX to installed program names + + --program-transform-name=PROGRAM run sed PROGRAM on installed + program names + -q Do not print `checking...' messages + --quiet + --sbindir=DIR System admin executables EPREFIX/sbin + --sharedstatedir=DIR Modifiable architecture-independent data + PREFIX/com + --srcdir=DIR Find the sources in DIR configure directory or .. + --sysconfdir=DIR Read-only single-machine data PREFIX/etc + --target=TARGET Configure for building compilers for TARGET + -V Display version information and exit + --version + --with-PACKAGE Use PACKAGE + --with-archive-storage-engine Enable the Archive Storage Engine no + + --with-atomic-ops Implement atomic operations using pthread + rwlocks or atomic CPU instructions for multi-processor 5.1.12 + --with-berkeley-db Use BerkeleyDB located in DIR no + --with-berkeley-db-includes Find Berkeley DB headers in DIR + --with-berkeley-db-libs Find Berkeley DB libraries in DIR + --with-big-tables Support tables with more than 4 G rows even on + 32 bit platforms + --with-blackhole-storage-engine Enable the Blackhole Storage + Engine no + --with-charset Default character set + --with-client-ldflags Extra linking arguments for clients + --with-collation Default collation + --with-comment Comment about compilation environment + --with-csv-storage-engine Enable the CSV Storage Engine yes + --with-darwin-mwcc Use Metrowerks CodeWarrior wrappers on OS + X/Darwin + --with-debug Add debug code 5.1.7 + --with-debug=full Add debug code (adds memory checker, very slow) + + --with-embedded-privilege-control Build parts to check user's + privileges (only affects embedded library) + --with-embedded-server Build the embedded server + --with-error-inject Enable error injection in MySQL Server + 5.1.11 + --with-example-storage-engine Enable the Example Storage Engine no + + --with-extra-charsets Use charsets in addition to default + --with-fast-mutexes Compile with fast mutexes enabled 5.1.5 + --with-federated-storage-engine Enable federated storage engine no + 5.1.3 5.1.9 + --with-gnu-ld Assume the C compiler uses GNU ld no + --with-innodb Enable innobase storage engine no 5.1.3 5.1.9 + --with-lib-ccflags Extra CC options for libraries + --with-libwrap=DIR Compile in libwrap (tcp_wrappers) support + --with-low-memory Try to use less memory to compile to avoid + memory limitations + --with-machine-type Set the machine type, like "powerpc" + --with-max-indexes=N Sets the maximum number of indexes per table + 64 + --with-mysqld-ldflags Extra linking arguments for mysqld + --with-mysqld-libs Extra libraries to link with for mysqld + --with-mysqld-user What user the mysqld daemon shall be run as + + --with-mysqlmanager Build the mysqlmanager binary Build if server + is built + --with-named-curses-libs Use specified curses libraries + --with-named-thread-libs Use specified thread libraries + --with-ndb-ccflags Extra CC options for ndb compile + --with-ndb-docs Include the NDB Cluster ndbapi and mgmapi + documentation + --with-ndb-port Port for NDB Cluster management server + --with-ndb-port-base Port for NDB Cluster management server + --with-ndb-sci=DIR Provide MySQL with a custom location of sci + library + --with-ndb-test Include the NDB Cluster ndbapi test programs + --with-ndbcluster Include the NDB Cluster table handler no + --with-openssl=DIR Include the OpenSSL support + --with-openssl-includes Find OpenSSL headers in DIR + --with-openssl-libs Find OpenSSL libraries in DIR + --with-other-libc=DIR Link against libc and other standard + libraries installed in the specified non-standard location + --with-pic Try to use only PIC/non-PIC objects Use both + --with-plugin-PLUGIN Forces the named plugin to be linked into + mysqld statically 5.1.11 + --with-plugins Plugins to include in mysqld none 5.1.11 + --with-pstack Use the pstack backtrace library + --with-pthread Force use of pthread library + --with-row-based-replication Include row-based replication 5.1.5 + 5.1.6 + --with-server-suffix Append value to the version string + --with-ssl=DIR Include SSL support 5.1.11 + --with-system-type Set the system type, like "sun-solaris10" + --with-tags Include additional configurations automatic + --with-tcp-port Which port to use for MySQL services 3306 + --with-unix-socket-path Where to put the unix-domain socket + --with-yassl Include the yaSSL support + --with-zlib-dir=no|bundled|DIR Provide MySQL with a custom + location of compression library + --without-PACKAGE Do not use PACKAGE + --without-bench Skip building of the benchmark suite + --without-debug Build a production version without debugging code + + --without-docs Skip building of the documentation + --without-extra-tools Skip building utilities in the tools + directory + --without-geometry Do not build geometry-related parts + --without-libedit Use system libedit instead of bundled copy + --without-man Skip building of the man pages + --without-ndb-binlog Disable ndb binlog 5.1.6 + --without-ndb-debug Disable special ndb debug features + --without-plugin-PLUGIN Exclude PLUGIN 5.1.11 + --without-query-cache Do not build query cache + --without-readline Use system readline instead of bundled copy + + --without-row-based-replication Don't include row-based + replication 5.1.7 5.1.14 + --without-server Only build the client + --without-uca Skip building of the national Unicode collations + + Some of the configure options available are described here. For + options that may be of use if you have difficulties building + MySQL, see Section 2.10.4, "Dealing with Problems Compiling + MySQL." + + * To compile just the MySQL client libraries and client programs + and not the server, use the --without-server option: +shell> ./configure --without-server + If you have no C++ compiler, some client programs such as + mysql cannot be compiled because they require 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 should still try to + build all clients, but you can ignore any warnings about files + such as mysql.cc. (If make stops, try make -k to tell it to + continue with the rest of the build even if errors occur.) + + * If you want to build the embedded MySQL library (libmysqld.a), + use the --with-embedded-server option. + + * If you don't want your log files and database directories + located under /usr/local/var, use a configure command + something like one of these: +shell> ./configure --prefix=/usr/local/mysql +shell> ./configure --prefix=/usr/local \ + --localstatedir=/usr/local/mysql/data + The 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. + You can also specify the installation directory and data + directory locations at server startup time by using the + --basedir and --datadir options. These can be given on the + command line or in an MySQL option file, although it is more + common to use an option file. See Section 4.2.3.2, "Using + Option Files." + + * If you are using Unix and you want the MySQL socket file + location to be somewhere other than the default location + (normally in the directory /tmp or /var/run), use a configure + command like this: +shell> ./configure \ + --with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock + The socket file name must be an absolute path name. You can + also change the location of mysql.sock at server startup by + using a MySQL option file. See Section B.1.4.5, "How to + Protect or Change the MySQL Unix Socket File." + + * If you want to compile statically linked programs (for + example, to make a binary distribution, to get better + performance, or to work around problems with some Red Hat + Linux distributions), run configure like this: +shell> ./configure --with-client-ldflags=-all-static \ + --with-mysqld-ldflags=-all-static + + * If you are using 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 ./configure + When you use gcc as your C++ compiler, it does not attempt to + link in libg++ or libstdc++. This may be a good thing to do + even if you have those libraries installed. 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" + + + 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" + In most cases, you can get a reasonably optimized MySQL binary + by using the options from the preceding list and adding the + following options to the configure line: +--prefix=/usr/local/mysql --enable-assembler \ +--with-mysqld-ldflags=-all-static + The 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-static + The binaries we provide on the MySQL Web site at + http://dev.mysql.com/downloads/ are all compiled with full + optimization and should be perfect for most users. See Section + 2.1.2.4, "MySQL Binaries Compiled by Sun Microsystems, Inc.." + There are some configuration settings you can tweak to build + an even faster binary, but these are only for advanced users. + See Section 7.5.6, "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.N (where N is a version number), you can + work around this problem by giving the --disable-shared option + to configure. In this case, configure does not build a shared + libmysqlclient.so.N library. + + * By default, MySQL uses the latin1 (cp1252 West European) + character set. To change the default set, use the + --with-charset option: +shell> ./configure --with-charset=CHARSET + CHARSET may be one of binary, armscii8, ascii, big5, cp1250, + cp1251, cp1256, cp1257, cp850, cp852, cp866, cp932, dec8, + eucjpms, euckr, gb2312, gbk, geostd8, greek, hebrew, hp8, + keybcs2, koi8r, koi8u, latin1, latin2, latin5, latin7, macce, + macroman, sjis, swe7, tis620, ucs2, ujis, utf8. See Section + 9.2, "The Character Set Used for Data and Sorting." + (Additional character sets might be available. Check the + output from ./configure --help for the current list.) + The default collation may also be specified. MySQL uses the + latin1_swedish_ci collation by default. To change this, use + the --with-collation option: +shell> ./configure --with-collation=COLLATION + To 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.) + +Warning + If you change character sets after having created any tables, + you must run myisamchk -r -q --set-collation=collation_name on + every MyISAM table. Your indexes may be sorted incorrectly + otherwise. This can happen if you install MySQL, create some + tables, and 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 one of the following: + + + A list of character set names separated by spaces + + + complex to include all character sets that can't be + dynamically loaded + + + all to include all character sets into the binaries + Clients that want to convert characters between the server and + the client should use the SET NAMES statement. See Section + 5.1.4, "Session System Variables," and Section 9.1.4, + "Connection Character Sets and Collations." + + * To configure MySQL with debugging code, use the --with-debug + option: +shell> ./configure --with-debug + This causes a safe memory allocator to be included that can + find some errors and that provides output about what is + happening. See MySQL Internals: Porting + (http://forge.mysql.com/wiki/MySQL_Internals_Porting). + As of MySQL 5.1.12, using --with-debug to configure MySQL with + debugging support enables you to use the + --debug="d,parser_debug" option when you start the server. + This causes the Bison parser that is used to process SQL + statements to dump a parser trace to the server's standard + error output. Typically, this output is written to the error + log. + + * If your client programs are using threads, you must compile a + thread-safe version of the MySQL client library with the + --enable-thread-safe-client configure option. This creates a + libmysqlclient_r library with which you should link your + threaded applications. See Section 21.10.17, "How to Make a + Threaded Client." + + * Some features require that the server be built with + compression library support, such as the COMPRESS() and + UNCOMPRESS() functions, and compression of the client/server + protocol. The --with-zlib-dir=no|bundled|DIR option provides + control for compression library support. The value no + explicitly disables compression support. bundled causes the + zlib library bundled in the MySQL sources to be used. A DIR + path name specifies where to find the compression library + sources. + + * It is possible to build MySQL with large table support using + the --with-big-tables option. + This option causes the variables that store table row counts + to be declared as unsigned long long rather than unsigned + long. This enables tables to hold up to approximately + 1.844E+19 ((2^32)^2) rows rather than 2^32 (~4.295E+09) rows. + Previously it was necessary to pass -DBIG_TABLES to the + compiler manually in order to enable this feature. + + * Run configure with the --disable-grant-options option to cause + the --bootstrap, --skip-grant-tables, and --init-file options + for mysqld to be disabled. For Windows, the configure.js + script recognizes the DISABLE_GRANT_OPTIONS flag, which has + the same effect. The capability is available as of MySQL + 5.1.15. + + * This option allows MySQL Community Server features to be + enabled. Additional options may be required for individual + features, such as --enable-profiling to enable statement + profiling. This option was added in MySQL 5.1.24. It is + enabled by default as of MySQL 5.1.28; to disable it, use + --disable-community-features. + + * When given with --enable-community-features, the + --enable-profiling option enables the statement profiling + capability exposed by the SHOW PROFILE and SHOW PROFILES + statements. (See Section 12.5.5.33, "SHOW PROFILES Syntax.") + This option was added in MySQL 5.1.24. It is enabled by + default as of MySQL 5.1.28; to disable it, use + --disable-profiling. + + * See Section 2.13, "Operating System-Specific Notes," for + options that pertain to particular operating systems. + + * See Section 5.5.7.2, "Using SSL Connections," for options that + pertain to configuring MySQL to support secure (encrypted) + connections. + + * Several configure options apply to plugin selection and + building: +--with-plugins=PLUGIN[,PLUGIN]... +--with-plugins=GROUP +--with-plugin-PLUGIN +--without-plugin-PLUGIN + PLUGIN is an individual plugin name such as csv or archive. + As shorthand, GROUP is a configuration group name such as none + (select no plugins) or all (select all plugins). + You can build a plugin as static (compiled into the server) or + dynamic (built as a dynamic library that must be installed + using the INSTALL PLUGIN statement before it can be used). + Some plugins might not support static or dynamic build. + configure --help shows the following information pertaining to + plugins: + + + The plugin-related options + + + The names of all available plugins + + + For each plugin, a description of its purpose, which + build types it supports (static or dynamic), and which + plugin groups it is a part of. + --with-plugins can take a list of one or more plugin names + separated by commas, or a plugin group name. The named plugins + are configured to be built as static plugins. + --with-plugin-PLUGIN configures the given plugin to be built + as a static plugin. + --without-plugin-PLUGIN disables the given plugin from being + built. + If a plugin is named both with a --with and --without option, + the result is undefined. + For any plugin that is not explicitly selected or disabled, it + is selected to be built dynamically if it supports dynamic + build, and not built if it does not support dynamic build. + (Thus, in the case that no plugin options are given, all + plugins that support dynamic build are selected to be built as + dynamic plugins. Plugins that do not support dynamic build are + not built.) + +2.10.3. Installing from the Development Source Tree + +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). + + To obtain the most recent development source tree, you first need + to download and install Bazaar. You can obtain Bazaar from the + Bazaar VCS Website (http://bazaar-vcs.org). Bazaar is supported by + any platform that supports Python, and is therefore compatible + with any Linux, Unix, Windows or Mac OS X host. Instructions for + downloading and installing Bazaar on the different platforms are + available on the Bazaar website. + + All MySQL projects are hosted on Launchpad + (http://launchpad.net/). MySQL projects, including MySQL server, + MySQL Workbench and others are available from the Sun/MySQL + Engineering (http://launchpad.net/~mysql) page. For the + repositories related only to MySQL server, see the MySQL Server + (http://launchpad.net/mysql-server) page. + + To build under Unix/Linux, you must have the following tools + installed: + + * GNU make, available from http://www.gnu.org/software/make/. + Although some platforms come with their own make + implementations, it is highly recommended that you use GNU + make. It may already be available on your system as gmake. + + * autoconf 2.58 (or newer), available from + http://www.gnu.org/software/autoconf/. + + * automake 1.8.1, available from + http://www.gnu.org/software/automake/. + + * libtool 1.5, available from + http://www.gnu.org/software/libtool/. + + * m4, available from http://www.gnu.org/software/m4/. + + * bison, available from http://www.gnu.org/software/bison/. You + should use the latest version of bison where possible. Version + 1.75 and version 2.1 are known to work. There have been + reported problems with bison 1.875. If you experience + problems, upgrade to a later, rather than earlier, version. + Versions of bison older than 1.75 may report this error: +sql_yacc.yy:#####: fatal error: maximum table size (32767) exceeded + The maximum table size is not actually exceeded; the error is + caused by bugs in older versions of bison. + + To build under Windows you will need a copy of Microsoft Visual + C++ 2005 Express Edition, Visual Studio .Net 2003 (7.1), or Visual + Studio 2005 (8.0) compiler system. + + Once you have the necessary tools installed, you first need to + create a local branch of the MySQL source code on your machine: + + 1. To obtain a copy of the MySQL source code, you must create a + new Bazaar branch. If you do not already have a Bazaar + repository directory set up, you need to initialize a new + directory: +shell> mkdir mysql-server +shell> bzr init-repo --trees mysql-server + Once you have an initialized directory, you can branch from + the public MySQL server repositories. To create a branch of a + specific version: +shell> cd mysql-server +shell> bzr branch lp:mysql-server/5.1 mysql-5.1 + The initial download will take some time to complete, + depending on the speed of your connection. Please be patient. + Once you have downloaded the first tree, additional trees + should take significantly less time to download. + When building from the Bazaar branch, you may want to create a + copy of your active branch so that you can make configuration + and other changes without affecting the original branch + contents. You can achieve this by branching from the original + branch: +shell> bzr branch mysql-5.1 mysql-5.1-build + + Once you have the local branch, you can start to build MySQL + server from the source code. On Windows, the build process is + different from Unix/Linux. To continue building MySQL on Windows, + see Section 2.10.6, "Installing MySQL from Source on Windows." + + On Unix/Linux you need to use the autoconf system to create the + configure script so that you can configure the build environment + before building. + + 1. 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-5.1 + with the appropriate directory name. + +Note + For MySQL 5.1.12 and earlier, you must separately configure + the INNODB storage engine. You can do this by running the + following command from the main source directory: +shell> (cd storage/innobase; autoreconf --force --install) +shell> cd mysql-5.1 +shell> autoreconf --force --install +shell> ./configure # Add your favorite options here +shell> make + Or you can use BUILD/autorun.sh as a shortcut for the + following sequence of commands: +shell> aclocal; autoheader +shell> libtoolize --automake --force +shell> automake --force --add-missing; autoconf + The command line that changes directory into the + storage/innobase directory is used to configure the InnoDB + storage engine. You can omit this lines if you do not require + InnoDB support. + +Note + Beginning with MySQL 5.1, code specific to storage engines has + been moved under a storage directory. For example, InnoDB code + is now found in storage/innobase and NDBCLUSTER code is in + storage/ndb. + If you get some strange errors during this stage, verify that + you have the correct version of the libtool installed. + A collection of our standard configuration scripts is located + in the BUILD/ subdirectory. For example, 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, or use another script that may be more + appropriate. These scripts are provided on an "as-is" basis. + They are not officially maintained and their contents may + change from release to release. + + 2. When the build is done, run 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 + --with-unix-socket-path options than those used for your + production server. + + 3. Play hard with your new installation and try to make the new + features crash. Start by running make test. See Section + 22.1.2, "MySQL Test Suite." + + 4. If you have gotten to the make stage, but the distribution + does not compile, please enter the problem into our bugs + database using the instructions given in Section 1.6, "How to + Report Bugs or Problems." 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. + + 5. After initially copying the repository with bzr to obtain the + source tree, you should use pull option to periodically update + your local copy. To do this any time after you have set up the + repository, use this command: +shell> bzr pull + + 6. You can examine the changeset comments for the tree by using + the log option to bzr: +shell> bzr log + You can also browse changesets, comments, and source code + online. To browse this information for MySQL 5.1, go to + http://launchpad.net/mysql-server/. + If you see diffs or code that you have a question about, do + not hesitate to send email to the MySQL internals mailing + list. See Section 1.5.1, "MySQL Mailing Lists." Also, if you + think you have a better idea on how to do something, send an + email message to the list with a patch. + +2.10.4. Dealing with Problems Compiling MySQL + + 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.10.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: + + * If configure is run after it has previously 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. + + * Each time you run 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: + + * If you get errors such as the ones shown here when compiling + sql_yacc.cc, you probably have run out of memory or swap + space: +Internal compiler error: program cc1plus got fatal signal 11 +Out of virtual memory +Virtual memory exhausted + The 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-memory + This 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. + + * By default, 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" ./configure + This works because gcc compiles C++ source files 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++. However, we recommend that you not use libg++ + or libstdc++ with MySQL because this only increases the binary + size of mysqld without providing any benefits. Some versions + of these libraries have also caused strange problems for MySQL + users in the past. + + * If your compile fails with errors such as any of the + following, you must upgrade your version of make to GNU make: +making all in mit-pthreads +make: Fatal error in reader: Makefile, line 18: +Badly formed macro assignment + Or: +make: file `Makefile' line 18: Must be a separator (: + Or: +pthread.h: No such file or directory + Solaris and FreeBSD are known to have troublesome make + programs. + GNU make 3.75 is known to work. + + * If you want to define flags to be used by your C or C++ + compilers, do so by adding the flags to the 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 CXXFLAGS + See Section 2.1.2.4, "MySQL Binaries Compiled by Sun + Microsystems, Inc.," for a list of flag definitions that have + been found to be useful on various systems. + + * If you get errors such as those shown here when compiling + mysqld, configure did not 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 XXX + Change XXX to size_t or int, depending on your operating + system. (You must do this each time you run configure because + configure regenerates config.h.) + + * The sql_yacc.cc file is generated from sql_yacc.yy. Normally, + the build process does not need to create sql_yacc.cc because + MySQL comes with a pre-generated copy. However, if you do need + to re-create it, you might encounter this error: +"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. + + * On Debian Linux 3.0, you need to install gawk instead of the + default mawk. + + * If you need to debug mysqld or a MySQL client, run configure + with the --with-debug option, and then recompile and link your + clients with the new client library. See MySQL Internals: + Porting (http://forge.mysql.com/wiki/MySQL_Internals_Porting). + + * If you get a compilation error on Linux (for example, SuSE + Linux 8.1 or Red Hat Linux 7.3) similar to the following one, + you probably do not have g++ installed: +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 1 + By default, the configure script attempts to determine the + correct number of arguments by using g++ (the GNU C++ + compiler). This test yields incorrect results if g++ is not + installed. There are two ways to work around this problem: + + + Make sure that the GNU C++ g++ is installed. On some + Linux distributions, the required package is called gpp; + on others, it is named gcc-c++. + + + Use gcc as your C++ compiler by setting the CXX + environment variable to gcc: +export CXX="gcc" + You must run configure again after making either of those + changes. + +2.10.5. MIT-pthreads Notes + + 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.13.1, "Linux + Notes." + + If your system does not provide native thread support, you should + 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 + Community Server." + + MIT-pthreads is not part of the MySQL 5.1 source distribution. If + you require this package, you need to download it separately from + http://dev.mysql.com/Downloads/Contrib/pthreads-1_60_beta6-mysql.t + ar.gz + + After downloading, extract this source archive into the top level + of the MySQL source directory. It creates a new subdirectory named + mit-pthreads. + + * On most systems, you can force MIT-pthreads to be used by + running configure with the --with-mit-threads option: +shell> ./configure --with-mit-threads + Building in a non-source directory is not supported when using + MIT-pthreads because we want to minimize our changes to this + code. + + * The checks that determine whether to use MIT-pthreads occur + only during the part of the configuration process that deals + with the server code. If you have configured the distribution + using --without-server to build only the client code, clients + do not know whether MIT-pthreads is being used and use Unix + socket file connections by default. Because Unix socket files + do not work under MIT-pthreads on some platforms, this means + you need to use -h or --host with a value other than localhost + when you run client programs. + + * When MySQL is compiled using MIT-pthreads, system locking is + disabled by default for performance reasons. You can tell the + server to use system locking with the --external-locking + option. This is needed only if you want to be able to run two + MySQL servers against the same data files, but that is not + recommended, anyway. + + * Sometimes the pthread 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 problem is to kill the mysqld server and + restart it. This has happened to us only when we have forcibly + stopped the server and restarted it immediately. + + * With MIT-pthreads, the sleep() system call isn't interruptible + with SIGINT (break). This is noticeable only when you run + mysqladmin --sleep. You must wait for the sleep() call to + terminate before the interrupt is served and the process + stops. + + * When linking, you might receive warning messages like these + (at least on Solaris); they can be ignored: +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 + + * Some other warnings also can be ignored: +implicit declaration of function `int strtoll(...)' +implicit declaration of function `int strtoul(...)' + + * We have not been able to make readline work with MIT-pthreads. + (This is not necessary, but may be of interest to some.) + +2.10.6. Installing MySQL from Source on Windows + + These instructions describe how to build binaries from source for + MySQL 5.1 on Windows. Instructions are provided for building + binaries from a standard source distribution or from the Bazaar + tree that contains the latest development source. + +Note + + The instructions here are strictly for users who want to test + MySQL on Microsoft Windows from the latest source distribution or + from the Bazaar tree. For production use, we do 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 Sun + Microsystems, Inc. Instructions for installing binary + distributions are available in Section 2.3, "Installing MySQL on + Windows." + + To build MySQL on Windows from source, you must satisfy the + following system, compiler, and resource requirements: + + * Windows 2000, Windows XP, or newer version. + Windows Vista is supported when using Visual Studio 2005 + provided you have installed the following updates: + + + Microsoft Visual Studio 2005 Professional Edition - ENU + Service Pack 1 (KB926601) + (http://support.microsoft.com/?kbid=926601) + + + Security Update for Microsoft Visual Studio 2005 + Professional Edition - ENU (KB937061) + (http://support.microsoft.com/?kbid=937061) + + + Update for Microsoft Visual Studio 2005 Professional + Edition - ENU (KB932232) + (http://support.microsoft.com/?kbid=932232) + + * CMake, which can be downloaded from http://www.cmake.org. + After installing, modify your path to include the cmake + binary. + + * Microsoft Visual C++ 2005 Express Edition, Visual Studio .Net + 2003 (7.1), or Visual Studio 2005 (8.0) compiler system. + + * If you are using Visual C++ 2005 Express Edition, you must + also install an appropriate Platform SDK. More information and + links to downloads for various Windows platforms is available + from + http://www.microsoft.com/downloads/details.aspx?familyid=0baf2 + b35-c656-4969-ace8-e4c0c0716adb. + + * If you are compiling from a Bazaar tree or making changes to + the parser, you need bison for Windows, which can be + downloaded from + http://gnuwin32.sourceforge.net/packages/bison.htm. Download + the package labeled "Complete package, excluding sources". + After installing the package, modify your path to include the + bison binary and ensure that this binary is accessible from + Visual Studio. + + * Cygwin might be necessary if you want to run the test script + or package the compiled binaries and support files into a Zip + archive. (Cygwin is needed only to test or package the + distribution, not to build it.) Cygwin is available from + http://cygwin.com. + + * 3GB to 5GB of disk space. + + The exact system requirements can be found here: + http://msdn.microsoft.com/vstudio/Previous/2003/sysreqs/default.as + px and + http://msdn.microsoft.com/vstudio/products/sysreqs/default.aspx + + You also need a MySQL source distribution for Windows, which can + be obtained two ways: + + * Obtain a source distribution packaged by Sun Microsystems, + Inc. These are available from http://dev.mysql.com/downloads/. + + * Package a source distribution yourself from the latest Bazaar + developer source tree. For instructions on pulling the latest + source files, see Section 2.10.3, "Installing from the + Development Source Tree." + + 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.5.1, "MySQL Mailing Lists." + +2.10.6.1. Building MySQL from Source Using CMake and Visual Studio + + You can build MySQL on Windows by using a combination of cmake and + Microsoft Visual Studio .NET 2003 (7.1), Microsoft Visual Studio + 2005 (8.0) or Microsoft Visual C++ 2005 Express Edition. You must + have the appropriate Microsoft Platform SDK installed. + +Note + + To compile from the source code on Windows you must use the + standard source distribution (for example, mysql-5.0.45.tar.gz). + You build from the same distribution as used to build MySQL on + Unix, Linux and other platforms. Do not use the Windows Source + distributions as they do not contain the necessary configuration + script and other files. + + Follow this procedure to build MySQL: + + 1. If you are installing from a packaged source distribution, + create a work directory (for example, C:\workdir), and unpack + the source distribution there using WinZip or another Windows + tool that can read .zip files. This directory is the work + directory in the following instructions. + + 2. Using a command shell, navigate to the work directory and run + the following command: +C:\workdir>win\configure.js options + If you have associated the .js file extension with an + application such as a text editor, then you may need to use + the following command to force configure.js to be executed as + a script: +C:\workdir>cscript win\configure.js options + These options are available for configure.js: + + + WITH_INNOBASE_STORAGE_ENGINE: Enable the InnoDB storage + engine. + + + WITH_PARTITION_STORAGE_ENGINE: Enable user-defined + partitioning. + + + WITH_ARCHIVE_STORAGE_ENGINE: Enable the ARCHIVE storage + engine. + + + WITH_BLACKHOLE_STORAGE_ENGINE: Enable the BLACKHOLE + storage engine. + + + WITH_EXAMPLE_STORAGE_ENGINE: Enable the EXAMPLE storage + engine. + + + WITH_FEDERATED_STORAGE_ENGINE: Enable the FEDERATED + storage engine. + + + WITH_NDBCLUSTER_STORAGE_ENGINE (experimental): Enable the + NDBCLUSTER storage engine in the MySQL server; cause + binaries for the MySQL Cluster management and data node, + management client, and other programs to be built. + This option is supported only in MySQL Cluster NDB 7.0 + (NDBCLUSTER storage engine versions 6.4.0 and later) + using the MySQL Cluster sources. It cannot be used to + enable clustering support in other MySQL source trees or + distributions. + + + MYSQL_SERVER_SUFFIX=suffix: Server suffix, default none. + + + COMPILATION_COMMENT=comment: Server comment, default + "Source distribution". + + + MYSQL_TCP_PORT=port: Server port, default 3306. + + + DISABLE_GRANT_OPTIONS: Disables the --bootstrap, + --skip-grant-tables, and --init-file options for mysqld. + This option is available as of MySQL 5.1.15. + For example (type the command on one line): +C:\workdir>win\configure.js WITH_INNOBASE_STORAGE_ENGINE + WITH_PARTITION_STORAGE_ENGINE MYSQL_SERVER_SUFFIX=-pro + + 3. From the work directory, execute the win\build-vs8.bat or + win\build-vs71.bat file, depending on the version of Visual + Studio you have installed. The script invokes CMake, which + generates the mysql.sln solution file. + You can also use win\build-vs8_x64.bat to build the 64-bit + version of MySQL. However, you cannot build the 64-bit version + with Visual Studio Express Edition. You must use Visual Studio + 2005 (8.0) or higher. + + 4. From the work directory, open the generated mysql.sln file + with Visual Studio and select the proper configuration using + the Configuration menu. The menu provides Debug, Release, + RelwithDebInfo, MinRelInfo options. Then select Solution > + Build to build the solution. + Remember the configuration that you use in this step. It is + important later when you run the test script because that + script needs to know which configuration you used. + + 5. Test the server. The server built using the preceding + instructions expects that the MySQL base directory and data + directory are C:\mysql and C:\mysql\data by default. If you + want to test your server using the source tree root directory + and its data directory as the base directory and data + directory, you need to tell the server their path names. You + can either do this on the command line with the --basedir and + --datadir options, or by placing appropriate options in an + option file. (See Section 4.2.3.2, "Using Option Files.") If + you have an existing data directory elsewhere that you want to + use, you can specify its path name instead. + When the server is running in standalone fashion or as a + service based on your configuration, try to connect to it from + the mysql interactive command-line utility. + You can also run the standard test script, mysql-test-run.pl. + This script is written in Perl, so you'll need either Cygwin + or ActiveState Perl to run it. You may also need to install + the modules required by the script. To run the test script, + change location into the mysql-test directory under the work + directory, set the MTR_VS_CONFIG environment variable to the + configuration you selected earlier (or use the --vs-config + option), and invoke mysql-test-run.pl. For example (using + Cygwin and the bash shell): +shell> cd mysql-test +shell> export MTS_VS_CONFIG=debug +shell> ./mysql-test-run.pl --force --timer +shell> ./mysql-test-run.pl --force --timer --ps-protocol + + When you are satisfied that the programs you have built are + working correctly, stop the server. Now you can install the + distribution. One way to do this is to use the make_win_bin_dist + script in the scripts directory of the MySQL source distribution + (see Section 4.4.2, "make_win_bin_dist --- Package MySQL + Distribution as ZIP Archive"). This is a shell script, so you must + have Cygwin installed if you want to use it. It creates a Zip + archive of the built executables and support files that you can + unpack in the location at which you want to install MySQL. + + It is also possible to install MySQL by copying directories and + files directly: + + 1. Create the directories where you want to install MySQL. For + example, to install into C:\mysql, use these commands: +C:\> mkdir C:\mysql +C:\> mkdir C:\mysql\bin +C:\> mkdir C:\mysql\data +C:\> mkdir C:\mysql\share +C:\> mkdir C:\mysql\scripts + If 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\opt + If you want to benchmark MySQL, create this directory: +C:\> mkdir C:\mysql\sql-bench + Benchmarking requires Perl support. See Section 2.15, "Perl + Installation Notes." + + 2. From the work directory, copy into the 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.ex +e +C:\workdir> xcopy scripts\*.* C:\mysql\scripts /E +C:\workdir> xcopy share\*.* C:\mysql\share /E + If 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\include + If you want to benchmark MySQL, you should also do this: +C:\workdir> xcopy sql-bench\*.* C:\mysql\bench /E + + After installation, set up and start the server in the same way as + for binary Windows distributions. See Section 2.3, "Installing + MySQL on Windows." + +2.10.7. Compiling MySQL Clients on Windows + + 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. + +2.11. Post-Installation Setup and Testing + + After installing MySQL, there are some issues that 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. Optionally, you + can create time zone tables to enable recognition of named time + zones. + + The following sections include post-installation procedures that + are specific to Windows systems and to Unix systems. Another + section, Section 2.11.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.11.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." + +2.11.1. Windows Post-Installation Procedures + + On Windows, the data directory and the grant tables do not have to + be created. MySQL Windows distributions include the grant tables + with a set of preinitialized accounts in the mysql database under + the data directory. It is unnecessary to run the mysql_install_db + script that is used on Unix. Regarding passwords, if you installed + MySQL using the Windows Installation Wizard, you may have already + assigned passwords to the accounts. (See Section 2.3.3, "Using the + MySQL Installation Wizard.") Otherwise, use the + password-assignment procedure given in Section 2.11.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 that the server is + running (see Section 2.3.9, "Starting the Server for the First + Time"), and 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 | ++--------------------+ +| information_schema | +| mysql | +| test | ++--------------------+ + +C:\> C:\mysql\bin\mysqlshow mysql +Database: mysql ++---------------------------+ +| Tables | ++---------------------------+ +| columns_priv | +| db | +| event | +| func | +| general_log | +| help_category | +| help_keyword | +| help_relation | +| help_topic | +| host | +| plugin | +| proc | +| procs_priv | +| servers | +| slow_log | +| tables_priv | +| time_zone | +| time_zone_leap_second | +| time_zone_name | +| time_zone_transition | +| time_zone_transition_type | +| user | ++---------------------------+ + + +C:\> C:\mysql\bin\mysql -e "SELECT Host,Db,User FROM db" mysql ++------+-------+------+ +| host | db | user | ++------+-------+------+ +| % | test% | | ++------+-------+------+ + + You may need to specify a different directory from the one shown; + if you used the Windows Installation Wizard, then the default + directory is C:\Program Files\MySQL\MySQL Server 5.1, and the + mysql and mysqlshow client programs are in C:\Program + Files\MySQL\MySQL Server 5.1\bin. See Section 2.3.3, "Using the + MySQL Installation Wizard," for more information. + + If you have already secured the initial MySQL accounts, you may + need to use the -u and -p options to supply a user name and + password to the mysqlshow and mysql client programs; otherwise the + programs may fail with an error, or you may not be able to view + all databases. For example, if you have assigned the password + "secretpass" to the MySQL root account, then you can invoke + mysqlshow and mysql as shown here: +C:\> C:\mysql\bin\mysqlshow -uroot -psecretpass ++--------------------+ +| Databases | ++--------------------+ +| information_schema | +| mysql | +| test | ++--------------------+ + +C:\> C:\mysql\bin\mysqlshow -uroot -psecretpass mysql +Database: mysql ++---------------------------+ +| Tables | ++---------------------------+ +| columns_priv | +| db | +| event | +| func | +| general_log | +| help_category | +| help_keyword | +| help_relation | +| help_topic | +| host | +| plugin | +| proc | +| procs_priv | +| servers | +| slow_log | +| tables_priv | +| time_zone | +| time_zone_leap_second | +| time_zone_name | +| time_zone_transition | +| time_zone_transition_type | +| user | ++---------------------------+ + + +C:\> C:\mysql\bin\mysql -uroot -psecretpass -e "SELECT Host,Db,User F +ROM db" mysql ++------+-------+------+ +| host | db | user | ++------+-------+------+ +| % | test% | | ++------+-------+------+ + + For more information about these programs, see Section 4.5.6, + "mysqlshow --- Display Database, Table, and Column Information," + and Section 4.5.1, "mysql --- The MySQL Command-Line Tool." + + 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.3.11, "Starting MySQL as a Windows Service." + +2.11.2. Unix Post-Installation Procedures + + After installing MySQL on Unix, you need to initialize the grant + tables, start the server, and make sure that the server works + satisfactorily. 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: + + * If you install MySQL on Linux using RPM distributions, the + server RPM runs mysql_install_db. + + * If you install MySQL on Mac OS X using a PKG distribution, the + installer runs 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 previously 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.11.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.11.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. + + 1. Change location into the top-level directory of your MySQL + installation, represented here by 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. + + 2. If necessary, run the 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 for + which the installation procedure 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=mysql + It might be necessary to specify other options such as + --basedir or --datadir if mysql_install_db does not use the + correct locations for the installation directory or data + directory. For example: +shell> bin/mysql_install_db --user=mysql \ + --basedir=/opt/mysql/mysql \ + --datadir=/opt/mysql/mysql/data + The mysql_install_db script creates the server's data + directory. Under the data directory, it creates directories + for 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 and + anonymous-user accounts. The accounts have no passwords + initially. A description of their initial privileges is given + in Section 2.11.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, + including user, db, host, tables_priv, columns_priv, func, and + others. See Section 5.4, "The MySQL Access Privilege System," + for a complete listing and description of these tables. + 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 trouble with mysql_install_db at this point, see + Section 2.11.2.1, "Problems Running mysql_install_db." + + 3. Start the MySQL server: +shell> bin/mysqld_safe --user=mysql & + 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 mysqld_safe + as system root. Otherwise, you should execute the script while + logged in to the system 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 5.3.5, "How to Run MySQL as a Normal + User." + If you neglected to create the grant tables before proceeding + to this step, the following message appears 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.11.2.3, "Starting and Troubleshooting the MySQL Server." + + 4. Use 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 variables + The 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 14.12 Distrib 5.1.35, for pc-linux-gnu on i686 +... + +Server version 5.1.35 +Protocol version 10 +Connection Localhost via UNIX socket +UNIX socket /var/lib/mysql/mysql.sock +Uptime: 14 days 5 hours 5 min 21 sec + +Threads: 1 Questions: 366 Slow queries: 0 +Opens: 0 Flush tables: 1 Open tables: 19 +Queries per second avg: 0.000 + To see what else you can do with mysqladmin, invoke it with + the --help option. + + 5. Verify that you can shut down the server: +shell> bin/mysqladmin -u root shutdown + + 6. Verify that you can start the server again. Do this by using + mysqld_safe or by invoking mysqld directly. For example: +shell> bin/mysqld_safe --user=mysql --log & + If mysqld_safe fails, see Section 2.11.2.3, "Starting and + Troubleshooting the MySQL Server." + + 7. Run some simple tests to verify that you can retrieve + information from the server. The output should be similar to + what is shown here: +shell> bin/mysqlshow ++-----------+ +| Databases | ++-----------+ +| mysql | +| test | ++-----------+ + +shell> bin/mysqlshow mysql +Database: mysql ++---------------------------+ +| Tables | ++---------------------------+ +| columns_priv | +| db | +| func | +| help_category | +| help_keyword | +| help_relation | +| help_topic | +| host | +| proc | +| procs_priv | +| tables_priv | +| time_zone | +| time_zone_leap_second | +| time_zone_name | +| time_zone_transition | +| time_zone_transition_type | +| user | ++---------------------------+ + +shell> bin/mysql -e "SELECT Host,Db,User FROM db" mysql ++------+--------+------+ +| host | db | user | ++------+--------+------+ +| % | test | | +| % | test_% | | ++------+--------+------+ + + 8. There is a benchmark suite in the sql-bench directory (under + the MySQL installation directory) that you can use to compare + how MySQL performs on different platforms. The benchmark suite + is written in Perl. It requires the Perl DBI module that + provides a database-independent interface to the various + databases, and some other additional Perl modules: +DBI +DBD::mysql +Data::Dumper +Data::ShowTable + These modules can be obtained from CPAN + (http://www.cpan.org/). See also Section 2.15.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-tests + If 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. 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.tst + The expected result of the test can be found in the + ./tests/auto_increment.res file. + + 9. At this point, you should have the server running. However, + none of the initial MySQL accounts have a password, so you + should assign passwords using the instructions found in + Section 2.11.3, "Securing the Initial MySQL Accounts." + + The MySQL 5.1 installation procedure creates time zone tables in + the mysql database. However, you must populate the tables manually + using the instructions in Section 9.7, "MySQL Server Time Zone + Support." + +2.11.2.1. Problems Running mysql_install_db + + The purpose of the mysql_install_db script is to generate new + MySQL privilege tables. It does not overwrite existing MySQL + privilege tables, and it does not affect any other data. + + If you want to re-create your privilege tables, first stop the + mysqld server if it is running. Then rename the mysql directory + under the data directory to save it, and then run + mysql_install_db. Suppose that your current directory is the MySQL + installation directory and that mysql_install_db is located in the + bin directory and the data directory is named data. To rename the + mysql database and re-run mysql_install_db, use these commands. +shell> mv data/mysql data/mysql.old +shell> bin/mysql_install_db --user=mysql + + When you run mysql_install_db, you might encounter the following + problems: + + * mysql_install_db fails to install the grant tables + You may find that mysql_install_db fails to install the grant + tables and terminates after displaying the following messages: +Starting mysqld daemon with databases from XXXXXX +mysqld ended + In 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 do not understand what happened, include + the log when you post a bug report. See Section 1.6, "How to + Report Bugs or Problems." + + * There is a mysqld process running + This indicates that the server is running, in which case the + grant tables have probably been created already. If so, there + is no need to run mysql_install_db at all because it needs to + be run only once (when you install MySQL the first time). + + * Installing a second mysqld server does not work when one + server is running + This can happen when you have an existing MySQL installation, + but want to put a new installation in a different location. + For example, you might have a production installation, but you + want to create a second installation for testing purposes. + Generally the problem that occurs when you try to run a second + server is that it tries to use a network interface that is in + use by the first server. In this case, you should see one of + the following error messages: +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.6, "Running Multiple MySQL Servers on the Same Machine." + + * You do not have write access to the /tmp directory + If you do not have write access to create temporary files or a + Unix socket file in the default location (the /tmp directory), + an error occurs when you run mysql_install_db or the mysqld + server. + You can specify different locations for the temporary + directory and Unix socket file by executing these commands + prior to starting mysql_install_db or mysqld, where + some_tmp_dir is the full path name to some directory for which + you have write permission: +shell> TMPDIR=/some_tmp_dir/ +shell> MYSQL_UNIX_PORT=/some_tmp_dir/mysql.sock +shell> export TMPDIR MYSQL_UNIX_PORT + Then 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 scripts/mysql_install_db. + See Section B.1.4.5, "How to Protect or Change the MySQL Unix + Socket File," and Section 2.14, "Environment Variables." + + There are some alternatives to running the mysql_install_db script + provided in the MySQL distribution: + + * If you want the initial privileges to be different from the + standard defaults, you can modify mysql_install_db before you + run it. However, it is preferable 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 necessary GRANT and REVOKE + statements. + If you want to install MySQL on several 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_file + By doing this, you can avoid having to issue the statements + manually on each machine. + + * It is possible to re-create the grant tables completely after + they have previously been created. You might want to do this + if you're just learning how to use 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 mysql database directory. Then run the + mysql_install_db script again. + + * You can start 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 mysql + From 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. + +2.11.2.2. Starting and Stopping MySQL Automatically + + Generally, you start the mysqld server in one of these ways: + + * By invoking mysqld directly. This works on any platform. + + * By running the MySQL server as a Windows service. The service + can be set to start the server automatically when Windows + starts, or as a manual service that you start on request. For + instructions, see Section 2.3.11, "Starting MySQL as a Windows + Service." + + * By invoking mysqld_safe, which tries to determine the proper + options for mysqld and then runs it with those options. This + script is used on Unix and Unix-like systems. See Section + 4.3.2, "mysqld_safe --- MySQL Server Startup Script." + + * By invoking 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 4.3.3, "mysql.server --- MySQL Server + Startup Script." + + * On Mac OS X, you can install a separate MySQL Startup Item + package to enable the automatic startup of MySQL on system + startup. The Startup Item starts the server by invoking + mysql.server. See Section 2.5, "Installing MySQL on Mac OS X," + for details. + + The mysqld_safe and mysql.server 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 will 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 stops 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 is installed + in the /etc/init.d directory with the name mysql. You need not + install it manually. See Section 2.4, "Installing MySQL from RPM + Packages 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 file name 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] + mysqld_safe [mysqld], [server], [mysqld_safe] + mysql.server [mysqld], [mysql.server], [server] + + [mysqld-major_version] means that groups with names like + [mysqld-5.0] and [mysqld-5.1] are read by servers having versions + 5.0.x, 5.1.x, and so forth. This feature can be used to specify + options that can 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 using MySQL + 5.1. + + See Section 4.2.3.2, "Using Option Files." + +2.11.2.3. Starting and Troubleshooting the MySQL Server + + This section provides troubleshooting suggestions for problems + starting the server on Unix. If you are using Windows, see Section + 2.3.13, "Troubleshooting a MySQL Installation Under Windows." + + If you have problems starting the server, here are some things to + try: + + * Check the error log to see why the server does not start. + + * Specify any special options needed by the storage engines you + are using. + + * Make sure that the server knows where to find the data + directory. + + * Make sure that the server can access the data directory. The + ownership and permissions of the data directory and its + contents must be set such that the server can read and modify + them. + + * Verify that the network interfaces the server wants to use are + available. + + Some storage engines have options that control their behavior. You + can create a my.cnf file and specify startup options for the + engines that you plan to use. If you are going to use storage + engines that support transactional tables (InnoDB, NDB), be sure + that you have them configured the way you want before starting the + server: + + MySQL Enterprise For expert advice on start-up options appropriate + to your circumstances, subscribe to The MySQL Enterprise Monitor. + For more information, see + http://www.mysql.com/products/enterprise/advisors.html. + + * If you are using InnoDB tables, see Section 13.6.2, "InnoDB + Configuration." + + * If you are using MySQL Cluster, see Section 17.3, "MySQL + Cluster Configuration." + + Storage engines will use default option values if you specify + none, but it is recommended that you review the available options + and specify explicit values for those for which the defaults are + not appropriate for your installation. + + 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. 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 determine what + the default path settings are by invoking mysqld with the + --verbose and --help options. + + If the default locations don't match the MySQL installation layout + on your system, you can override them by specifying options to + mysqld or mysqld_safe on the command line or 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 looks 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 shows 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 + --verbose and --help must be the last options. + + 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 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 raises 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 login account that you use for running the server, change + their ownership to that account. If the account is named mysql, + use these commands: +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. + Log files are located in the data directory (typically C:\Program + Files\MySQL\MySQL Server 5.1\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. + Then examine the last few lines of these files. On Unix, you can + use tail to display them: +shell> tail host_name.err +shell> tail host_name.log + + The error log should contain information that indicates why the + server couldn't start. + + If either of the following errors occur, it means that some other + program (perhaps another mysqld server) is 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.6, "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 do not have a working + thread library and for which MySQL must be configured to use + MIT-pthreads. + + If you cannot get mysqld to start, you can try to make a trace + file to find the problem by using the --debug option. See MySQL + Internals: Porting + (http://forge.mysql.com/wiki/MySQL_Internals_Porting). + +2.11.3. Securing the Initial MySQL Accounts + + Part of the MySQL installation process is to set up the mysql + database that contains the grant tables: + + * Windows distributions contain preinitialized grant tables that + are installed automatically. + + * On Unix, the grant tables are populated by the + mysql_install_db program. Some installation methods run this + program for you. Others require that you execute it manually. + For details, see Section 2.11.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: + + * Accounts with the user name root are created. 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. + + + On Windows, one root account is created; this account + allows connecting from the local host only. The Windows + installer will optionally create an account allowing for + connections from any host only if the user selects the + Enable root access from remote machines option during + installation. + + + On Unix, both root accounts are for connections from the + local host. Connections must be made from the local host + by specifying a host name of localhost for one of the + accounts, or the actual host name or IP number for the + other. + + * Two anonymous-user accounts are created, each with an empty + user name. The anonymous accounts have no password, so anyone + can use them to connect to the MySQL server. + + + On Windows, one anonymous account is for connections from + the local host. It has no global privileges. (Before + MySQL 5.1.16, it has all global privileges, just like the + root accounts.) The other is for connections from any + host and has all privileges for the test database and for + other databases with names that start with test. + + + On Unix, both anonymous accounts are for connections from + the local host. Connections must be made from the local + host by specifying a host name of localhost for one of + the accounts, or the actual host name or IP number for + the other. These accounts have all privileges for the + test database and for 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: + + * If you want to prevent clients from connecting as anonymous + users without a password, you should either assign a password + to each anonymous account or else remove the accounts. + + * You should assign a password to each MySQL root account. + + 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 production purposes. + + Anonymous Account Password Assignment + + To assign passwords to the anonymous accounts, connect to the + server as root and then use either SET PASSWORD or UPDATE. In + either case, 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 host name 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. + + Anonymous Account Removal + + If you prefer to remove the anonymous accounts instead, do so as + follows: +shell> mysql -u root +mysql> DROP USER ''; + + The DROP 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> DROP USER ''@'localhost'; + + That account allows anonymous access but has full privileges, so + removing it improves security. + + root Account Password Assignment + + You can assign passwords to the root accounts in several ways. The + following discussion demonstrates three methods: + + * Use the SET PASSWORD statement + + * Use the mysqladmin command-line client program + + * Use the UPDATE statement + + To assign passwords using SET PASSWORD, connect to the server as + root and issue 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 host name that you used + when you assigned the anonymous account passwords. + + If the user table contains an account with User and Host values of + 'root' and '127.0.0.1', use an additional SET PASSWORD statement + to set that account's password: +mysql> SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD('newpwd'); + + 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. + + The mysqladmin method of setting the root account passwords does + not set the password for the 'root'@'127.0.0.1' account. To do so, + use SET PASSWORD as shown earlier. + + You can also use UPDATE to modify the user table directly. The + following UPDATE statement assigns a password to all root + accounts: +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, Section + B.1.4.1, "How to Reset the Root Password," covers the procedure + for resetting it. + + To set up additional accounts, you can use the GRANT statement. + For instructions, see Section 5.5.2, "Adding User Accounts." + +2.12. Upgrading or Downgrading MySQL + +2.12.1. Upgrading MySQL + + As a general rule, we recommend that when you upgrade from one + release series to another, you should go to the next series rather + than skipping a series. If you wish to upgrade from a release + series previous to MySQL 5.0, you should upgrade to each + successive release series in turn until you have reached MySQL + 5.0, and then proceed with the upgrade to MySQL 5.1. For example, + if you currently are running MySQL 4.0 and wish to upgrade to a + newer series, upgrade to MySQL 4.1 first before upgrading to 5.0, + and so forth. For information on upgrading to MySQL 5.0, see the + MySQL 5.0 Reference Manual; for earlier releases, see the MySQL + 3.23, 4.0, 4.1 Reference Manual. + + The following items form a checklist of things that you should do + whenever you perform an upgrade from MySQL 5.0 to 5.1: + + * Before any upgrade, back up your databases, including the + mysql database that contains the grant tables. + + * Read all the notes in Section 2.12.1.1, "Upgrading from MySQL + 5.0 to 5.1." These notes will enable you to identify upgrade + issues that apply to your current MySQL installation. Read + Appendix C, "MySQL Change History" as well, which provides + information about features that are new in MySQL 5.1 or differ + from those found in MySQL 5.0. + + * For any incompatibilities that require your attention before + upgrading, deal with them as described in Section 2.12.1.1, + "Upgrading from MySQL 5.0 to 5.1." + + * After you upgrade to a new version of MySQL, you should run + mysql_upgrade (see Section 4.4.8, "mysql_upgrade --- Check + Tables for MySQL Upgrade"). This program will check your + tables, and repair them if necessary. It will also update your + grant tables to make sure that they have the current structure + so that you can take advantage of any new capabilities. (Some + releases of MySQL introduce changes to the structure of the + grant tables to add new privileges or features.) + + * If you are running MySQL Server on Windows, see Section + 2.3.14, "Upgrading MySQL on Windows." + + * If you are using replication, see Section 16.3.3, "Upgrading a + Replication Setup," for information on upgrading your + replication setup. + + * If you are upgrading an installation originally produced by + installing multiple RPM packages, it is best to upgrade all + the packages, not just some. For example, if you previously + installed the server and client RPMs, do not upgrade just the + server RPM. + + * As of MySQL 5.1.9, the mysqld-max server is included in binary + distributions. There is no separate MySQL-Max distribution. As + of MySQL 5.1.12, binary distributions contain a server that + includes the features previously included in mysqld-max. + + * If you have created a user-defined function (UDF) with a given + name and upgrade MySQL to a version that implements a new + built-in function with the same name, the UDF becomes + inaccessible. To correct this, use DROP FUNCTION to drop the + UDF, and then use CREATE FUNCTION to re-create the UDF with a + different non-conflicting name. The same is true if the new + version of MySQL implements a built-in function with the same + name as an existing stored function. See Section 8.2.4, + "Function Name Parsing and Resolution," for the rules + describing how the server interprets references to different + kinds of functions. + + 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. + + 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 5.0.13 and want to upgrade to 5.1.10, + rename your current server from mysqld to mysqld-5.0.13. 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 does not + start or that you cannot connect without a password, verify that + you do not have an old my.cnf file from your previous + installation. You can check this with the --print-defaults option + (for example, mysqld --print-defaults). If this command 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 PHP mysql + extension and the Python MySQLdb module. + +2.12.1.1. Upgrading from MySQL 5.0 to 5.1 + + After upgrading a 5.0 installation to 5.0.10 or above, it is + necessary to upgrade your grant tables. Otherwise, creating stored + procedures and functions might not work. The procedure for doing + this is described in Section 4.4.8, "mysql_upgrade --- Check + Tables for MySQL Upgrade." + +Note + + It is good practice to back up your data before installing any new + version of software. Although MySQL works very hard to ensure a + high level of quality, you should protect your data by making a + backup. MySQL recommends that you dump and reload your tables from + any previous version to upgrade to 5.1. + + In general, you should do the following when upgrading from MySQL + 5.0 to 5.1: + + * Read all the items in the following sections to see whether + any of them might affect your applications: + + + Section 2.12.1, "Upgrading MySQL," has general update + information. + + + The items in the change lists found later in this section + enable you to identify upgrade issues that apply to your + current MySQL installation. + + + The MySQL 5.1 change history describes significant new + features you can use in 5.1 or that differ from those + found in MySQL 5.0. Some of these changes may result in + incompatibilities. See Section C.1, "Changes in release + 5.1.x (Production)." + + * Note particularly any changes that are marked Known issue or + Incompatible change. These incompatibilities with earlier + versions of MySQL may require your attention before you + upgrade. + Our aim is to avoid these changes, but occasionally they are + necessary to correct problems that would be worse than an + incompatibility between releases. If any upgrade issue + applicable to your installation involves an incompatibility + that requires special handling, follow the instructions given + in the incompatibility description. Often this will involve a + dump and reload, or use of a statement such as CHECK TABLE or + REPAIR TABLE. + For dump and reload instructions, see Section 2.12.4, + "Rebuilding Tables or Table Indexes." Any procedure that + involves REPAIR TABLE with the USE_FRM option must be done + before upgrading. Use of this statement with a version of + MySQL different from the one used to create the table (that + is, using it after upgrading) may damage the table. See + Section 12.5.2.6, "REPAIR TABLE Syntax." + + * After you upgrade to a new version of MySQL, run mysql_upgrade + (see Section 4.4.8, "mysql_upgrade --- Check Tables for MySQL + Upgrade"). This program will check your tables, and repair + them if necessary. It will also update your grant tables to + make sure that they have the current structure so that you can + take advantage of any new capabilities. (Some releases of + MySQL introduce changes to the structure of the grant tables + to add new privileges or features.) + + * Check Section 2.12.3, "Checking Whether Table Indexes Must Be + Rebuilt," to see whether changes to character sets or + collations were made that affect your table indexes. If so, + you will need to rebuild the affected indexes using the + instructions in Section 2.12.4, "Rebuilding Tables or Table + Indexes." + + * If you are running MySQL Server on Windows, see Section + 2.3.14, "Upgrading MySQL on Windows." + + * If you are using replication, see Section 16.3.3, "Upgrading a + Replication Setup," for information on upgrading your + replication setup. + + The following lists describe changes that may affect applications + and that you should watch out for when upgrading to MySQL 5.1. + + Configuration Changes: + + * Before MySQL 5.1.11, to build MySQL from source with SSL + support enabled, you would invoke configure with either the + --with-openssl or --with-yassl option. In MySQL 5.1.11, those + options both have been replaced by the --with-ssl option. By + default, --with-ssl causes the bundled yaSSL library to be + used. To select OpenSSL instead, give the option as + --with-ssl=path, where path is the directory where the OpenSSL + header files and libraries are located. + + Server Changes: + + * Known issue: Before MySQL 5.1.30, the CHECK TABLE ... FOR + UPGRADE statement did not check for incompatible collation + changes made in MySQL 5.1.24. (This also affects mysqlcheck + and mysql_upgrade, which cause that statement to be executed.) + Prior to the fix made in 5.1.30, a binary upgrade (performed + without dumping tables with mysqldump before the upgrade and + reloading the dump file after the upgrade) would corrupt + tables. After the fix, CHECK TABLE ... FOR UPGRADE properly + detects the problem and warns about tables that need repair. + However, the fix is not backward compatible and can result in + a downgrading problem under these circumstances: + + 1. Perform a binary upgrade to a version of MySQL that + includes the fix. + + 2. Run CHECK TABLE ... FOR UPGRADE (or mysqlcheck or + mysql_upgrade) to upgrade tables. + + 3. Perform a binary downgrade to a version of MySQL that + does not include the fix. + The solution is to dump tables with mysqldump before the + downgrade and reload the dump file after the downgrade. + Alternatively, drop and recreate affected indexes. + + * Known issue: MySQL introduces encoding for table names that + have non-ASCII characters (see Section 8.2.3, "Mapping of + Identifiers to File Names"). After a live upgrade from MySQL + 5.0 to 5.1 or higher, the server recognizes names that have + non-ASCII characters and adds a #mysql50# prefix to them. + Running mysqlcheck --all-databases --check-upgrade + --fix-db-names --fix-table-names later upgrades these names by + encoding them with the new format and removes the #mysql50# + prefix. + However, although this is done for tables, it is not done for + views prior to MySQL 5.1.23. To work around this problem, drop + each affected view and recreate it. This problem is fixed as + of MySQL 5.1.23. + To check and repair tables and to upgrade the system tables, + mysql_upgrade executes the following commands: +mysqlcheck --check-upgrade --all-databases --auto-repair +mysql_fix_privilege_tables +mysqlcheck --all-databases --check-upgrade --fix-db-names --fix-table +-names + However, prior to MySQL 5.1.31, mysql_upgrade does not run the + third command, which is necessary to re-encode database or + table names that contain non-alphanumeric characters. (They + still appear after the upgrade with the #mysql50# prefix.) If + you have such database or table names, execute the third + command manually after executing mysql_upgrade. This problem + is fixed as of MySQL 5.1.31. + + * Known issue: When upgrading from MySQL 5.0 to 5.1, running + mysqlcheck (or mysql_upgrade, which runs mysqlcheck) to + upgrade tables fails for names that must be written as quoted + identifiers. To work around this problem, rename each affected + table to a name that does not require quoting: +RENAME TABLE `tab``le_a` TO table_a; +RENAME TABLE `table b` TO table_b; + After renaming the tables, run the mysql_upgrade program. Then + rename the tables back to their original names: +RENAME TABLE table_a TO `tab``le_a`; +RENAME TABLE table_b TO `table b`; + This problem is fixed as of MySQL 5.1.23. + + * Known issue: In connection with view creation, the server + created arc directories inside database directories and + maintained useless copies of .frm files there. Creation and + renaming procedures of those copies as well as creation of arc + directories has been discontinued in MySQL 5.1.29. + This change does cause a problem when downgrading to older + server versions which manifests itself under these + circumstances: + + 1. Create a view v_orig in MySQL 5.1.29 or higher. + + 2. Rename the view to v_new and then back to v_orig. + + 3. Downgrade to an older 5.1.x server and run mysql_upgrade. + + 4. Try to rename v_orig to v_new again. This operation + fails. + As a workaround to avoid this problem, use either of these + approaches: + + + Dump your data using mysqldump before downgrading and + reload the dump file after downgrading. + + + Instead of renaming a view after the downgrade, drop it + and recreate it. + + * Known issue: Dumps performed by using mysqldump to generate a + dump file before the upgrade and reloading the file after + upgrading are subject to the following problem: + Before MySQL 5.0.40, mysqldump displays SPATIAL index + definitions using prefix lengths for the indexed columns. + These prefix lengths are accepted in MySQL 5.0, but not as of + MySQL 5.1. If you use mysqldump from versions of MySQL older + than 5.0.40, any table containing SPATIAL indexes will cause + an error when the dump file is reloaded into MySQL 5.1 or + higher. + For example, a table definition might look like this when + dumped in MySQL 5.0: +CREATE TABLE `t` ( + `g` geometry NOT NULL, + SPATIAL KEY `g` (`g`(32)) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 + The SPATIAL index definition will not be accepted in MySQL + 5.1. To work around this, edit the dump file to remove the + prefix: +CREATE TABLE `t` ( + `g` geometry NOT NULL, + SPATIAL KEY `g` (`g`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 + Dump files can be large, so it may be preferable to dump table + definitions and data separately to make it easier to edit the + definitions: +shell> mysqldump --no-data other_args > definitions.sql +shell> mysqldump --no-create-info other_args > data.sql + Then edit definitions.sql before reloading definitions.sql and + data.sql, in that order. + + * Incompatible change: From MySQL 5.1.24 to 5.1.31, the UPDATE + statement was changed such that assigning NULL to a NOT NULL + column caused an error even when strict SQL mode was not + enabled. The original behavior before MySQL 5.1.24 was that + such assignments caused an error only in strict SQL mode, and + otherwise set the column to the the implicit default value for + the column data type and generated a warning. (For information + about implicit default values, see Section 10.1.4, "Data Type + Default Values.") + The change caused compatibility problems for applications that + relied on the original behavior. It also caused replication + problems between servers that had the original behavior and + those that did not, for applications that assigned NULL to NOT + NULL columns in UPDATE statements without strict SQL mode + enabled. The change was reverted in MySQL 5.1.32 so that + UPDATE again had the original behavior. Problems can still + occur if you replicate between servers that have the modified + UPDATE behavior and those that do not. + + * Incompatible change: Character set or collation changes were + made in MySQL 5.1.21, 5.1.23, and 5.1.24 that may require + table indexes to be rebuilt. For details, see Section 2.12.3, + "Checking Whether Table Indexes Must Be Rebuilt." + + * Incompatible change: As of MySQL 5.1.29, the default binary + logging mode has been changed from MIXED to STATEMENT for + compatibility with MySQL 5.0. + + * Incompatible change: In MySQL 5.1.25, a change was made to the + way that the server handles prepared statements. This affects + prepared statements processed at the SQL level (using the + PREPARE statement) and those processed using the binary + client-server protocol (using the mysql_stmt_prepare() C API + function). + Previously, changes to metadata of tables or views referred to + in a prepared statement could cause a server crash when the + statement was next executed, or perhaps an error at execute + time with a crash occurring later. For example, this could + happen after dropping a table and recreating it with a + different definition. + Now metadata changes to tables or views referred to by + prepared statements are detected and cause automatic + repreparation of the statement when it is next executed. + Metadata changes occur for DDL statements such as those that + create, drop, alter, rename, or truncate tables, or that + analyze, optimize, or repair tables. Repreparation also occurs + after referenced tables or views are flushed from the table + definition cache, either implicitly to make room for new + entries in the cache, or explicitly due to FLUSH TABLES. + Repreparation is automatic, but to the extent that it occurs, + performance of prepared statements is diminished. + Table content changes (for example, with INSERT or UPDATE) do + not cause repreparation, nor do SELECT statements. + An incompatibility with previous versions of MySQL is that a + prepared statement may now return a different set of columns + or different column types from one execution to the next. For + example, if the prepared statement is SELECT * FROM t1, + altering t1 to contain a different number of columns causes + the next execution to return a number of columns different + from the previous execution. + Older versions of the client library cannot handle this change + in behavior. For applications that use prepared statements + with the new server, an upgrade to the new client library is + strongly recommended. + Along with this change to statement repreparation, the default + value of the table_definition_cache system variable has been + increased from 128 to 256. The purpose of this increase is to + lessen the chance that prepared statements will need + repreparation due to referred-to tables/views having been + flushed from the cache to make room for new entries. + A new status variable, Com_stmt_reprepare, has been introduced + to track the number of repreparations. + + * Incompatible change: As of MySQL 5.1.23, within a stored + routine, it is no longer allowable to declare a cursor for a + SHOW or DESCRIBE statement. This happened to work in some + instances, but is no longer supported. In many cases, a + workaround for this change is to use the cursor with a SELECT + query to read from an INFORMATION_SCHEMA table that provides + the same information as the SHOW statement. + + * Incompatible change: MySQL 5.1 implements support for a plugin + API that allows the loading and unloading of components at + runtime, without restarting the server. Section 22.2, "The + MySQL Plugin Interface." The plugin API requires the + mysql.plugin table. After upgrading from an older version of + MySQL, you should run the mysql_upgrade command to create this + table. See Section 4.4.8, "mysql_upgrade --- Check Tables for + MySQL Upgrade." + Plugins are installed in the directory named by the plugin_dir + system variable. This variable also controls the location from + which the server loads user-defined functions (UDFs), which is + a change from earlier versions of MySQL. That is, all UDF + library files now must be installed in the plugin directory. + When upgrading from an older version of MySQL, you must + migrate your UDF files to the plugin directory. + + * Incompatible change: The table_cache system variable has been + renamed to table_open_cache. Any scripts that refer to + table_cache should be updated to use the new name. + + * Incompatible change: Several issues were identified for stored + programs (stored procedures and functions, triggers, and + events) and views containing non-ASCII symbols. These issues + involved conversion errors due to incomplete character set + information when translating these objects to and from stored + format. + To address these problems, the representation for these + objects was changed in MySQL 5.1.21. However, the fixes affect + all stored programs and views. (For example, you will see + warnings about "no creation context.") To avoid warnings from + the server about the use of old definitions from any release + prior to 5.1.21, you should dump stored programs and views + with mysqldump after upgrading to 5.1.21 or higher, and then + reload them to recreate them with new definitions. Invoke + mysqldump with a --default-character-set option that names the + non-ASCII character set that was used for the definitions when + the objects were originally defined. + + * Incompatible change: As of MySQL 5.1.20, mysqld_safe supports + error logging to syslog on systems that support the logger + command. The new --syslog and --skip-syslog options can be + used instead of the --log-error option to control logging + behavior, as described in Section 4.3.2, "mysqld_safe --- + MySQL Server Startup Script." + In 5.1.21 and up, the default is --skip-syslog, which is + compatible with the default behavior of writing an error log + file for releases prior to 5.1.20. + In 5.1.20 only, the following conditions apply: 1) The default + is to use syslog, which is not compatible with releases prior + to 5.1.20. 2) Logging to syslog may fail to operate correctly + in some cases, so we recommend that you use --skip-syslog or + --log-error. To maintain the older behavior if you were using + no error-logging option, use --skip-syslog. If you were using + --log-error, continue to use it. + + * Incompatible change: As of MySQL 5.1.15, InnoDB rolls back + only the last statement on a transaction timeout. A new + option, --innodb_rollback_on_timeout, causes InnoDB to abort + and roll back the entire transaction if a transaction timeout + occurs (the same behavior as in MySQL 4.1). + + * Incompatible change: As of MySQL 5.1.15, the following + conditions apply to enabling the read_only system variable: + + + If you attempt to enable read_only while you have any + explicit locks (acquired with LOCK TABLES or have a + pending transaction, an error will occur. + + + If other clients hold explicit table locks or have + pending transactions, the attempt to enable read_only + blocks until the locks are released and the transactions + end. While the attempt to enable read_only is pending, + requests by other clients for table locks or to begin + transactions also block until read_only has been set. + + + read_only can be enabled while you hold a global read + lock (acquired with FLUSH TABLES WITH READ LOCK) because + that does not involve table locks. + Previously, the attempt to enable read_only would return + immediately even if explicit locks or transactions were + pending, so some data changes could occur for statements + executing in the server at the same time. + + * Incompatible change: The number of function names affected by + IGNORE_SPACE was reduced significantly in MySQL 5.1.13, from + about 200 to about 30. (For details about IGNORE_SPACE, see + Section 8.2.4, "Function Name Parsing and Resolution.") This + change improves the consistency of parser operation. However, + it also introduces the possibility of incompatibility for old + SQL code that relies on the following conditions: + + + IGNORE_SPACE is disabled. + + + The presence or absence of whitespace following a + function name is used to distinguish between a built-in + function and stored function that have the same name (for + example, PI() versus PI ()). + For functions that are no longer affected by IGNORE_SPACE as + of MySQL 5.1.13, that strategy no longer works. Either of the + following approaches can be used if you have code that is + subject to the preceding incompatibility: + + + If a stored function has a name that conflicts with a + built-in function, refer to the stored function with a + schema name qualifier, regardless of whether whitespace + is present. For example, write schema_name.PI() or + schema_name.PI (). + + + Alternatively, rename the stored function to use a + non-conflicting name and change invocations of the + function to use the new name. + + * Incompatible change: For utf8 columns, the full-text parser + incorrectly considered several non-word punctuation and + whitespace characters as word characters, causing some + searches to return incorrect results. The fix involves a + change to the full-text parser in MySQL 5.1.12, so as of + 5.1.12, any tables that have FULLTEXT indexes on utf8 columns + must be repaired with REPAIR TABLE: +REPAIR TABLE tbl_name QUICK; + + * Incompatible change: Storage engines can be pluggable at + runtime, so the distinction between disabled and invalid + storage engines no longer applies. As of MySQL 5.1.12, this + affects the NO_ENGINE_SUBSTITUTION SQL mode, as described in + Section 5.1.7, "Server SQL Modes." + + * Incompatible change: The structure of FULLTEXT indexes has + been changed in MySQL 5.1.6. After upgrading to MySQL 5.1.6 or + greater, use the REPAIR TABLE ... QUICK statement for each + table that contains any FULLTEXT indexes. + + * Incompatible change: In MySQL 5.1.6, when log tables were + implemented, the default log destination for the general query + and slow query log was TABLE. As of MySQL 5.1.21, this default + has been changed to FILE, which is compatible with MySQL 5.0, + but incompatible with earlier releases of MySQL 5.1 from 5.1.6 + to 5.1.20. If you are upgrading from MySQL 5.0 to this + release, no logging option changes should be necessary. + However, if you are upgrading from 5.1.6 through 5.1.20 to + this release and were using TABLE logging, use the + --log-output=TABLE option explicitly to preserve your server's + table-logging behavior. + + * Incompatible change: For ENUM columns that had enumeration + values containing commas, the commas were mapped to 0xff + internally. However, this rendered the commas + indistinguishable from true 0xff characters in the values. + This no longer occurs. However, the fix requires that you dump + and reload any tables that have ENUM columns containing true + 0xff in their values: Dump the tables using mysqldump with the + current server before upgrading from a version of MySQL 5.1 + older than 5.1.15 to version 5.1.15 or newer. + + * As of MySQL 5.1.12, the lc_time_names system variable + specifies the locale that controls the language used to + display day and month names and abbreviations. This variable + affects the output from the DATE_FORMAT(), DAYNAME() and + MONTHNAME() functions. See Section 9.8, "MySQL Server Locale + Support." + + * As of MySQL 5.1.6, special characters in database and table + identifiers are encoded when creating the corresponding + directory names and file names. This relaxes the restrictions + on the characters that can appear in identifiers. See Section + 8.2.3, "Mapping of Identifiers to File Names." To cause + database and table names to be updated to the new format + should they contain special characters, re-encode them with + mysqlcheck. The following command updates all names to the new + encoding: +shell> mysqlcheck --check-upgrade --fix-db-names --fix-table-names -- +all-databases + mysqlcheck cannot fix names that contain literal instances of + the @ character that is used for encoding special characters. + If you have databases or tables that contain this character, + use mysqldump to dump them before upgrading to MySQL 5.1.6 or + later, and then reload the dump file after upgrading. + + * As of MySQL 5.1.9, mysqld_safe no longer implicitly invokes + mysqld-max if it exists. Instead, it invokes mysqld unless a + --mysqld or --mysqld-version option is given to specify + another server explicitly. If you previously relied on the + implicit invocation of mysqld-max, you should use an + appropriate option now. + + SQL Changes: + + * Incompatible change: Multiple-table DELETE statements + containing ambiguous aliases could have unintended side + effects such as deleting rows from the wrong table. Example: +DELETE FROM t1 AS a2 USING t1 AS a1 INNER JOIN t2 AS a2; + As of MySQL 5.1.23, alias declarations can be declared only in + the table_references part. Elsewhere in the statement, alias + references are allowed but not alias declarations. Statements + containing aliases that are no longer allowed must be + rewritten. + + * Important note: Prior to MySQL 5.1.17, the parser accepted + invalid code in SQL condition handlers, leading to server + crashes or unexpected execution behavior in stored programs. + Specifically, the parser allowed a condition handler to refer + to labels for blocks that enclose the handler declaration. + This was incorrect because block label scope does not include + the code for handlers declared within the labeled block. + As of 5.1.17, the parser rejects this invalid construct, but + if you upgrade in place (without dumping and reloading your + databases), existing handlers that contain the construct still + are invalid even if they appear to function as you expect and + should be rewritten. + To find affected handlers, use mysqldump to dump all stored + procedures and functions, triggers, and events. Then attempt + to reload them into an upgraded server. Handlers that contain + illegal label references will be rejected. + For more information about condition handlers and writing them + to avoid invalid jumps, see Section 12.8.4.2, "DECLARE for + Handlers." + + * Incompatible change: The parser accepted statements that + contained /* ... */ that were not properly closed with */, + such as SELECT 1 /* + 2. As of MySQL 5.1.23, statements that + contain unclosed /*-comments now are rejected with a syntax + error. + This fix has the potential to cause incompatibilities. Because + of Bug#26302: http://bugs.mysql.com/26302, which caused the + trailing */ to be truncated from comments in views, stored + routines, triggers, and events, it is possible that objects of + those types may have been stored with definitions that now + will be rejected as syntactically invalid. Such objects should + be dropped and re-created so that their definitions do not + contain truncated comments. + + * Incompatible change: As of MySQL 5.1.8, TYPE = engine_name is + still accepted as a synonym for the ENGINE = engine_name table + option but generates a warning. You should note that this + option is not available in MySQL 5.1.7, and is removed + altogether as of MySQL 5.2.5 and produces a syntax error. + TYPE has been deprecated since MySQL 4.0. + + * Incompatible change: The namespace for triggers has changed in + MySQL 5.0.10. Previously, trigger names had to be unique per + table. Now they must be unique within the schema (database). + An implication of this change is that DROP TRIGGER syntax now + uses a schema name instead of a table name (schema name is + optional and, if omitted, the current schema will be used). + When upgrading from a previous version of MySQL 5 to MySQL + 5.0.10 or newer, you must drop all triggers and re-create them + or DROP TRIGGER will not work after the upgrade. Here is a + suggested procedure for doing this: + + 1. Upgrade to MySQL 5.0.10 or later to be able to access + trigger information in the INFORMATION_SCHEMA.TRIGGERS + table. (It should work even for pre-5.0.10 triggers.) + + 2. Dump all trigger definitions using the following SELECT + statement: +SELECT CONCAT('CREATE TRIGGER ', t.TRIGGER_SCHEMA, '.', t.TRIGGER_NAM +E, + ' ', t.ACTION_TIMING, ' ', t.EVENT_MANIPULATION, ' ON ' +, + t.EVENT_OBJECT_SCHEMA, '.', t.EVENT_OBJECT_TABLE, + ' FOR EACH ROW ', t.ACTION_STATEMENT, '//' ) +INTO OUTFILE '/tmp/triggers.sql' +FROM INFORMATION_SCHEMA.TRIGGERS AS t; + The statement uses INTO OUTFILE, so you must have the + FILE privilege. The file will be created on the server + host; use a different file name if you like. To be 100% + safe, inspect the trigger definitions in the triggers.sql + file, and perhaps make a backup of the file. + + 3. Stop the server and drop all triggers by removing all + .TRG files in your database directories. Change location + to your data directory and issue this command: +shell> rm */*.TRG + + 4. Start the server and re-create all triggers using the + triggers.sql file: For example in my case it was: +mysql> delimiter // ; +mysql> source /tmp/triggers.sql // + + 5. Check that all triggers were successfully created using + the SHOW TRIGGERS statement. + + * Incompatible change: MySQL 5.1.6 introduces the TRIGGER + privilege. Previously, the SUPER privilege was needed to + create or drop triggers. Now those operations require the + TRIGGER privilege. This is a security improvement because you + no longer need to grant users the SUPER privilege to enable + them to create triggers. However, the requirement that the + account named in a trigger's DEFINER clause must have the + SUPER privilege has changed to a requirement for the TRIGGER + privilege. When upgrading from a previous version of MySQL 5.0 + or 5.1 to MySQL 5.1.6 or newer, be sure to update your grant + tables as described in Section 4.4.8, "mysql_upgrade --- Check + Tables for MySQL Upgrade." This process assigns the TRIGGER + privilege to all accounts that had the SUPER privilege. If you + fail to update the grant tables, triggers may fail when + activated. (After updating the grant tables, you can revoke + the SUPER privilege from those accounts that no longer + otherwise require it.) + + * Some keywords are reserved in MySQL 5.1 that were not reserved + in MySQL 5.0. See Section 8.3, "Reserved Words." + + * The LOAD DATA FROM MASTER and LOAD TABLE FROM MASTER + statements are deprecated. See Section 12.6.2.2, "LOAD DATA + FROM MASTER Syntax," for recommended alternatives. + + * The INSTALL PLUGIN and UNINSTALL PLUGIN statements that are + used for the plugin API are new. So is the WITH PARSER clause + for FULLTEXT index creation that associates a parser plugin + with a full-text index. Section 22.2, "The MySQL Plugin + Interface." + + C API Changes: + + * Incompatible change: As of MySQL 5.1.7, the + mysql_stmt_attr_get() C API function returns a boolean rather + than an unsigned int for STMT_ATTR_UPDATE_MAX_LENGTH. + (Bug#16144: http://bugs.mysql.com/16144) + +2.12.2. Downgrading MySQL + + This section describes what you should do to downgrade to an older + MySQL version in the unlikely case that the previous version + worked better than the new one. + + If you are downgrading within the same release series (for + example, from 5.0.13 to 5.0.12) the general rule is that you just + have to install the new binaries on top of the old ones. There is + no need to do anything with the databases. As always, however, it + is always a good idea to make a backup. + + The following items form a checklist of things you should do + whenever you perform a downgrade: + + * Read the upgrading section for the release series from which + you are downgrading to be sure that it does not have any + features you really need. See Section 2.12.1, "Upgrading + MySQL." + + * If there is a downgrading section for that version, you should + read that as well. + + * To see which new features were added between the version to + which you are downgrading and your current version, see the + change logs (Appendix C, "MySQL Change History"). + + * Check Section 2.12.3, "Checking Whether Table Indexes Must Be + Rebuilt," to see whether changes to character sets or + collations were made between your current version of MySQL and + the version to which you are downgrading. If so and these + changes affect your table indexes, you will need to rebuild + the affected indexes using the instructions in Section 2.12.4, + "Rebuilding Tables or Table Indexes." + + In most cases, you can 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. + + If you downgrade from one release series to another, there may be + incompatibilities in table storage formats. In this case, use + mysqldump to dump your tables before downgrading. After + downgrading, reload the dump file using mysql or mysqlimport to + re-create your tables. For examples, see Section 2.12.5, "Copying + MySQL Databases to Another Machine." + + A typical symptom of a downward-incompatible table format change + when you downgrade is that you cannot open tables. In that case, + use the following procedure: + + 1. Stop the older MySQL server that you are downgrading to. + + 2. Restart the newer MySQL server you are downgrading from. + + 3. Dump any tables that were inaccessible to the older server by + using mysqldump to create a dump file. + + 4. Stop the newer MySQL server and restart the older one. + + 5. Reload the dump file into the older server. Your tables should + be accessible. + + It might also be the case that the structure of the system tables + in the mysql database has changed and that downgrading introduces + some loss of functionality or requires some adjustments. Here are + some examples: + + * Trigger creation requires the TRIGGER privilege as of MySQL + 5.1. In MySQL 5.0, there is no TRIGGER privilege and SUPER is + required instead. If you downgrade from MySQL 5.1 to 5.0, you + will need to give the SUPER privilege to those accounts that + had the TRIGGER privilege in 5.1. + + * Triggers were added in MySQL 5.0, so if you downgrade from 5.0 + to 4.1, you cannot use triggers at all. + +2.12.2.1. Downgrading to MySQL 5.0 + + When downgrading to MySQL 5.0 from MySQL 5.1 or a later version, + you should keep in mind the following issues relating to features + found in MySQL 5.1 and later, but not in MySQL 5.0: + + * Partitioning. MySQL 5.0 does not support user-defined + partitioning. If a table was created as a partitioned table in + 5.1 (or if an table created in a previous version of MySQL was + altered to include partitions after an upgrade to 5.1), the + table is accessible after downgrade only if you do one of the + following: + + + Export the table using mysqldump and then drop it in + MySQL 5.1; import the table again following the downgrade + to MySQL 5.0. + + + Prior to the downgrade, remove the table's partitioning + using ALTER TABLE table_name REMOVE PARTITIONING. + + * Event Scheduler. MySQL 5.0 does not support scheduled events. + If your databases contain scheduled event definitions, you + should prevent them from being dumped when you use mysqldump + by using the --skip-events option. (See Section 4.5.4, + "mysqldump --- A Database Backup Program.") + + * Stored routines. MySQL 5.1.21 added a number of new columns + to the mysql.proc table in which stored routine definitions + are stored. If you are downgrading from MySQL 5.1.21 or later + to MySQL 5.0, you cannot import the MySQL 5.1 routine + definitions into MySQL 5.0.46 or earlier using the dump of + mysql.proc created by mysqldump (such as when using the + --all-databases option). Instead, you should run mysqldump + --routines prior to performing the downgrade and run the + stored routines DDL statements following the downgrade. + See Bug#11986: http://bugs.mysql.com/11986, + Bug#30029: http://bugs.mysql.com/30029, and + Bug#30660: http://bugs.mysql.com/30660, for more information. + + * Triggers. Trigger creation requires the TRIGGER privilege as + of MySQL 5.1. In MySQL 5.0, there is no TRIGGER privilege and + SUPER is required instead. If you downgrade from MySQL 5.1 to + 5.0, you will need to give the SUPER privilege to those + accounts that had the TRIGGER privilege in 5.1. + +2.12.3. Checking Whether Table Indexes Must Be Rebuilt + + A binary upgrade or downgrade is one that installs one version of + MySQL "in place" over an existing version, without dumping and + reloading tables: + + 1. Stop the server for the existing version if it is running. + + 2. Install a different version of MySQL. This is an upgrade if + the new version is higher than the original version, a + downgrade if the version is lower. + + 3. Start the server for the new version. + + In many cases, the tables from the previous version of MySQL can + be used without change by the new version. However, sometimes + modifications are made to the handling of character sets or + collations that change the character sort order, which causes the + ordering of entries in any index that uses an affected character + set or collation to be incorrect. Such changes result in several + possible problems: + + * Comparison results that differ from previous results + + * Inability to find some index values due to misordered index + entries + + * Misordered ORDER BY results + + * Tables that CHECK TABLE reports as being in need of repair + + The solution to these problems is to rebuild any indexes that use + an affected character set or collation, either by dropping and + re-creating the indexes, or by dumping and reloading the entire + table. For information about rebuilding indexes, see Section + 2.12.4, "Rebuilding Tables or Table Indexes." + + To check whether a table has indexes that must be rebuilt, consult + the following list. It indicates which versions of MySQL + introduced character set or collation changes that require indexes + to be rebuilt. Each entry indicates the version in which the + change occurred and the character sets or collations that the + change affects. If the change is associated with a particular bug + report, the bug number is given. + + The list applies both for binary upgrades and downgrades. For + example, Bug#29461: http://bugs.mysql.com/29461 was fixed in MySQL + 5.0.48, so it applies to upgrades from versions older than 5.0.48 + to 5.0.48 or newer, and also to downgrades from 5.0.48 or newer to + versions older than 5.0.58. + + If you have tables with indexes that are affected, rebuild the + indexes using the instructions given in Section 2.12.4, + "Rebuilding Tables or Table Indexes." + + In many cases, you can use CHECK TABLE ... FOR UPDATE to identify + tables for which index rebuilding is required. (It will report: + Table upgrade required. Please do "REPAIR TABLE `tbl_name`" to fix + it!) In these cases, you can also use mysqlcheck --check-upgrade + or mysql_upgrade, which execute CHECK TABLE. However, the use of + CHECK TABLE applies only after upgrades, not downgrades. Also, + CHECK TABLE is not applicable to all storage engines. For details + about which storage engines CHECK TABLE supports, see Section + 12.5.2.3, "CHECK TABLE Syntax." + + Changes that cause index rebuilding to be necessary: + + * MySQL 5.0.48 (Bug#29461: http://bugs.mysql.com/29461) + Affects indexes for columns that use any of these character + sets: eucjpms, euc_kr, gb2312, latin7, macce, ujis + Affected tables can be detected by CHECK TABLE ... FOR UPDATE + as of MySQL 5.1.29, 6.0.8 (see + Bug#39585: http://bugs.mysql.com/39585). + + * MySQL 5.0.48 (Bug#27562: http://bugs.mysql.com/27562) + Affects indexes that use the ascii_general_ci collation for + columns that contain any of these characters: '`' GRAVE + ACCENT, '[' LEFT SQUARE BRACKET, '\' REVERSE SOLIDUS, ']' + RIGHT SQUARE BRACKET, '~' TILDE + Affected tables can be detected by CHECK TABLE ... FOR UPDATE + as of MySQL 5.1.29, 6.0.8 (see + Bug#39585: http://bugs.mysql.com/39585). + + * MySQL 5.1.21 (Bug#29461: http://bugs.mysql.com/29461) + Affects indexes for columns that use any of these character + sets: eucjpms, euc_kr, gb2312, latin7, macce, ujis + Affected tables can be detected by CHECK TABLE ... FOR UPDATE + as of MySQL 5.1.29, 6.0.8 (see + Bug#39585: http://bugs.mysql.com/39585). + + * MySQL 5.1.23 (Bug#27562: http://bugs.mysql.com/27562) + Affects indexes that use the ascii_general_ci collation for + columns that contain any of these characters: '`' GRAVE + ACCENT, '[' LEFT SQUARE BRACKET, '\' REVERSE SOLIDUS, ']' + RIGHT SQUARE BRACKET, '~' TILDE + Affected tables can be detected by CHECK TABLE ... FOR UPDATE + as of MySQL 5.1.29, 6.0.8 (see + Bug#39585: http://bugs.mysql.com/39585). + + * MySQL 5.1.24 (Bug#27877: http://bugs.mysql.com/27877) + Affects indexes that use the utf8_general_ci or + ucs2_general_ci collation for columns that contain 'ß' LATIN + SMALL LETTER SHARP S (German). + Affected tables can be detected by CHECK TABLE ... FOR UPDATE + as of MySQL 5.1.30, 6.0.8 (see + Bug#40053: http://bugs.mysql.com/40053). + + * * MySQL 6.0.1 (WL#3664) + Affects indexes that use the latin2_czech_cs collation. + Affected tables can be detected by CHECK TABLE ... FOR UPDATE + as of MySQL 6.0.9 (see + Bug#40054: http://bugs.mysql.com/40054). + MySQL 6.0.5 (Bug#33452: http://bugs.mysql.com/33452) + Affects indexes that use the latin2_czech_cs collation. + Affected tables can be detected by CHECK TABLE ... FOR UPDATE + as of MySQL 6.0.9 (see + Bug#40054: http://bugs.mysql.com/40054). + + * MySQL 6.0.5 (Bug#27877: http://bugs.mysql.com/27877) + Affects indexes that use the utf8_general_ci or + ucs2_general_ci collation for columns that contain 'ß' LATIN + SMALL LETTER SHARP S (German). + Affected tables can be detected by CHECK TABLE ... FOR UPDATE + as of MySQL 6.0.8 (see + Bug#40053: http://bugs.mysql.com/40053). + + * MySQL 6.0.6 (Bug#25420: http://bugs.mysql.com/25420) + Affects indexes for columns that use the following collations, + if the columns contain the indicated characters: + big5_chinese_ci: '~' TILDE or '`' GRAVE ACCENT; + cp866_general_ci: j LATIN SMALL LETTER J; gb2312_chinese_ci: + '~' TILDE; gbk_chinese_ci: '~' TILDE + Affected tables can be detected by CHECK TABLE ... FOR UPDATE + as of MySQL 6.0.9 (see + Bug#40054: http://bugs.mysql.com/40054). + +2.12.4. Rebuilding Tables or Table Indexes + + This section describes how to rebuild a table. This can be + necessitated by changes to MySQL such as how data types are + handled or changes to character set handling. For example, an + error in a collation might have been corrected, necessitating a + table rebuild to rebuild the indexes for character columns that + use the collation. Methods for rebuilding a table include dumping + and reloading it, or using ALTER TABLE. + +Note + + If you are rebuilding tables because a different version of MySQL + will not handle them after a binary upgrade or downgrade, you must + use the dump-and-reload method. Dump the tables before upgrading + or downgrading (using your original version of MySQL), and reload + the tables after upgrading or downgrading (after installing the + new version). + + If you use the dump-and-reload method of rebuilding tables only + for the purpose of rebuilding indexes, you can perform the dump + either before or after upgrading or downgrading. Reloading still + must be done afterward. + + For the examples in this section, suppose that a table t1 is + defined like this: +CREATE TABLE t1 ( + c1 VARCHAR(10) CHARACTER SET macce, + c2 TEXT CHARACTER SET ujis, + c3 VARCHAR(20) CHARACTER SET latin1, + PRIMARY KEY (c1), + INDEX (c2(20)) +); + + To re-create a table by dumping and reloading it, use mysqldump to + create a dump file and mysql to reload the file: +shell> mysqldump db_name t1 > dump.sql +shell> mysql db_name < dump.sql + + To recreate all the tables in a single database, specify the + database name without any following table name: +shell> mysqldump db_name > dump.sql +shell> mysql db_name < dump.sql + + To recreate all tables in all databases, use the --all-databases + option: +shell> mysqldump --all-databases > dump.sql +shell> mysql < dump.sql + + To rebuild a table with ALTER TABLE, use a statement that + "changes" the table to use the storage engine that it already has. + For example, if t1 is a MyISAM table, use this statement: +mysql> ALTER TABLE t1 ENGINE = MyISAM; + + If you are not sure which storage engine is used for the table, + use SHOW CREATE TABLE to display the table definition. + +2.12.5. Copying MySQL Databases to Another Machine + + 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 13.5, "The MyISAM Storage Engine." + + In cases where you need to transfer databases between different + architectures, you can use mysqldump to 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. + + Use mysqldump --help to see what options are available. + + 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 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 these commands: +shell> mysqladmin create db_name +shell> mysqldump -h 'other_hostname' --compress db_name | mysql db_na +me + + You can also store the dump in a file, transfer the file to the + target machine, and then load the file into the database there. + For example, you can dump a database to a compressed file on the + source machine like this: +shell> mysqldump --quick db_name | gzip > db_name.gz + + 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.gz | mysql db_name + + You can also use mysqldump and mysqlimport to transfer the + database. For large tables, this is much faster than simply using + mysqldump. In the following commands, DUMPDIR represents the full + path name 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 databas +e +shell> mysqlimport db_name DUMPDIR/*.txt # load data into tables + + Do not forget to copy the mysql database because that is where the + 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. + +2.13. Operating System-Specific Notes + +2.13.1. Linux Notes + + 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 may see none of them. + +2.13.1.1. Linux Operating System Notes + + 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, you should seriously consider using 2.4 because it gives you + a significant speed boost. Your system should be more stable. + + When using LinuxThreads, you should see a minimum of three mysqld + processes running. These are in fact threads. There is one thread + for the LinuxThreads manager, one thread to handle connections, + and one thread to handle alarms and signals. + +2.13.1.2. Linux Binary Distribution Notes + + 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 get + some (non-fatal) issues with host name resolution. If your system + uses libc rather than glibc2, you probably will encounter some + difficulties with host name resolution and getpwnam(). This + happens because glibc (unfortunately) depends on some external + libraries to implement host name resolution and getpwent(), even + when compiled with -static. These problems manifest themselves in + two ways: + + * You may see the following error message when you run + mysql_install_db: +Sorry, the host 'xxxx' could not be looked up + You can deal with this by executing mysql_install_db --force, + which does not execute the resolveip test in mysql_install_db. + The downside is that you cannot use host names in the grant + tables: except for localhost, you must use IP numbers instead. + If you are using an old version of MySQL that does not support + --force, you must manually remove the resolveip test in + mysql_install_db using a text editor. + + * You also may see the following error when you try to run + mysqld with the --user option: +getpwnam: No such file or directory + To work around this problem, 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 not to use a + binary distribution. Obtain 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 great many 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 encounter the + resource-unavailable error if clients attempt too many new TCP/IP + connections over a short period of 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 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. + +2.13.1.3. Linux Source Distribution Notes + + 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 use our + binary. We link our binaries against the best patched version of + glibc we can find 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 determine whether it + meets your needs. If you discover that it is not good enough, 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 obtain LinuxThreads from + 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 INSERT DELAYED statements are issued. We recommend that you + not use INSERT DELAYED before upgrading glibc. + + Note that Linux kernel and the LinuxThread library can by default + handle a maximum of 1,024 threads. If you plan to have more than + 1,000 concurrent connections, you need to make some changes to + LinuxThreads, as follows: + + * Increase 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 is not stable + with 600-1000 connections if STACK_SIZE is the default of + 2MB.) + + * Recompile LinuxThreads to produce a new libpthread.a library, + and relink MySQL against it. + + There is another issue that greatly hurts MySQL performance, + especially on SMP systems. The mutex implementation in + LinuxThreads in glibc 2.1 is very poor 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://dev.mysql.com/Downloads/Linux/linuxthreads-2.1-patch). + + With glibc 2.2.2, MySQL uses 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 occurs can be reduced by re-nicing + the mysqld process to the highest priority. We have also been able + to correct the overspin behavior with a patch, available at + http://dev.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 need to apply it in the + linuxthreads directory with patch -p0 + </tmp/linuxthreads-2.2.2.patch. We hope it is 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 is 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 these patches are safe for MySQL and + significantly improve its performance, but we cannot say anything + about their effects on 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 resolves 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: + + * Link clients with the -Wl,r/full/path/to/libmysqlclient.so + flag rather than with -Lpath). + + * Copy libmysqclient.so to /usr/lib. + + * Add the path name of the directory where libmysqlclient.so is + located to the LD_RUN_PATH environment variable before running + your client. + + If you are using the Fujitsu compiler (fcc/FCC), you may 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 + +2.13.1.4. Linux Post-Installation Notes + + 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.11.2.2, "Starting and Stopping MySQL + Automatically." + + If MySQL cannot open enough files or connections, it may be that + you have not 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 are 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 + (including SuSE Linux 8.0 and later). 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 is 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() successfully unmaps + a mapped region if you ask it to map out an address currently 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 the "gentlemanly" behavior of the code that + creates threads. The user must take measures to make sure that the + number of running threads at any given 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.13.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, 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 + manifest 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 helped for his + site. This patch is available at + http://dev.mysql.com/Downloads/Patches/linux-fork.patch. We have + 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 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 gives 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 benchmarks@mysql.com + 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 B.1.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 4.3.2, "mysqld_safe --- + MySQL Server Startup Script." + +2.13.1.5. Linux x86 Notes + + MySQL requires libc 5.4.12 or newer. It is known to work with libc + 5.4.46. glibc 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 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 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, and 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, and 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 + +2.13.1.6. Linux SPARC Notes + + 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. + +2.13.1.7. Linux Alpha Notes + + We have tested MySQL 5.1 on Alpha with our benchmarks and test + suite, and it appears to work well. + + 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. + + For MySQL on Alpha, we use the -arch generic flag to our compile + options, which ensures 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_shar +ed + + Some known problems when running MySQL on Linux-Alpha: + + * Debugging threaded applications like MySQL does not work with + gdb 4.18. You should use gdb 5.1 instead. + + * If you try linking mysqld statically when using gcc, the + resulting image dumps core at startup time. In other words, do + not use --with-mysqld-ldflags=-all-static with gcc. + +2.13.1.8. Linux PowerPC Notes + + MySQL should work on MkLinux with the newest glibc package (tested + with glibc 2.0.7). + +2.13.1.9. Linux MIPS Notes + + 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 gcc 2.95.2 or newer). + +2.13.1.10. Linux IA-64 Notes + + 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 B.1.3.1, "Problems Linking to the MySQL Client + Library." + +2.13.1.11. SELinux Notes + + RHEL4 comes with SELinux, which supports tighter access control + for processes. If SELinux is enabled (SELINUX in + /etc/selinux/config is set to enforcing, SELINUXTYPE is set to + either targeted or strict), you might encounter problems + installing MySQL AB RPM packages. + + Red Hat has an update that solves this. It involves an update of + the "security policy" specification to handle the install + structure of the RPMs provided by MySQL AB. For further + information, see + https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=167551 and + http://rhn.redhat.com/errata/RHBA-2006-0049.html. + + The preceding discussion applies only to RHEL4. The patch is + unnecessary for RHEL5. + +2.13.2. Mac OS X Notes + + On Mac OS X, tar cannot handle long file names. If you need to + unpack a .tar.gz distribution, use gnutar instead. + +2.13.2.1. Mac OS X 10.x (Darwin) + + MySQL should work without major problems on Mac OS X 10.x + (Darwin). + + Known issues: + + * If you have problems with performance under heavy load, try + using the --skip-thread-priority option to mysqld. This runs + all threads with the same priority. On Mac OS X, this gives + better performance, at least until Apple fixes its thread + scheduler. + + * The connection times (wait_timeout, interactive_timeout and + net_read_timeout) values are not honored. + This is probably a signal handling problem in the thread + library where the signal doesn't break a pending read and we + hope that a future update to the thread libraries will fix + this. + + 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.5, "Installing MySQL on Mac OS X." + +2.13.2.2. Mac OS X Server 1.2 (Rhapsody) + + 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. + + 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.5, "Installing MySQL on Mac OS X." + +2.13.3. Solaris Notes + + For information about installing MySQL on Solaris using PKG + distributions, see Section 2.6, "Installing MySQL on Solaris." + + On Solaris, you may run into trouble even before you get the MySQL + distribution unpacked, as the Solaris tar cannot handle long file + names. This means that you may see errors when you try to unpack + MySQL. + + If this occurs, 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 + Solaris 2.4 and earlier, MySQL automatically uses MIT-pthreads. + See Section 2.10.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 gcc 2.8.1 does not 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. + + In the MySQL benchmarks, we obtained a 4% speed increase on + UltraSPARC when using Forte 5.0 in 32-bit mode, as 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. + + When using Solaris 10 for x86_64, you should mount any file + systems on which you intend to store InnoDB files with the + forcedirectio option. (By default mounting is done without this + option.) Failing to do so will cause a significant drop in + performance when using the InnoDB storage engine on this platform. + + 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 are 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 break all programs that use threads, and + possibly other programs as well. + + Solaris does not provide static versions of all system libraries + (libpthreads and libdl), so you cannot compile MySQL with + --static. If you try to do so, you 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: + + * Link clients with the -Wl,r/full/path/to/libmysqlclient.so + flag rather than with -Lpath). + + * Copy libmysqclient.so to /usr/lib. + + * Add the path name of the directory where libmysqlclient.so is + located to the 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: + + * If you want to be able to use the compressed communication + protocol, you need to get and install zlib from ftp.gnu.org. + + * Run 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 + should 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. + +2.13.3.1. Solaris 2.7/2.8 Notes + + 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 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 previo +us +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 is 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: + + * Configure with CFLAGS=-DHAVE_CURSES_H CXXFLAGS=-DHAVE_CURSES_H + ./configure. + + * Edit /usr/include/widec.h as indicated in the preceding + discussion and re-run configure. + + * Remove the #define HAVE_TERM line from the config.h file and + run make again. + + If your linker cannot 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: + + * Add /usr/local/lib to LD_LIBRARY_PATH. + + * Add a link to libz.so from /lib. + + * If you are using Solaris 8, you can install the optional zlib + from your Solaris 8 CD distribution. + + * Run configure with the --with-named-z-libs=no option when + building MySQL. + +2.13.3.2. Solaris x86 Notes + + On Solaris 8 on x86, mysqld dumps core if you remove the debug + symbols using strip. + + If you are using gcc 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 avoids 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 MySQL Internals: Porting + (http://forge.mysql.com/wiki/MySQL_Internals_Porting). + +2.13.4. BSD Notes + + This section provides information about using MySQL on variants of + BSD Unix. + +2.13.4.1. FreeBSD Notes + + 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: + + * A working MySQL with all optimizations enabled that are known + to work on your version of FreeBSD. + + * Automatic configuration and build. + + * Startup scripts installed in /usr/local/etc/rc.d. + + * The ability to use pkg_info -L to see which files are + installed. + + * The ability to use 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 FreeBSD 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 host names into IP + addresses. Under certain circumstances, the mysqld process + suddenly causes 100% CPU load and is 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. + + Known problem when using LinuxThreads on FreeBSD is: + + * The connection times (wait_timeout, interactive_timeout and + net_read_timeout) values are not honored. The symptom is that + persistent connections can hang for a very long time without + getting closed down and that a 'kill' for a thread will not + take affect until the thread does it a new command + This is probably a signal handling problem in the thread + library where the signal doesn't break a pending read. This is + supposed to be fixed in FreeBSD 5.0 + + 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 uses MIT-pthreads, you should read + the MIT-pthreads notes. See Section 2.10.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, and 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 B.1.2.18, "'File' Not Found and Similar Errors." 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 4.3.2, "mysqld_safe --- MySQL Server Startup Script." + + FreeBSD limits the size of a process to 512MB, even if you have + much more RAM available on the system. So you may get an error + such as this: +Out of memory (Needed 16391 bytes) + + In current versions of FreeBSD (at least 4.x and greater), you may + increase this limit by adding the following entries to the + /boot/loader.conf file and rebooting the machine (these are not + settings that can be changed at run time with the sysctl command): +kern.maxdsiz="1073741824" # 1GB +kern.dfldsiz="1073741824" # 1GB +kern.maxssiz="134217728" # 128MB + + For older versions of FreeBSD, you must recompile your kernel to + change the maximum data segment size for a process. In this case, + you should look at the MAXDSIZ option in the LINT config file for + more information. + + If you get problems with the current date in MySQL, setting the TZ + variable should help. See Section 2.14, "Environment Variables." + +2.13.4.2. NetBSD Notes + + To compile on NetBSD, you need GNU make. Otherwise, the build + process fails when make tries to run lint on C++ files. + +2.13.4.3. OpenBSD 2.5 Notes + + On OpenBSD 2.5, you can compile MySQL with native threads with the + following options: +CFLAGS=-pthread CXXFLAGS=-pthread ./configure --with-mit-threads=no + +2.13.4.4. BSD/OS Version 2.x Notes + + 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 should help. See Section 2.14, "Environment Variables." + +2.13.4.5. BSD/OS Version 3.x Notes + + Upgrade to BSD/OS 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 runs all threads + with the same priority. On BSDI 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. + +2.13.4.6. BSD/OS Version 4.x Notes + + BSDI 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 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 occurs 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). + +2.13.5. Other Unix Notes + +2.13.5.1. HP-UX Version 10.20 Notes + + If you install MySQL using a binary tarball distribution on HP-UX, + you may run into trouble even before you get the MySQL + distribution unpacked, as the HP-UX tar cannot handle long file + names. This means that you may see errors when you try to unpack + MySQL. + + If this occurs, you must use GNU tar (gtar) to unpack the + distribution. + + 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 + +2.13.5.2. HP-UX Version 11.x Notes + + If you install MySQL using a binary tarball distribution on HP-UX, + you may run into trouble even before you get the MySQL + distribution unpacked, as the HP-UX tar cannot handle long file + names. This means that you may see errors when you try to unpack + MySQL. + + If this occurs, you must use GNU tar (gtar) to unpack the + distribution. + + 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 solves 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 + may get the following 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 does not 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 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++ compil +er). +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 the MySQL binaries + provided at http://dev.mysql.com/downloads/, which we have built + and tested ourselves. We have also received reports that the HP-UX + 10.20 binaries supplied by MySQL can be run successfully on HP-UX + 11. If you encounter problems, you should be sure to check your + HP-UX patch level. + +2.13.5.3. IBM-AIX notes + + 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 \ + --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 to compile MySQL, you must use the + -fno-exceptions flag, because the exception handling in gcc is not + thread-safe! 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 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 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 + produces 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://www16.boulder.ibm.com/pseries/en_US/cmds/aixcmds5/uname.htm + . + + This gives 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 dies 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 + + For 32-bit binaries, if you need to allocate a lot of memory to + the mysqld process, it is 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/lr + g_prg_support.htm. + + Users of AIX 4.3 should use gmake instead of the make utility + included with AIX. + + As of AIX 4.1, the C compiler has been unbundled from AIX as a + separate product. We recommend using gcc 3.3.2, which can be + obtained here: + ftp://ftp.software.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/gc + c/ + + The steps for compiling MySQL on AIX with gcc 3.3.2 are similar to + those for using gcc 2.95 (in particular, the need to edit config.h + and my_config.h after running configure). However, before running + configure, you should also patch the curses.h file as follows: +/opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.2.0.0/3.3.2/include/curses +.h.ORIG + Mon Dec 26 02:17:28 2005 +--- /opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.2.0.0/3.3.2/include/cu +rses.h +Mon Dec 26 02:40:13 2005 +*************** +*** 2023,2029 **** + + + #endif /* _AIX32_CURSES */ +! #if defined(__USE_FIXED_PROTOTYPES__) || defined(__cplusplus) || de +fined +(__STRICT_ANSI__) + extern int delwin (WINDOW *); + extern int endwin (void); + extern int getcurx (WINDOW *); +--- 2023,2029 ---- + + + #endif /* _AIX32_CURSES */ +! #if 0 && (defined(__USE_FIXED_PROTOTYPES__) || defined(__cplusplus) +|| defined +(__STRICT_ANSI__)) + extern int delwin (WINDOW *); + extern int endwin (void); + extern int getcurx (WINDOW *); + +2.13.5.4. SunOS 4 Notes + + On SunOS 4, MIT-pthreads is needed to compile MySQL. This in turn + means you 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 are some implicit declaration of + function warnings. These can be ignored. + +2.13.5.5. Alpha-DEC-UNIX Notes (Tru64) + + 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 + 4.3.2, "mysqld_safe --- MySQL 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 \ + -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/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 + +2.13.5.6. Alpha-DEC-OSF/1 Notes + + 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 uses 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 does not 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 dies when it issues its next command. + + With gcc 2.95.2, you may encounter 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. + +2.13.5.7. SGI Irix Notes + + As of MySQL 5.0, we don't provide binaries for Irix any more. + + If you are using Irix 6.5.3 or newer, mysqld is 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.ht + ml + + 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.htm + l + + 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/curs +es.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/includ +e \ +-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-libwrap=/usr/local \ + --with-named-curses-libs=/usr/local/lib/libncurses.a + +2.13.5.8. SCO UNIX and OpenServer 5.0.x Notes + + 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 progress on a port to + sco3.2v4.2. Open Server 5.0.8 (Legend) has native threads and + allows files greater than 2GB. The current maximum file size is + 2GB. + + We have been able to compile MySQL with the following configure + command on OpenServer with gcc 2.95.3. +CC=gcc CFLAGS="-D_FILE_OFFSET_BITS=64 -O3" \ +CXX=gcc CXXFLAGS="-D_FILE_OFFSET_BITS=64 -O3" \ +./configure --prefix=/usr/local/mysql \ + --enable-thread-safe-client --with-innodb \ + --with-openssl --with-vio --with-extra-charsets=complex + + gcc is available at + ftp://ftp.sco.com/pub/openserver5/opensrc/gnutools-5.0.7Kj. + + This development system requires the OpenServer Execution + Environment Supplement oss646B on OpenServer 5.0.6 and oss656B and + The OpenSource libraries found in gwxlibs. All OpenSource tools + are in the opensrc directory. They are available at + ftp://ftp.sco.com/pub/openserver5/opensrc/. + + We recommend using the latest production release of MySQL. + + SCO provides operating system patches at + ftp://ftp.sco.com/pub/openserver5 for OpenServer 5.0.[0-6] and + ftp://ftp.sco.com/pub/openserverv5/507 for OpenServer 5.0.7. + + SCO provides information about security fixes at + ftp://ftp.sco.com/pub/security/OpenServer for OpenServer 5.0.x. + + The maximum file size on an OpenServer 5.0.x system is 2GB. + + The total memory which can be allocated for streams buffers, + clists, and lock records cannot exceed 60MB on OpenServer 5.0.x. + + Streams buffers are allocated in units of 4096 byte pages, clists + are 70 bytes each, and lock records are 64 bytes each, so: +(NSTRPAGES x 4096) + (NCLIST x 70) + (MAX_FLCKREC x 64) <= 62914560 + + Follow this procedure to configure the Database Services option. + If you are unsure whether an application requires this, see the + documentation provided with the application. + + 1. Log in as root. + + 2. Enable the SUDS driver by editing the /etc/conf/sdevice.d/suds + file. Change the N in the second field to a Y. + + 3. Use mkdev aio or the Hardware/Kernel Manager to enable support + for asynchronous I/O and relink the kernel. To allow users to + lock down memory for use with this type of I/O, update the + aiomemlock(F) file. This file should be updated to include the + names of users that can use AIO and the maximum amounts of + memory they can lock down. + + 4. Many applications use setuid binaries so that you need to + specify only a single user. See the documentation provided + with the application to determine whether this is the case for + your application. + + After you complete this process, reboot the system to create a new + kernel incorporating these changes. + + By default, the entries in /etc/conf/cf.d/mtune are set as + follows: +Value Default Min Max +----- ------- --- --- +NBUF 0 24 450000 +NHBUF 0 32 524288 +NMPBUF 0 12 512 +MAX_INODE 0 100 64000 +MAX_FILE 0 100 64000 +CTBUFSIZE 128 0 256 +MAX_PROC 0 50 16000 +MAX_REGION 0 500 160000 +NCLIST 170 120 16640 +MAXUP 100 15 16000 +NOFILES 110 60 11000 +NHINODE 128 64 8192 +NAUTOUP 10 0 60 +NGROUPS 8 0 128 +BDFLUSHR 30 1 300 +MAX_FLCKREC 0 50 16000 +PUTBUFSZ 8000 2000 20000 +MAXSLICE 100 25 100 +ULIMIT 4194303 2048 4194303 +* Streams Parameters +NSTREAM 64 1 32768 +NSTRPUSH 9 9 9 +NMUXLINK 192 1 4096 +STRMSGSZ 16384 4096 524288 +STRCTLSZ 1024 1024 1024 +STRMAXBLK 524288 4096 524288 +NSTRPAGES 500 0 8000 +STRSPLITFRAC 80 50 100 +NLOG 3 3 3 +NUMSP 64 1 256 +NUMTIM 16 1 8192 +NUMTRW 16 1 8192 +* Semaphore Parameters +SEMMAP 10 10 8192 +SEMMNI 10 10 8192 +SEMMNS 60 60 8192 +SEMMNU 30 10 8192 +SEMMSL 25 25 150 +SEMOPM 10 10 1024 +SEMUME 10 10 25 +SEMVMX 32767 32767 32767 +SEMAEM 16384 16384 16384 +* Shared Memory Parameters +SHMMAX 524288 131072 2147483647 +SHMMIN 1 1 1 +SHMMNI 100 100 2000 +FILE 0 100 64000 +NMOUNT 0 4 256 +NPROC 0 50 16000 +NREGION 0 500 160000 + + We recommend setting these values as follows: + + * NOFILES should be 4096 or 2048. + + * MAXUP should be 2048. + + To make changes to the kernel, use the idtune name parameter + command. idtune modifies the /etc/conf/cf.d/stune file for you. + For example, to change SEMMS to 200, execute this command as root: +# /etc/conf/bin/idtune SEMMNS 200 + + Then rebuild and reboot the kernel by issuing this command: +# /etc/conf/bin/idbuild -B && init 6 + + We recommend tuning the system, but the proper parameter values to + use depend on the number of users accessing the application or + database and size the of the database (that is, the used buffer + pool). The following kernel parameters can be set with idtune: + + * SHMMAX (recommended setting: 128MB) and SHMSEG (recommended + setting: 15). These parameters have an influence on the MySQL + database engine to create user buffer pools. + + * NOFILES and MAXUP should be set to at least 2048. + + * MAXPROC should be set to at least 3000/4000 (depends on number + of users) or more. + + * We also recommend using the following formulas to calculate + values for SEMMSL, SEMMNS, and SEMMNU: +SEMMSL = 13 + 13 is what has been found to be the best for both Progress and + MySQL. +SEMMNS = SEMMSL x number of db servers to be run on the system + Set SEMMNS to the value of SEMMSL multiplied by the number of + database servers (maximum) that you are running on the system + at one time. +SEMMNU = SEMMNS + Set the value of SEMMNU to equal the value of SEMMNS. You + could probably set this to 75% of SEMMNS, but this is a + conservative estimate. + + You need to at least install the SCO OpenServer Linker and + Application Development Libraries or the OpenServer Development + System to use gcc. You cannot use the GCC Dev system without + installing one of these. + + You should get the FSU Pthreads package and install it first. This + can be found at + http://moss.csc.ncsu.edu/~mueller/ftp/pub/PART/pthreads.tar.gz. + You can also get a precompiled package from + ftp://ftp.zenez.com/pub/zenez/prgms/FSU-threads-3.14.tar.gz. + + FSU Pthreads can be compiled with SCO Unix 4.2 with tcpip, or + using OpenServer 3.0 or Open Desktop 3.0 (OS 3.0 ODT 3.0) with the + SCO Development System installed using a good port of GCC 2.5.x. + For ODT or OS 3.0, you need a good port of GCC 2.5.x. There are a + lot of problems without a good port. The port for this product + requires the SCO Unix Development system. Without it, you are + missing the libraries and the linker that is needed. You also need + SCO-3.2v4.2-includes.tar.gz. This file contains the changes to the + SCO Development include files that are needed to get MySQL to + build. You need to replace the existing system include files with + these modified header files. They can be obtained from + ftp://ftp.zenez.com/pub/zenez/prgms/SCO-3.2v4.2-includes.tar.gz. + + To build FSU Pthreads on your system, all you should need to do is + run GNU make. The Makefile in FSU-threads-3.14.tar.gz is set up to + make FSU-threads. + + You can run ./configure in the threads/src directory and select + the SCO OpenServer option. This command copies Makefile.SCO5 to + Makefile. Then run make. + + To install in the default /usr/include directory, log in as root, + and then cd to the thread/src directory and run make install. + + Remember that you must use GNU make to build MySQL. + +Note + + If you don't start mysqld_safe as root, you should get only the + default 110 open files per process. mysqld writes a note about + this in the log file. + + With SCO 3.2V4.2, you should use FSU Pthreads version 3.14 or + newer. The following 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 have problems with some include files. In this case, you + can find new SCO-specific include files at + ftp://ftp.zenez.com/pub/zenez/prgms/SCO-3.2v4.2-includes.tar.gz. + + You should unpack this file in the include directory of your MySQL + source tree. + + SCO development notes: + + * MySQL should automatically detect FSU Pthreads and link mysqld + with -lgthreads -lsocket -lgthreads. + + * The SCO development libraries are re-entrant in FSU Pthreads. + SCO claims that its library functions are re-entrant, so they + must be re-entrant with FSU Pthreads. FSU Pthreads on + OpenServer tries to use the SCO scheme to make re-entrant + libraries. + + * FSU Pthreads (at least the version at ftp://ftp.zenez.com) + comes linked with GNU malloc. If you encounter problems with + memory usage, make sure that gmalloc.o is included in + libgthreads.a and libgthreads.so. + + * In FSU Pthreads, the following system calls are + pthreads-aware: read(), write(), getmsg(), connect(), + accept(), select(), and wait(). + + * The CSSA-2001-SCO.35.2 (the patch is listed in custom as + erg711905-dscr_remap security patch (version 2.0.0)) breaks + FSU threads and makes mysqld unstable. You have to remove this + one if you want to run mysqld on an OpenServer 5.0.6 machine. + + * If you use SCO OpenServer 5, you may need to recompile FSU + pthreads with -DDRAFT7 in CFLAGS. Otherwise, InnoDB may hang + at a mysqld startup. + + * SCO provides operating system patches at + ftp://ftp.sco.com/pub/openserver5 for OpenServer 5.0.x. + + * SCO provides security fixes and libsocket.so.2 at + ftp://ftp.sco.com/pub/security/OpenServer and + ftp://ftp.sco.com/pub/security/sse for OpenServer 5.0.x. + + * Pre-OSR506 security fixes. Also, the 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 is probably a good idea to install these patches before + trying to compile/use MySQL. + + Beginning with Legend/OpenServer 6.0.0, there are native threads + and no 2GB file size limit. + +2.13.5.9. SCO OpenServer 6.0.x Notes + + OpenServer 6 includes these key improvements: + + * Larger file support up to 1 TB + + * Multiprocessor support increased from 4 to 32 processors + + * Increased memory support up to 64GB + + * Extending the power of UnixWare into OpenServer 6 + + * Dramatic performance improvement + + OpenServer 6.0.0 commands are organized as follows: + + * /bin is for commands that behave exactly the same as on + OpenServer 5.0.x. + + * /u95/bin is for commands that have better standards + conformance, for example Large File System (LFS) support. + + * /udk/bin is for commands that behave the same as on UnixWare + 7.1.4. The default is for the LFS support. + + The following is a guide to setting PATH on OpenServer 6. If the + user wants the traditional OpenServer 5.0.x then PATH should be + /bin first. If the user wants LFS support, the path should be + /u95/bin:/bin. If the user wants UnixWare 7 support first, the + path would be /udk/bin:/u95/bin:/bin:. + + We recommend using the latest production release of MySQL. Should + you choose to use an older release of MySQL on OpenServer 6.0.x, + you must use a version of MySQL at least as recent as 3.22.13 to + get fixes for some portability and OS problems. + + MySQL distribution files with names of the following form are tar + archives of media are tar archives of media images suitable for + installation with the SCO Software Manager (/etc/custom) on SCO + OpenServer 6: +mysql-PRODUCT-5.1.35-sco-osr6-i686.VOLS.tar + + A distribution where PRODUCT is pro-cert is the Commercially + licensed MySQL Pro Certified server. A distribution where PRODUCT + is pro-gpl-cert is the MySQL Pro Certified server licensed under + the terms of the General Public License (GPL). + + Select whichever distribution you wish to install and, after + download, extract the tar archive into an empty directory. For + example: +shell> mkdir /tmp/mysql-pro +shell> cd /tmp/mysql-pro +shell> tar xf /tmp/mysql-pro-cert-5.1.35-sco-osr6-i686.VOLS.tar + + Prior to installation, back up your data in accordance with the + procedures outlined in Section 2.12.1, "Upgrading MySQL." + + Remove any previously installed pkgadd version of MySQL: +shell> pkginfo mysql 2>&1 > /dev/null && pkgrm mysql + + Install MySQL Pro from media images using the SCO Software + Manager: +shell> /etc/custom -p SCO:MySQL -i -z /tmp/mysql-pro + + Alternatively, the SCO Software Manager can be displayed + graphically by clicking on the Software Manager icon on the + desktop, selecting Software -> Install New, selecting the host, + selecting Media Images for the Media Device, and entering + /tmp/mysql-pro as the Image Directory. + + After installation, run mkdev mysql as the root user to configure + your newly installed MySQL Pro Certified server. + +Note + + The installation procedure for VOLS packages does not create the + mysql user and group that the package uses by default. You should + either create the mysql user and group, or else select a different + user and group using an option in mkdev mysql. + + If you wish to configure your MySQL Pro server to interface with + the Apache Web server via PHP, download and install the PHP update + from SCO at + ftp://ftp.sco.com/pub/updates/OpenServer/SCOSA-2006.17/. + + We have been able to compile MySQL with the following configure + command on OpenServer 6.0.x: +CC=cc CFLAGS="-D_FILE_OFFSET_BITS=64 -O3" \ +CXX=CC CXXFLAGS="-D_FILE_OFFSET_BITS=64 -O3" \ +./configure --prefix=/usr/local/mysql \ + --enable-thread-safe-client \ + --with-extra-charsets=complex \ + --build=i686-unknown-sysv5SCO_SV6.0.0 + + If you use gcc, you must use gcc 2.95.3 or newer. +CC=gcc CXX=g++ ... ./configure ... + + SCO provides OpenServer 6 operating system patches at + ftp://ftp.sco.com/pub/openserver6. + + SCO provides information about security fixes at + ftp://ftp.sco.com/pub/security/OpenServer. + + By default, the maximum file size on a OpenServer 6.0.0 system is + 1TB. Some operating system utilities have a limitation of 2GB. The + maximum possible file size on UnixWare 7 is 1TB with VXFS or HTFS. + + OpenServer 6 can be configured for large file support (file sizes + greater than 2GB) by tuning the UNIX kernel. + + By default, the entries in /etc/conf/cf.d/mtune are set as + follows: +Value Default Min Max +----- ------- --- --- +SVMMLIM 0x9000000 0x1000000 0x7FFFFFFF +HVMMLIM 0x9000000 0x1000000 0x7FFFFFFF + + To make changes to the kernel, use the idtune name parameter + command. idtune modifies the /etc/conf/cf.d/stune file for you. We + recommend setting the kernel values by executing the following + commands as root: +# /etc/conf/bin/idtune SDATLIM 0x7FFFFFFF +# /etc/conf/bin/idtune HDATLIM 0x7FFFFFFF +# /etc/conf/bin/idtune SVMMLIM 0x7FFFFFFF +# /etc/conf/bin/idtune HVMMLIM 0x7FFFFFFF +# /etc/conf/bin/idtune SFNOLIM 2048 +# /etc/conf/bin/idtune HFNOLIM 2048 + + Then rebuild and reboot the kernel by issuing this command: +# /etc/conf/bin/idbuild -B && init 6 + + We recommend tuning the system, but the proper parameter values to + use depend on the number of users accessing the application or + database and size the of the database (that is, the used buffer + pool). The following kernel parameters can be set with idtune: + + * SHMMAX (recommended setting: 128MB) and SHMSEG (recommended + setting: 15). These parameters have an influence on the MySQL + database engine to create user buffer pools. + + * SFNOLIM and HFNOLIM should be at maximum 2048. + + * NPROC should be set to at least 3000/4000 (depends on number + of users). + + * We also recommend using the following formulas to calculate + values for SEMMSL, SEMMNS, and SEMMNU: +SEMMSL = 13 + 13 is what has been found to be the best for both Progress and + MySQL. +SEMMNS = SEMMSL x number of db servers to be run on the system + Set SEMMNS to the value of SEMMSL multiplied by the number of + database servers (maximum) that you are running on the system + at one time. +SEMMNU = SEMMNS + Set the value of SEMMNU to equal the value of SEMMNS. You + could probably set this to 75% of SEMMNS, but this is a + conservative estimate. + +2.13.5.10. SCO UnixWare 7.1.x and OpenUNIX 8.0.0 Notes + + We recommend using the latest production release of MySQL. Should + you choose to use an older release of MySQL on UnixWare 7.1.x, 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 7.1.x: +CC="cc" CFLAGS="-I/usr/local/include" \ +CXX="CC" CXXFLAGS="-I/usr/local/include" \ +./configure --prefix=/usr/local/mysql \ + --enable-thread-safe-client \ + --with-innodb --with-openssl --with-extra-charsets=complex + + If you want to use gcc, you must use gcc 2.95.3 or newer. +CC=gcc CXX=g++ ... ./configure ... + + SCO provides operating system patches at + ftp://ftp.sco.com/pub/unixware7 for UnixWare 7.1.1, + ftp://ftp.sco.com/pub/unixware7/713/ for UnixWare 7.1.3, + ftp://ftp.sco.com/pub/unixware7/714/ for UnixWare 7.1.4, and + 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 + ftp://ftp.sco.com/pub/security/UnixWare for UnixWare. + + The UnixWare 7 file size limit is 1 TB with VXFS. Some OS + utilities have a limitation of 2GB. + + On UnixWare 7.1.4 you do not need to do anything to get large file + support, but to enable large file support on prior versions of + UnixWare 7.1.x, run fsadm. +# fsadm -Fvxfs -o largefiles / +# fsadm / * Note +# ulimit unlimited +# /etc/conf/bin/idtune SFSZLIM 0x7FFFFFFF ** Note +# /etc/conf/bin/idtune HFSZLIM 0x7FFFFFFF ** Note +# /etc/conf/bin/idbuild -B + +* This should report "largefiles". +** 0x7FFFFFFF represents infinity for these values. + + Reboot the system using shutdown. + + By default, the entries in /etc/conf/cf.d/mtune are set as + follows: +Value Default Min Max +----- ------- --- --- +SVMMLIM 0x9000000 0x1000000 0x7FFFFFFF +HVMMLIM 0x9000000 0x1000000 0x7FFFFFFF + + To make changes to the kernel, use the idtune name parameter + command. idtune modifies the /etc/conf/cf.d/stune file for you. We + recommend setting the kernel values by executing the following + commands as root: +# /etc/conf/bin/idtune SDATLIM 0x7FFFFFFF +# /etc/conf/bin/idtune HDATLIM 0x7FFFFFFF +# /etc/conf/bin/idtune SVMMLIM 0x7FFFFFFF +# /etc/conf/bin/idtune HVMMLIM 0x7FFFFFFF +# /etc/conf/bin/idtune SFNOLIM 2048 +# /etc/conf/bin/idtune HFNOLIM 2048 + + Then rebuild and reboot the kernel by issuing this command: +# /etc/conf/bin/idbuild -B && init 6 + + We recommend tuning the system, but the proper parameter values to + use depend on the number of users accessing the application or + database and size the of the database (that is, the used buffer + pool). The following kernel parameters can be set with idtune: + + * SHMMAX (recommended setting: 128MB) and SHMSEG (recommended + setting: 15). These parameters have an influence on the MySQL + database engine to create user buffer pools. + + * SFNOLIM and HFNOLIM should be at maximum 2048. + + * NPROC should be set to at least 3000/4000 (depends on number + of users). + + * We also recommend using the following formulas to calculate + values for SEMMSL, SEMMNS, and SEMMNU: +SEMMSL = 13 + 13 is what has been found to be the best for both Progress and + MySQL. +SEMMNS = SEMMSL x number of db servers to be run on the system + Set SEMMNS to the value of SEMMSL multiplied by the number of + database servers (maximum) that you are running on the system + at one time. +SEMMNU = SEMMNS + Set the value of SEMMNU to equal the value of SEMMNS. You + could probably set this to 75% of SEMMNS, but this is a + conservative estimate. + +2.14. Environment Variables + + This section lists all the environment variables that are used + directly or indirectly by MySQL. Most of these can also be found + in other places in this manual. + + Note that any options on the command line take precedence over + values specified in option files and environment variables, and + values in option files take precedence over values in environment + variables. + + In many cases, it is preferable to use an option file instead of + environment variables to modify the behavior of MySQL. See Section + 4.2.3.2, "Using Option Files." + Variable Description + CXX The name of your C++ compiler (for running configure). + CC The name of your C compiler (for running configure). + CFLAGS Flags for your C compiler (for running configure). + CXXFLAGS Flags for your C++ compiler (for running configure). + DBI_USER The default user name for Perl DBI. + DBI_TRACE Trace options for Perl DBI. + HOME The default path for the mysql history file is + $HOME/.mysql_history. + LD_RUN_PATH Used to specify the location of libmysqlclient.so. + MYSQL_DEBUG Debug trace options when debugging. + MYSQL_GROUP_SUFFIX Option group suffix value (like specifying + --defaults-group-suffix). + MYSQL_HISTFILE The path to the mysql history file. If this + variable is set, its value overrides the default for + $HOME/.mysql_history. + MYSQL_HOME The path to the directory in which the server-specific + my.cnf file resides (as of MySQL 5.0.3). + MYSQL_HOST The default host name used by the mysql command-line + client. + MYSQL_PS1 The command prompt to use in the mysql command-line + client. + MYSQL_PWD The default password when connecting to mysqld. Note + that using this is insecure. See Section 5.5.6.2, "End-User + Guidelines for Password Security." + MYSQL_TCP_PORT The default TCP/IP port number. + MYSQL_UNIX_PORT The default Unix socket file name; used for + connections to localhost. + PATH Used by the shell to find MySQL programs. + TMPDIR The directory where temporary files are created. + TZ This should be set to your local time zone. See Section + B.1.4.6, "Time Zone Problems." + UMASK The user-file creation mode when creating files. See note + following table. + UMASK_DIR The user-directory creation mode when creating + directories. See note following table. + USER The default user name on Windows and NetWare used when + connecting to mysqld. + + The UMASK and UMASK_DIR variables, despite their names, are used + as modes, not masks: + + * If UMASK is set, mysqld uses ($UMASK | 0600) as the mode for + file creation, so that newly created files have a mode in the + range from 0600 to 0666 (all values octal). + + * If UMASK_DIR is set, mysqld uses ($UMASK_DIR | 0700) as the + base mode for directory creation, which then is AND-ed with + ~(~$UMASK & 0666), so that newly created directories have a + mode in the range from 0700 to 0777 (all values octal). The + AND operation may remove read and write permissions from the + directory mode, but not execute permissions. + + MySQL assumes that the value for UMASK or UMASK_DIR is in octal if + it starts with a zero. + +2.15. Perl Installation Notes + + Perl support for MySQL is provided by means of the DBI/DBD client + interface. The interface requires Perl 5.6.0, and 5.6.1 or later + is preferred. DBI does 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 2.0900. If you are using the MySQL 4.1 or newer client + library, you must use DBD::mysql 2.9003 or newer. Support for + server-side prepared statements requires DBD::mysql 3.0009 or + newer. + + Perl support is not 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." It is also required for the MySQL Cluster ndb_size.pl + utility; see Section 17.9.15, "ndb_size.pl --- NDBCLUSTER Size + Requirement Estimator." + +2.15.1. Installing Perl on Unix + + MySQL Perl support requires that you have 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 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 + attempt to connect to the local MySQL server using the default + user name and password. (The default user name is your login name + on Unix, and ODBC on Windows. The default password is "no + password.") If you cannot connect to the server with those values + (for example, if your account has a password), the tests fail. You + can use force install DBD::mysql to ignore the failed tests. + + DBI requires the Data::Dumper module. It may 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: + + 1. Unpack the distribution into the current directory: +shell> gunzip < DBI-VERSION.tar.gz | tar xvf - + This command creates a directory named DBI-VERSION. + + 2. Change location into the top-level directory of the unpacked + distribution: +shell> cd DBI-VERSION + + 3. Build the distribution and compile everything: +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 fails. + + 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 do not 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#module + s + + Look under the heading "Installing New Modules that Require + Locally Installed Modules." + +2.15.2. Installing ActiveState Perl on Windows + + On Windows, you should do the following to install the MySQL DBD + module with ActiveState Perl: + + 1. Get ActiveState Perl from + http://www.activestate.com/Products/ActivePerl/ and install + it. + + 2. Open a console window (a "DOS window"). + + 3. If necessary, set the HTTP_proxy variable. For example, you + might try a setting like this: +set HTTP_proxy=my.proxy.com:3128 + + 4. Start the PPM program: +C:\> C:\perl\bin\ppm.pl + + 5. If you have not previously done so, install DBI: +ppm> install DBI + + 6. If this succeeds, run the following command: +ppm> install DBD-mysql + + This procedure should work with ActiveState Perl 5.6 or newer. + + If you cannot get the procedure to work, you should install the + MyODBC driver instead 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"; + +2.15.3. Problems Using the Perl DBI/DBD Interface + + If Perl reports that it cannot find the ../mysql/mysql.so module, + the problem is probably that Perl cannot locate the + libmysqlclient.so shared library. You should be able to fix this + problem by one of the following methods: + + * Compile the DBD::mysql distribution with perl Makefile.PL + -static -config rather than perl Makefile.PL. + + * Copy libmysqlclient.so to the directory where your other + shared libraries are located (probably /usr/lib or /lib). + + * Modify the -L options used to compile DBD::mysql to reflect + the actual location of libmysqlclient.so. + + * On Linux, you can add the path name of the directory where + libmysqlclient.so is located to the /etc/ld.so.conf file. + + * Add the path name of the directory where libmysqlclient.so is + located to the 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 path name of the directory where libgcc.a is located + on your system. + + Another cause of this problem may be that Perl and MySQL are not + 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::mys +ql: +../blib/arch/auto/DBD/mysql/mysql.so: undefined symbol: +uncompress at /usr/lib/perl5/5.00503/i586-linux/DynaLoader.pm line 16 +9. + + 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 does 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 does not + 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 + indicates the exact make command you 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. |