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 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 don't have a C++ compiler, mysql will not compile (it is the one client program that requires C++). In this case, you can remove the code in configure that tests for the C++ compiler and then run ./configure with the --without-server option. The compile step will still try to build mysql, but you can ignore any warnings about mysql.cc. (If make stops, try make -k to tell it to continue with the rest of the build even if errors occur.)
If you want to get an embedded MySQL library (libmysqld.a) you should 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. After you have compiled MySQL, you can change these options with option files. See Option files.
If you are using Unix and you want the MySQL socket located 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
Note that the given file must be an absolute pathname. You can also later change the location of mysql.sock by using a MySQL option file. See Problems with mysql.sock.
If you want to compile statically linked programs (for example, to make a binary distribution, to get more speed, 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 will not attempt to link in libg++ or libstdc++. This may be a good idea to do even if you have the above libraries installed, as some versions of these libraries 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 optimal 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://www.mysql.com/ are all compiled with full optimization and should be perfect for most users. See MySQL binaries. There are some configuration setings you can tweak to make an even faster binary, but this is only for advanced users. See 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.# (# is a version number), you can work around this problem by giving the --disable-shared option to configure. In this case, configure will not build a shared libmysqlclient.so.# library.
You can configure MySQL not to use DEFAULT column values for non-NULL columns (that is, columns that are not allowed to be NULL). See constraint NOT NULL.
shell> CXXFLAGS=-DDONT_USE_DEFAULT_FIELDS ./configure
The effect of this flag is to cause any INSERT statement to fail unless it provides explicit values for all columns that require a non-NULL value.
By default, MySQL uses the ISO-8859-1 (Latin1) 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 Character sets.
If you want to convert characters between the server and the client, you should take a look at the SET CHARACTER SET command. See SET.
Warning: If you change character sets after having created any tables, you will have to run myisamchk -r -q --set-character-set=charset on every table. Your indexes may be sorted incorrectly otherwise. (This can happen if you install MySQL, create some tables, then reconfigure MySQL to use a different character set and reinstall it.)
With the configure option --with-extra-charsets=LIST, you can define which additional character sets should be compiled into the server. LIST is either a list of character sets separated with spaces, complex to include all characters that can't be dynamically loaded, or all to include all character sets into the binaries.
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 Debugging server.
If your client programs are using threads, you also must compile a thread-safe version of the MySQL client library with the --enable-thread-safe-client configure options. This will create a libmysqlclient_r library with which you should link your threaded applications. See Threaded clients.
Options that pertain to particular systems can be found in the system-specific section of this manual. See Operating System Specific Notes.