::: DATABASE :::/└ ::: MY SQL :::

My sql

호딩이 2007. 1. 10. 17:48

2.9 MySQL Installation Using a Source Distribution
==================================================

* Menu:

* quick-install::                Source Installation Overview
* configure-options::            Typical `configure' Options
* installing-source-tree::       Installing from the Development Source Tree
* compilation-problems::         Dealing with Problems Compiling MySQL
* mit-pthreads::                 MIT-pthreads Notes
* windows-source-build::         Installing MySQL from Source on Windows
* windows-client-compiling::     Compiling MySQL Clients on Windows

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, *Note getting-mysql::.

MySQL source distributions are provided as compressed `tar' archives
and have names of the form `mysql-VERSION.tar.gz', where VERSION is a
number like `5.0.25'.

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 pre-installed version
    of `tar' that is known to have problems. For example, the `tar'
    provided with early versions of Mac OS X `tar', SunOS 4.x and
    Solaris 8 and earlier are known to have problems with long
    filenames. On Mac OS X, you can use the pre-installed `gnutar'
    program. On other systems with a deficient `tar', you should
    install GNU `tar' first.

  * A working ANSI C++ compiler. `gcc' 2.95.2 or later, `egcs' 1.0.2
    or later or `egcs 2.91.66', SGI C++, and SunPro C++ are some of the
    compilers that are known to work. `libg++' is not needed when
    using `gcc'.  `gcc' 2.7.x has a bug that makes it impossible to
    compile some perfectly legal C++ files, such as `sql/sql_base.cc'.
    If you have only `gcc' 2.7.x, you must upgrade your `gcc' to be
    able to compile MySQL.  `gcc' 2.8.1 is also known to have problems
    on some platforms, so it should be avoided if a new compiler
    exists for the platform.

    `gcc' 2.95.2 or later is recommended when compiling MySQL 3.23.x.

  * A good `make' program. GNU `make' is always recommended and is
    sometimes required. If you have problems, we recommend GNU `make'
    3.75 or newer.

If you are using a version of `gcc' recent enough to understand the
`-fno-exceptions' option, it is _very important_ that you use this
option.  Otherwise, you may compile a binary that crashes randomly. We
also recommend that you use `-felide-constructors' and `-fno-rtti'
along with `-fno-exceptions'. When in doubt, do the following:

    CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors \
           -fno-exceptions -fno-rtti" ./configure \
           --prefix=/usr/local/mysql --enable-assembler \
           --with-mysqld-ldflags=-all-static

On most systems, this gives you a fast and stable binary.

If you run into problems and need to file a bug report, please use the
instructions in *Note bug-reports::.

File: manual.info,  Node: quick-install,  Next: configure-options,  Prev: installing-source,  Up: installing-source

2.9.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> bin/mysql_install_db --user=mysql
    shell> chown -R root  .
    shell> chown -R mysql var
    shell> chgrp -R mysql .
    shell> bin/mysqld_safe --user=mysql &

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 *Note
post-installation::, 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. Pick the directory under which you want to unpack the distribution
    and change location into it.

  3. Obtain a distribution file using the instructions in *Note
    getting-mysql::.

  4. 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

  5. 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.

  6. 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.  *Note
    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 *Note
    bug-reports::.

    If the compile fails, see *Note compilation-problems::, for help.

  7. Install the distribution:

         shell> make install

    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 these commands as `root'.

    If you want to configure support for `InnoDB' tables, you should
    edit the `/etc/my.cnf' file, remove the `#' character before the
    option lines that start with `innodb_...', and modify the option
    values to be what you want. See *Note option-files::, and *Note
    innodb-configuration::.

  8. Change location into the installation directory:

         shell> cd /usr/local/mysql

  9. If you haven't installed MySQL before, you must create the MySQL
    grant tables:

         shell> bin/mysql_install_db --user=mysql

    If you run the command as `root', you should use the `--user'
    option as shown. The value of the option should be the name of the
    login account that you created in the first step to use for
    running the server. If you run the command while logged in as that
    user, you can omit the `--user' option.

    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.

10. Change the ownership of program binaries to `root' and ownership
    of the data directory to the user that you run `mysqld' as.
    Assuming that you are located in the installation directory
    (`/usr/local/mysql'), the commands look like this:

         shell> chown -R root  .
         shell> chown -R mysql var
         shell> chgrp -R mysql .

    The first command changes the owner attribute of the files to the
    `root' user. The second changes the owner attribute of the data
    directory to the `mysql' user. The third changes the group
    attribute to the `mysql' group.

11. 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
    *Note automatic-start::.

12. You can set up new accounts using the `bin/mysql_setpermission'
    script if you install the `DBI' and `DBD::mysql' Perl modules. For
    instructions, see *Note perl-support::.

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 that command fails immediately and prints `mysqld ended', you can
find some information in the `HOST_NAME.err' file in the data directory.

