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”.
      MySQL source distributions are provided as compressed
      tar archives and have names of the form
      mysql-,
      where VERSION.tar.gzVERSION is a number like
      5.0.23.
    
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 Section 1.8, “How to Report Bugs or Problems”.
The basic commands that you must execute to install a MySQL source distribution are:
shell>groupadd mysqlshell>useradd -g mysql mysqlshell>gunzip < mysql-shell>VERSION.tar.gz | tar -xvf -cd mysql-shell>VERSION./configure --prefix=/usr/local/mysqlshell>makeshell>make installshell>cp support-files/my-medium.cnf /etc/my.cnfshell>cd /usr/local/mysqlshell>bin/mysql_install_db --user=mysqlshell>chown -R root .shell>chown -R mysql varshell>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 Section 2.10, “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:
Add a login user and group for mysqld to run as:
shell>groupadd mysqlshell>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.
          
Pick the directory under which you want to unpack the distribution and change location into it.
Obtain a distribution file using the instructions in Section 2.1.3, “How to Get MySQL”.
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
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.
Configure the release and compile everything:
shell>./configure --prefix=/usr/local/mysqlshell>make
When you run configure, you might want to specify other options. Run ./configure --help for a list of options. Section 2.9.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.8, “How to Report Bugs or Problems”.
          
If the compile fails, see Section 2.9.4, “Dealing with Problems Compiling MySQL”, for help.
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
            Section 4.3.2, “Using Option Files”, and
            Section 14.2.3, “InnoDB Configuration”.
          
Change location into the installation directory:
shell> cd /usr/local/mysql
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.
            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 varshell>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.
          
            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.10.2.2, “Starting and Stopping MySQL Automatically”.
          
            
            
            
            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 Section 2.14, “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 that command fails immediately and prints mysqld
        ended, you can find some information in the
        host_name.err
More information about mysqld_safe is given in Section 5.4.1, “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.10, “Post-Installation Setup and Testing”.
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 Appendix F, 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/mysqlshell>./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.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 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
            Section A.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"
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 Section 2.1.2.5, “MySQL Binaries Compiled by MySQL AB”. 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.4, “How Compiling and Linking Affects the Speed of MySQL”.
            If the build fails and produces errors about your compiler
            or linker not being able to create the shared library
            libmysqlclient.so.
            (where NN 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.
            library.
          N
            
            
            
            
            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 Section 5.11.1, “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=,
            you can define which additional character sets should be
            compiled into the server. LISTLIST 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 13.5.3, “SET Syntax”, and
            Section 10.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 Section E.1, “Debugging a MySQL 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 Section 22.2.15, “How to Make a Threaded Client”.
          
            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
            ((232)2)
            rows rather than 232 (~4.295E+09)
            rows. Previously it was necessary to pass
            -DBIG_TABLES to the compiler manually in
            order to enable this feature.
          
See Section 2.13, “Operating System-Specific Notes”, for options that pertain to particular operating systems.
See Section 5.9.7.2, “Using SSL Connections”, for options that pertain to configuring MySQL to support secure (encrypted) connections.
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.sharshell>cd bk_client-1.1shell>make allshell>PATH=$PWD:$PATH
To install the BitKeeper client on Windows, use these instructions:
Download and install Cygwin from http://cygwin.com.
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.
Under Cygwin, execute these commands:
shell>sh bk-client.sharshell>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 allshell>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:
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.
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:
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.0shell>(cd bdb/dist; sh s_all)shell>(cd innobase; autoreconf --force --install)shell>autoreconf --force --installshell>./configure # Add your favorite options hereshell>make
Or you can use BUILD/autorun.sh as a shortcut for the following sequence of commands:
shell>aclocal; autoheadershell>libtoolize --automake --forceshell>automake --force --add-missing; autoconfshell>(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.
          
            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.
          
Play hard with your new installation and try to make the new features crash. Start by running make test. See Section 24.1.2, “MySQL Test Suite”.
            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.8, “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.
          
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
            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
            Section 1.7.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.
          
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.
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.9.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.cacheshell>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=gccshell>CFLAGS=-O3shell>CXX=gccshell>CXXFLAGS=-O3shell>export CC CFLAGS CXX CXXFLAGS
See Section 2.1.2.5, “MySQL Binaries Compiled by MySQL AB”, for a list of flag definitions that have been found to be useful on various systems.
            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
            Section E.2, “Debugging a MySQL 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.
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”.
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://www.mysql.com/Downloads/Contrib/pthreads-1_60_beta6-mysql.tar.gz
        After downloading, extract this source archive into the top
        level of the MySQL source directory. It 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.)
          
These instructions describe how to build binaries from source for MySQL 5.0 on Windows. Instructions are provided for building binaries from a standard source distribution or from the BitKeeper tree that contains the latest development source.
Note: The instructions here are strictly for users who want to test MySQL on Windows from the latest source distribution or from the BitKeeper tree. For production use, MySQL AB does not advise using a MySQL server built by yourself from source. Normally, it is best to use precompiled binary distributions of MySQL that are built specifically for optimal performance on Windows by MySQL AB. Instructions for installing a binary distributions are available in Section 2.3, “Installing MySQL on Windows”.
To build MySQL on Windows from source, you need the following compiler and resources available on your Windows system:
Visual Studio 7.1 compiler system
Between 3GB and 5GB disk space.
Windows 2000 or higher.
The exact system requirements can be found here: http://msdn.microsoft.com/vstudio/productinfo/sysreqs/default.aspx
You also need a MySQL source distribution for Windows. There are two ways to obtain a source distribution:
Obtain a source distribution packaged by MySQL AB. These are available from http://dev.mysql.com/downloads/.
You can package a source distribution yourself from the latest BitKeeper developer source tree. If you plan to do this, you must create the package on a Unix system and then transfer it to your Windows system. (Some of the configuration and build steps require tools that work only on Unix.) The BitKeeper approach thus requires:
A system running Unix, or a Unix-like system such as Linux.
BitKeeper 3.0 installed on that system. See Section 2.9.3, “Installing from the Development Source Tree”, for instructions how to download and install BitKeeper.
If you are using a Windows source distribution, you can go directly to Section 2.9.6.1, “Building MySQL Using VC++”. To build from the BitKeeper tree, proceed to Section 2.9.6.2, “Creating a Windows Source Package from the Latest Development Source”.
        If you find something not working as expected, or you have
        suggestions about ways to improve the current build process on
        Windows, please send a message to the win32
        mailing list. See Section 1.7.1, “MySQL Mailing Lists”.
      
Note: VC++ workspace files for MySQL 4.1 and above are compatible with Microsoft Visual Studio 7.1 and tested by MySQL AB staff before each release.
Follow this procedure to build MySQL:
              Create a work directory (for example,
              C:\workdir).
            
              Unpack the source distribution in the aforementioned
              directory using WinZip or another
              Windows tool that can read .zip
              files.
            
Start Visual Studio.
From the , select .
              Open the mysql.dsw workspace you find
              in the work directory.
            
From the menu, select the menu.
Click over the screen selecting and click .
Press F7 to begin the build of the debug server, libraries, and some client applications.
Compile the release version in the same way.
              Debug versions of the programs and libraries are placed in
              the client_debug and
              lib_debug directories. Release
              versions of the programs and libraries are placed in the
              client_release and
              lib_release directories. Note that if
              you want to build both debug and release versions, you can
              select the  option
              from the  menu.
            
              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 pathnames.
              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.3.2, “Using Option Files”.) If you have an
              existing data directory elsewhere that you want to use,
              you can specify its pathname instead.
            
              Start your server from the
              client_release or
              client_debug directory, depending on
              which server you want to use. The general server startup
              instructions are in
              Section 2.3, “Installing MySQL on Windows”. You must adapt the
              instructions appropriately if you want to use a different
              base directory or data directory.
            
              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 that exists in your
              client_release or
              client_debug directory.
            
