2.8.2. 典型配置选项

configure脚本给你一个很大的控制权来控制如何配置MySQL源码分发版。一般使用configure命令行的选项来进行。你也可以用某些环境变量作用于configure。请参见附录F:环境变量。要查看configure支持的选择列表,可以运行命令:

shell> ./configure --help
  • 如果只编译MySQL客户端库和客户端程序而不是服务器,使用--without-server选项:
  • shell> ./configure --without-server

如果你没有C++编译器,则不能编译mysql(有一个客户端程序需要C++)。在这种情况下,你可以去掉configure里面测试C++编译器的代码,然后运行带有 --without-server选项的./configure。编译步骤步将仍然尝试构造mysql,但是你可以忽略任何关于“mysql.cc”的警告。(如果make停止,试试make -k告诉它即使出错继续剩下的构造步骤)。

·         如果你想要构建嵌入式MySQL (libmysqld.a),你应当使用--with-embedded-server选项。

  • 如果你不想要位于“/usr/local/var”目录下面的日志(log)文件和数据库,使用类似于下列configure命令的一个:
  • shell>./configure--prefix=/usr/local/mysql
  • shell>./configure--prefix=/usr/local
  •        localstatedir=/usr/local/mysql/data

第一个命令改变安装前缀以便将所有内容安装到“/usr/local/mysql”下面而非 默认的“/usr/local”。第二个命令保留默认安装前缀,但是覆盖了数据库目录默认目录(通常是“/usr/local/var)并且把它改为/usr/local/mysql/data。编译完MySQL后,可以通过选项文件更改这些选项。请参见4.3.2节,“使用选项文件”

  • 如果你正在使用Unix并且你想要MySQL的套接字位于 默认位置以外的某个地方(通常在目录“/tmp”或“/var/run”,使用象这样的configure的命令:
  • shell> ./configure\-- with-unix-socket-
  • path=/usr/local/mysql/tmp/mysql.sock

注意给出的文件名必须是一个绝对路径。你还可以在以后使用MySQL选项文件更改mysql.sock的位置。请参见A.4.5节,“如何保护或更改MySQL套接字文件/tmp/mysql.sock

  • 如果你想编译静态链接程序(例如,制作二进制分发版、获得更快的速度或与解决与RedHat分发版的一些问题),像这样运行configure

·                shell>./configure --with-client-ldflags=-all-static\

·                        --with-mysqld-ldflags=-all-static

  • 如果你正在使用gcc并且没有安装libg++libstdc++,你可以告诉configure使用gcc作为C++编译器:
  • shell> CC=gcc  CXX=gcc  ./configure

当你使用gcc作为C++编译器用时,它将不试图链接libg++libstdc++。即使你安装了这些库,这样也很好,因为过去使用MySQL时,它们的部分版本会出现一些奇怪的问题。

下面列出了一些经常使用的编译器和环境变量设定值。

o        gcc 2.7.2

o                     CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors"

o        egcs 1.0.3a

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

o        gcc 2.95.2

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

o        pgcc 2.90.29 或更新版:

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

在大多数情况,在configure行使用前面列出的选项并加入下面的选项,可以得到合理的优化的MySQL二进制:

--prefix=/usr/local/mysql --enable-assembler \
--with-mysqld-ldflags=-all-static

换句话说,对于所有最近的gcc版,整个configure行应为:

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

我们在MySQL网址http://www.mysql.com/提供的二进制均已经编译过并进行了优化,对于大多数用户应当比较完善。请参见2.1.2.5节,“MySQL AB编译的MySQL二进制版本”。其中有一些配置设定值,可以选用来构建更快的二进制,但是只适用高级用户。请参见7.5.4节,“编译和链接怎样影响MySQL的速度”

如果构造失败并且产生有关编译器或链接器的错误,不能创建共享库“libmysqlclient.so.#(#”是一个版本号), 你可以通过为configure指定--disable-shared选项来解决此问题。在这种情况下,configure将不构造一个共享libmysqlclient.so.#库。

  • 默认地,MySQL使用latin1(cp1252)字符集。为了改变 默认设置,使用--with-charset选项:
  • shell> ./configure -- with-charset=CHARSET

CHARSET可以是big5cp1251cp1257czechdanishdec8doseuc_krgb2312gbkgerman1hebrewhp8hungariankoi8_rukoi8_ukrlatin1latin2sjisswe7tis620ujisusa7win1251ukr。请参见5.10.1节,“数据和排序用字符集”

可以指定默认校对规则。MySQL默认使用latin1_swedish_ci校对规则。要想更改,使用--with-collation选项:

shell> ./configure --with-collation=COLLATION

要想更改字符集和校对规则,要同时使用--with-charset--with-collation选项。 校对规则必须是字符集的合法校对规则。(使用SHOW COLLATION语句来确定每个字符集使用哪个校对规则)

如果想在服务器和客户端之间变换字符,你应该看一下SET OPTION CHARACTER SET命令。请参见13.5.3节,“SET语法”

警告:如果你在创建了任何数据库表之后改变字符集,你将必须对每个表运行myisamchk -r -q --set-character-set=charset,否则索引可能不正确地排序。(如果安装了MySQL,创建一些表,然后重新配置MySQL使用一个不同的字符集并且重新安装它,这时就可能发生这种情况。)

通过configure选项--with-extra-charsets=LIST,你可以定义在服务器中再定义哪些字符集。LIST 指下面任何一项:

o        空格间隔的一系列字符集名

o        complex -,以包括不能动态装载的所有字符集

o        all –,以将所有字符集包括进二进制

  • 为了配置MySQL带有调试代码,使用--with-debug选项:
  • shell> ./configure --with-debug

这导致包含一个安全的内存分配器,能发现一些错误和并提供关于正在发生的事情的输出。请参见E.1节,“调试MySQL服务器”

·         如果客户端程序使用线程,还必须使用--enable-thread-safe-client配置选项来编译线程安全版的MySQL客户端库。将创建一个libmysqlclient_r库,可以用来连接应用程序线程。请参见25.2.15节,“如何生成线程式客户端”

·         可以使用--with-big-tables选项构建支持大数据库表的MySQL

该选项使变量用来将表行数保存到unsigned long long中而不是unsigned long。结果是允许表有大约1.844E+19 ((232)2)行而不是232 (~4.295E+09) 行。在以前,要完成该功能必须手动将-DBIG_TABLES传递给编译器。

属于特定系统的选项可在本章特定系统的小节里找到。请参见 2.12节,“具体操作系统相关的注意事项”
关注编程学问公众号