More information about `mysqld_safe' is given in *Note mysqld-safe::.

*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 *Note
post-installation::.

File: manual.info,  Node: configure-options,  Next: installing-source-tree,  Prev: quick-install,  Up: installing-source

2.9.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 *Note
environment-variables::. For a list of options supported by
`configure', run this command:

    shell> ./configure --help

Some of the more commonly used `configure' options are described here:

  * 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 *Note 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 filename must be an absolute pathname. You can also
    change the location of `mysql.sock' at server startup by using a
    MySQL option file. See *Note problems-with-mysql-sock::.

  * 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"

       * `egcs' 1.0.3a:

              CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors \
              -fno-exceptions -fno-rtti"

       * `gcc' 2.95.2:

              CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro \
              -felide-constructors -fno-exceptions -fno-rtti"

       * `pgcc' 2.90.29 or newer:

              CFLAGS="-O3 -mpentiumpro -mstack-align-double" CXX=gcc \
              CXXFLAGS="-O3 -mpentiumpro -mstack-align-double \
              -felide-constructors -fno-exceptions -fno-rtti"

    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 *Note
    mysql-binaries::. There are some configuration settings you can
    tweak to build an even faster binary, but these are only for
    advanced users. See *Note compile-and-link-options::.

    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 `big5', `cp1251', `cp1257', `czech',
    `danish', `dec8', `dos', `euc_kr', `gb2312', `gbk', `german1',
    `hebrew', `hp8', `hungarian', `koi8_ru', `koi8_ukr', `latin1',
    `latin2', `sjis', `swe7', `tis620', `ujis', `usa7', or
    `win1251ukr'.  See *Note character-sets::. (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 *Note
    set-option::, and *Note charset-connection::.

  * 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
    *Note debugging-server::.

  * 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 *Note threaded-clients::.

  * It is possible to build MySQL 5.0 with large table support using
    the `--with-big-tables' option, beginning with MySQL 5.0.4.

    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.

  * See *Note operating-system-specific-notes::, for options that
    pertain to particular operating systems.

  * See *Note secure-using-ssl::, for options that pertain to
    configuring MySQL to support secure (encrypted) connections.

File: manual.info,  Node: installing-source-tree,  Next: compilation-problems,  Prev: configure-options,  Up: installing-source

2.9.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 our most recent development source tree, first download and
install the BitKeeper free client if you do not have it. The client can
be obtained from `http://www.bitmover.com/bk-client.shar'.

To install the BitKeeper client on Unix, use these commands:

    shell> sh bk-client.shar
    shell> cd bk_client-1.1
    shell> make all
    shell> PATH=$PWD:$PATH