When you are satisfied that the programs you have built are working correctly, stop the server. Then install MySQL as follows:
              Create the directories where you want to install MySQL.
              For example, to install into
              C:\mysql, use these commands:
            
C:\>mkdir C:\mysqlC:\>mkdir C:\mysql\binC:\>mkdir C:\mysql\dataC:\>mkdir C:\mysql\shareC:\>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\includeC:\>mkdir C:\mysql\libC:\>mkdir C:\mysql\lib\debugC:\>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.14, “Perl Installation Notes”.
              From the workdir directory, copy into
              the C:\mysql directory the following
              directories:
            
C:\>cd \workdirC:\workdir>copy client_release\*.exe C:\mysql\binC:\workdir>copy client_debug\mysqld.exe C:\mysql\bin\mysqld-debug.exeC:\workdir>xcopy scripts\*.* C:\mysql\scripts /EC:\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\debugC:\workdir>copy lib_debug\libmysql.* C:\mysql\lib\debugC:\workdir>copy lib_debug\zlib.* C:\mysql\lib\debugC:\workdir>copy lib_release\mysqlclient.lib C:\mysql\lib\optC:\workdir>copy lib_release\libmysql.* C:\mysql\lib\optC:\workdir>copy lib_release\zlib.* C:\mysql\lib\optC:\workdir>copy include\*.h C:\mysql\includeC:\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
Set up and start the server in the same way as for the binary Windows distribution. See Section 2.3, “Installing MySQL on Windows”.
To create a Windows source package from the current BitKeeper source tree, use the instructions here. This procedure must be performed on a system running a Unix or Unix-like operating system because some of the configuration and build steps require tools that work only on Unix. For example, the following procedure is known to work well on Linux.
Copy the BitKeeper source tree for MySQL 5.0. For instructions on how to do this, see Section 2.9.3, “Installing from the Development Source Tree”.
Configure and build the distribution so that you have a server binary to work with. One way to do this is to run the following command in the top-level directory of your source tree:
shell> ./BUILD/compile-pentium-max
After making sure that the build process completed successfully, run the following utility script from top-level directory of your source tree:
shell> ./scripts/make_win_src_distribution
This script creates a Windows source package to be used on your Windows system. You can supply different options to the script based on your needs. It accepts the following options:
                  --help
                
Display a help message.
                  --debug
                
Print information about script operations, do not create package.
                  --tmp
                
Specify the temporary location.
                  --suffix
                
The suffix name for the package.
                  --dirname
                
Directory name to copy files (intermediate).
                  --silent
                
Do not print verbose list of files processed.
                  --tar
                
                  Create tar.gz package instead of
                  .zip package.
                
              By default, make_win_src_distribution
              creates a Zip-format archive with the name
              mysql-,
              where VERSION-win-src.zipVERSION represents the
              version of your MySQL source tree.
            
Copy or upload the Windows source package that you have just created to your Windows machine. To compile it, use the instructions in Section 2.9.6.1, “Building MySQL Using VC++”.
        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.