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.13, “Environment Variables”. For a list of options supported by configure, run this command:
shell> ./configure --help
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.9.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 do not 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.3, “Using Option Files”.
This option specifies the port number on which the server listens for TCP/IP connections. The default is port 3306. To listen on a different port, use a configure command like this:
shell> ./configure --with-tcp-port=3307
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 A.5.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 do not 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 Oracle Corporation”. 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.1, “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 N
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.
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
.
(Additional character sets might be available. Check the
output from ./configure --help for the
current list.)
As of MySQL 4.1.1, the default collation may also be
specified. MySQL uses the
latin1_swedish_ci
collation. To change
this, use the
--with-collation
option:
shell> ./configure --with-collation=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.)
Before MySQL 4.1, if you change character sets after
having created any tables, you have to run
myisamchk -r -q
--set-character-set=charset_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. LIST
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.
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 17.6.15.2, “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|
option provides control over compression library support.
The value DIR
no
explicitly disables
compression support. bundled
causes the
zlib
library bundled in the MySQL sources
to be used. A DIR
path name
specifies the directory in which to find the compression
library sources.
It is possible to build MySQL with big table support using
the --with-big-tables
option, beginning with the following MySQL versions:
4.0 series: 4.0.25
4.1 series: 4.1.11
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.12, “Operating System-Specific Notes”, for options that pertain to particular operating systems.
See Section 5.6.6.2, “Using SSL Connections”, for options that pertain to configuring MySQL to support secure (encrypted) connections.
User Comments
For all who had the same Prolem like me :
If you get some error like this :
No curses/termcap library found
configure you're Source Distribution with the
option --with-named-curses-
libs=/your/path/to/lib/libncurses.so.5.0
Best Regards DaPhreak
If you get an error like Internal Compiler Error
Send a bug to gnu.gcc ...
Try running the previous command(step) with out
-O3 option ..This is a compiler optimisation option...
Regards,
Ram.
Just some info about the option "mpentiumpro" and "03":
gcc: unrecognized option `-03' (see last note)
`-mpentiumpro' is deprecated. Use `-march=pentiumpro' or `-mcpu=pentiumpro' instead.
I have a gcc version: gcc (GCC) 3.3.6
make version: GNU Make 3.80
(fresh out of the box slackware 10.2)
If you can not compile using --with-debug, do a "make distclean" before running make.
Note that -O3 is "minus O 3" not "minus zero 3"
The O stands for optimisation and the biger the number, the more optimised. However, anything over 3 is almost certain to give broken binaries. 2 is usualy a safe compromise.
-march will give you a binary only compatible for the specified CPU while -mcpu will give a binary compatible with all cpus but optimised for the one specified.
This is especialy important for the difference between amd and intel cpu, or if using the binary on a CPU of a previous generation. For exemple, if you optimise for a Pentium 3 and try to run on a pentium 2, it will work if you use -mcpu, but not if you used -march
You might want to look at the gcc doc before using those options.
Add your own comment.