To install the BitKeeper client on Windows, use these instructions:

  1. Download and install Cygwin from http://cygwin.com
    (http://cygwin.com/).

  2. Make sure `gcc' and `make' have been installed under Cygwin. You
    can test this by issuing `which gcc' and `which make' commands. If
    either one is not installed, run Cygwin's package manager, select
    `gcc', `make', or both, and install them.

  3. Under Cygwin, execute these commands:

         shell> sh bk-client.shar
         shell> cd bk_client-1.1

    Then edit the `Makefile' and change the line that reads `$(CC)
    $(CFLAGS) -o sfio -lz sfio.c' to this:

         $(CC) $(CFLAGS) -o sfio sfio.c -lz

    Now run the `make' command and set the path:

         shell> make all
         shell> PATH=$PWD:$PATH

The BitKeeper free client is shipped with its source code. The only
documentation available for the free client is the source code itself.

After you have installed the BitKeeper client, you can access the MySQL
development source tree:

  1. Change location to the directory you want to work from, and then
    use the following command to make a local copy of the MySQL 5.0
    branch:

         shell> sfioball -r+ bk://mysql.bkbits.net/mysql-5.0 mysql-5.0

    In the preceding example, the source tree is set up in the
    `mysql-5.0/' subdirectory of your current directory.

    The initial download of the source tree may take a while,
    depending on the speed of your connection. Please be patient.

  2. You need GNU `make', `autoconf' 2.58 (or newer), `automake' 1.8,
    `libtool' 1.5, and `m4' to run the next set of commands. Even
    though many operating systems come with their own implementation
    of `make', chances are high that the compilation fails with
    strange error messages.  Therefore, it is highly recommended that
    you use GNU `make' (sometimes named `gmake') instead.

    Fortunately, a large number of operating systems ship with the GNU
    toolchain preinstalled or supply installable packages of these. In
    any case, they can also be downloaded from the following locations:

       * `http://www.gnu.org/software/autoconf/'

       * `http://www.gnu.org/software/automake/'

       * `http://www.gnu.org/software/libtool/'

       * `http://www.gnu.org/software/m4/'

       * `http://www.gnu.org/software/make/'

    To configure MySQL 5.0, you also need GNU `bison' 1.75 or later.
    Older versions of `bison' may report this error:

         sql_yacc.yy:#####: fatal error: maximum table size (32767) exceeded

    Note: The maximum table size is not actually exceeded; the error
    is caused by bugs in older versions of `bison'.

    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.0' with
    the appropriate directory name.

         shell> cd mysql-5.0
         shell> (cd bdb/dist; sh s_all)
         shell> (cd innobase; autoreconf --force --install)
         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
         shell> (cd innobase; aclocal; autoheader; autoconf; automake)
         shell> (cd bdb/dist; sh s_all)

    The command lines that change directory into the `innobase' and
    `bdb/dist' directories are used to configure the `InnoDB' and
    Berkeley DB (`BDB') storage engines. You can omit these command
    lines if you to not require `InnoDB' or `BDB' support.

    If you get some strange errors during this stage, verify that you
    really have `libtool' installed.

    A collection of our standard configuration scripts is located in
    the `BUILD/' subdirectory. You may find it more convenient to use
    the `BUILD/compile-pentium-debug' script than the preceding set of
    shell commands. To compile on a different architecture, modify the
    script by removing flags that are Pentium-specific.

  3. 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 `--unix-socket-path'
    options than those used for your production server.

  4. Play hard with your new installation and try to make the new
    features crash. Start by running `make test'. See *Note
    mysql-test-suite::.

  5. 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 *Note bug-reports::. 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.

  6. After initially copying the repository with `sfioball' to obtain
    the source tree, you should use `update' periodically to update
    your local copy. To do this any time after you have set up the
    repository, use this command:

         shell> update bk://mysql.bkbits.net/mysql-5.0

  7. You can examine the change history for the tree with all the diffs
    by viewing the `BK/ChangeLog' file in the source tree and looking
    at the `ChangeSet' descriptions listed there. To examine a
    particular changeset, you would have to use the `sfioball' command
    to extract two particular revisions of the source tree, and then
    use an external `diff' command to compare them. If you see some
    funny diffs or code that you have a question about, do not
    hesitate to send email to the MySQL `internals' mailing list. See
    *Note 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.

You can also browse changesets, comments, and source code online. To
browse this information for MySQL 5.0, go to
`http://mysql.bkbits.net:8080/mysql-5.0'.

File: manual.info,  Node: compilation-problems,  Next: mit-pthreads,  Prev: installing-source-tree,  Up: installing-source

2.9.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 *Note mit-pthreads::, 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 *Note mysql-binaries::, 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 want to compile MySQL with Berkeley DB
    support.

  * 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 *Note debugging-client::.

  * 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.

File: manual.info,  Node: mit-pthreads,  Next: windows-source-build,  Prev: compilation-problems,  Up: installing-source

2.9.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 *Note linux::.

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 *Note
which-os::.

MIT-pthreads is not part of the MySQL 5.0 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.tar.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.)