2.8. 使用源码分发版安装MySQL
- 2.8.1. 源码安装概述
- 2.8.2. 典型配置选项
- 2.8.3. 从开发源码树安装
- 2.8.4. 处理MySQL编译问题
- 2.8.5. MIT-pthreads注意事项
- 2.8.6. 在Windows下从源码安装MySQL
- 2.8.7. 在Windows下编译MySQL客户端
安装源码之前,首先检查我们的二进制是否适合你的平台,是否可以工作。我们做了大量的工作确保我们的二进制用最合适的选项来构建。
要获得MySQLa 源码分发版,参见2.1.3节,“怎样获得MySQL”。
MySQL源码分发版为tar压缩文件,文件名格式为mysql-VERSION.tar.gz,其中 VERSION是版本号,例如5.1.2-alpha。
你需要下列工具构造并安装MySQL源码:
·GNU gunzip解压缩该分发版。
·一个适当的tar解包分发版。GNU tar已知可以。一些操作系统中含有预安装的tar,已知有问题。例如,已知Mac OS X tar和Suntar对于长文件名有问题。在Mac OS X中,你可以使用预安装的gnutar程序。在其它系统中若tar不完善,你应当首先安装GNU tar。
·一个能工作的ANSI C++编译器。gcc> = 2.95.2、egcs> = 1.0.2或egcs 2.91.66、SGI C++和SunPro C++是一些已知能工作的编译器。当使用gcc时,不需要libg++。gcc2.7.x有一个缺陷,使得它可能不能编译一些完全合法的C++文件,例如“sql/sql_base.cc”。如果你仅有gcc2.7.x,你必须升级gcc才能编译MySQL。已知gcc 2.8.1在某些平台上有一些问题,因此如果平台上有新的编译器,则不要使用gcc 2.8.1。
编译MySQL 3.23.x时,建议使用gcc 2.95.2或更新版。
· 一个优秀的make程序。总是推荐GNUmake且有时必须使用。如果你有问题,我们推荐试一试GNUmake3.75或更新版。
如果你使用的gcc版本足够新,可以识别-fno-exceptions选项,则使用该选项非常重要。否则,你编译二进制时出现问题。我们建议你同时使用-felide-constructors和-fno-rtti选项。当有疑问时,执行下面操作:
CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors \
-fno-exceptions -fno-rtti" ./configure \
--prefix=/usr/local/mysql --enable-assembler \
--with-mysqld-ldflags=-all-static
在大多数系统中,可以得到快速、稳定的二进制。
如果你遇到问题,在把问题邮寄到MySQL邮件目录时,请总是使用mysqlbug,就算问题不是一个缺陷,mysqlbug收集系统信息,将有助于其它人解决你的问题。不使用mysqlbug,你将减少得到问题的解决方案的可能性!在解包分发版后,你会在“bin”目录下找到mysqlbug。请参见1.7.1.3节,“如何通报缺陷和问题”。
2.8.1. 源码安装概述
你必须执行的安装MySQL源码分发版的基本命令是:
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 &
如果从一个源码RPM开始,那么执行如下命令:
shell> rpmbuild --rebuild --clean MySQL-VERSION.src.rpm
这样你制作一个可以安装的二进制RPM。对于旧版本的RPM,你可能需要替换用rpm替换命令rpmbuild。
注释:该过程不为任何MySQL账户设置密码。完成下面的过程后,根据2.9节,“安装后的设置和测试”进行安装后的设置和测试。
以下是安装MySQL源码分发版的更详细的描述:
1. 为mysqld增加一个登录用户和组:
2. shell> groupadd mysql
3. shell> useradd -g mysql mysql
这些命令将增加MySQL组和 MySQL用户。不同版本的Unix中,useradd和groupadd的语法可能会稍有不同。还可以称为adduser和addgroup。
你可能会将这些用户和组命名为mysql之外的名称。如果是这样,在下面的步骤中替换为相应的名称。
4. 挑选一个你想解开分发包的目录,进入该目录。
5. 从2.1.3节,“怎样获得MySQL”中列出的站点之一获得一个分发文件。
6. 在当前目录下解包分发版:
7. shell> gunzip < /path/to/mysql-VERSION.tar.gz | tar xvf -
该命令创建mysql-VERSION目录。
使用GNU tar,则不再需要gunzip。你可以用下面的命令来解包和提取分发:
shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz
8. 进入解包分发版的顶级目录:
9. shell> cd mysql-VERSION
请注意目前必须从顶级目录配置和构建MySQL。你不能在其它目录中构建。
10.配置发布版并且编译:
11.shell> ./configure --prefix=/usr/local/mysql
12.shell> make
当你运行configure时,你可能想要指定一些选项,运行./configure --help得到一个选项列表。2.8.2节,“典型配置选项”讨论一些很有用的选项。
如果configure失败,你将向MySQL邮件目录发送包含你认为能帮你解决该问题的包含“config.log”中所有行的邮件,也要包括configure的最后几行输出。用mysqlbug脚本邮寄错误报告。请参见1.7.1.3节,“如何通报缺陷和问题”。
如果编译失败,参见2.8.4节,“处理MySQL编译问题”寻求帮助。
13.安装分发版:
14.shell> make install
如果你想要设置一个选项文件,使用support-files目录中的一个作为模板。例如:
shell> cp support-files/my-medium.cnf /etc/my.cnf
可能你需要用root用户运行这些命令。
如果想要配置为支持InnoDB表,应当编辑/etc/my.cnf文件,去掉innodb_...开始选项行前面的#符,并将选项值改为你想要的。请参见4.3.2节,“使用选项文件”和15.2.3节,“InnoDB配置”。
15.进入安装目录:
16.shell> cd /usr/local/mysql
17.如果还没有安装的MySQL,必须创建MySQL授权表:
18.shell> bin/mysql_install_db --user=mysql
如果用root运行命令,应当使用--user选项。选项的值应与你在第一步为运行服务器所创建的登录账户相同。如果用该用户登录来运行命令,可以省略--user选项。
用mysql_install_db创建MySQL授权表后,需要手动重新启动服务器
19.将程序二进制的所有权改为root,数据目录的所有权改为你运行mysqld的用户。如果位于安装目录(/usr/local/mysql)下,命令应为:
20.shell> chown -R root .
21.shell> chown -R mysql var
22.shell> chgrp -R mysql .
第一个命令将文件的所有属性改为root用户。第二个命令将数据目录的所有属性改为mysql用户。第三个命令将组属性改为mysql组。
23.如果你喜欢在引导机器时自动启动MySQL,你可以拷贝support-files/mysql.server文件到你系统有启动文件的地方。更多的信息可以在support-files/mysql.server脚本中和2.9.2.2节,“自动启动和停止MySQL”中找到。
24.如果安装了DBI和DBD::mysqlPerl模块,可以使用bin/mysql_setpermission脚本增加新账户。关于说明,参见2.13节,“Perl安装注意事项”。
在所有东西被安装以后,你应当使用该命令初始化并且测试你的分发版:
shell> /usr/local/mysql/bin/mysqld_safe --user=mysql &
如果这个命令提示mysqld daemon ended并马上失败,那么你能在数据目录中的文件“hostname'.err”找到一些信息。
关于mysqld_safe的详细信息参见5.1.3节,“mysqld_safe:MySQL服务器启动脚本”。
注释:MySQL授权表中的账户开始没有密码。启动服务器后,你应当使用2.9节,“安装后的设置和测试”中的说明来设置密码。
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时,它们的部分版本会出现一些奇怪的问题。
下面列出了一些经常使用的编译器和环境变量设定值。
ogcc 2.7.2:
o CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors"
oegcs 1.0.3a:
o CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors \
o -fno-exceptions -fno-rtti"
ogcc 2.95.2:
o CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro \
o -felide-constructors -fno-exceptions -fno-rtti"
opgcc 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可以是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或win1251ukr。请参见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空格间隔的一系列字符集名
ocomplex -,以包括不能动态装载的所有字符集
oall–,以将所有字符集包括进二进制
- 为了配置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节,“具体操作系统相关的注意事项”2.8.3. 从开发源码树安装
注意:如果你想帮助我们测试新代码,应当阅读本节。如果你只想在系统上安装并运行MySQL,应当使用标准发布分发版(二进制或源码分发版)。
要想获得我们的最新开发源码树,应使用说明:
1. 从http://www.bitmover.com/bk-client.shar下载BitKeeper免费客户端。
2. 在Unix上安装免费客户端:
3. shell> sh bk-client.shar
4. shell> cd bk_client-1.1
5. shell> make all
6. shell> PATH=$PWD:$PATH
在Windows上的安装方法:
·从http://cygwin.com下载并安装Cygwin。
·确保gcc和make已经安装到Cygwin。可以用which gcc和 which make命令进行测试。如果任何一个没有安装,运行 Cygwin安装包管理器,选择gcc、make并安装。
·在Cygwin中,运行:
· shell> sh bk-client.shar
· shell> cd bk_client-1.1
然后编辑Makefile并将行s$(CC) $(CFLAGS) -o sfio -lz sfio.c更改为:
$(CC) $(CFLAGS) -o sfio sfio.c -lz
现在运行make命令并设置路径:
shell> make all
shell> PATH=$PWD:$PATH
7. 安装BitKeeper免费客户端后,首先进入工作目录,然后使用以下命令在本地复制MySQL 5.1:
8. shell> sfioball -r+ bk://mysql.bkbits.net/mysql-5.1 mysql-5.1
一般情况,你不需要自己构建文档,因为我们已经在http://dev.mysql.com/doc/提供了许多格式。我们每天更新你可以下载的格式(HTML、PDF等),因此你没有必要从MySQLdoc树中的DocBook XML基本格式来创建。如果你想要复制文档库,使用下面的命令:
shell> sfioball -r+ bk://mysql.bkbits.net/mysqldoc mysqldoc
在前面的例子中,在当前目录的MySQL-5.1/子目录中设置源码树。
如果你位于防火墙后面,只能初始化HTTP连接,还可以通过HTTP使用BitKeeper。
如果需要使用代理服务器,设置环境变量http_proxy指向代理:
shell> export http_proxy="http://your.proxy.server:8080/"
当复制库时用http://替换bk://。例如:
shell> sfioball -r+ http://mysql.bkbits.net/mysql-5.1 mysql-5.1
下载源码树可能需要一段时间,取决于连接速度。请耐心等待。
9. 要想更新本地MySQL 5.1库复制,使用命令:
10.shell> update bk://mysql.bkbits.net/mysql-5.1
11.你需要GNU make、autoconf 2.58 (或更新版)、automake 1.8、libtool 1.5和m4来运行后面的命令。尽管许多操作系统安装了make,很可能编译失败,出现许多奇怪的缺陷消息。因此,强烈建议你使用GNUmake(有时名为gmake)。
幸运的是,大量的操作系统预装了GNU工具链或提供了可安装软件包。你可以随时从下面的地址下载:
·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/
要想配置MySQL 5.1,你还需要GNUbison 1.75或更新版。旧版本的bison会报告错误:
sql_yacc.yy:#####: fatal error: maximum table size (32767) exceeded
注释:实际上并没有超出最大表空间;这是由旧版本的bison的缺陷造成的该问题。
下面的例子显示了配置源码树需要的典型命令。第一个cd命令将位置改为树的顶级目录;用相应目录名替换MySQL-5.1。
shell> cd mysql-5.1
shell> bk -r edit
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)
shell> ./configure # Add your favorite options here
shell> make
对于下面的命令,可以使用BUILD/autorun.sh作为快捷方式:
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)
使用将目录改为innobase和bdb/dist目录的命令行来配置InnoDB和 Berkeley DB (BDB)储存引擎。如果你不需要InnoDB或BDB支持,你可以省略这些命令行。
如果在该阶段你遇到一些奇怪的错误,请确认你是否已经安装了 libtool。
标准配置脚本位于BUILD/子目录。你会发现使用BUILD/compile-pentium-debug脚本比使用前面的外壳命令要方便得多。要想在不同的架构上编译,可以修改脚本,即去掉Pentium相关标志。
12.构建完成后,运行make install。在产品机器上运行时应注意;该命令会覆盖你正使用的版本。如果你安装了另一个MySQL,我们建议你使用 与你的产品服务器上不同的--prefix、--with-tcp-port和--unix-socket-path选项值来运行./configure。
13.强制运行新安装和尝试会破坏新功能。应先运行make test。请参见27.1.2节,“MySQL测试套件”。
14.如果你已经进入make阶段而分发版不编译,请报告给我们的http://bugs.mysql.com/中的缺陷数据库。如果你已经安装了GNU工具的最新版本,如果视图处理配置文件时出错,请报告给我们。但是,如果你执行aclocal并且遇到command not found error或类似问题,不要报告给我们。而是应确保安装了所有必要的工具,并且PATH变量设置正确,保证外壳命令可以找到它们。
15.复制完库(sfioball)获得源码树后,你应当定期更新库(update)。
16.你可以检查树的更改史,浏览源码树中的BK/ChangeLog文件并查看ChangeSet描述找到所有不同点。要想检查特殊的更改集,必须使用sfioball命令提取源码树的两次不同的修订,然后使用外部diff命令来比较。如果你看到有疑问的奇怪的不同之处或代码,一定要向MySQLinternals邮件列表发送邮件。请参见1.7.1.1节,“The MySQL邮件列表”。并且,如果你有更好的思想,请向上述地址发送邮件。
17.BitKeeper免费客户端预装了源码。免费客户端可用的唯一文档是源码本身。
你还可以在线浏览更改集、注释和源码。要想浏览MySQL 5.1的相关信息,请到http://mysql.bkbits.net:8080/mysql-5.1。
2.8.4. 处理MySQL编译问题
所有MySQL程序在Solaris或Linux上使用gcc编译并且没有任何警告。在其它系统上,由于系统包含文件的差别可能会发生警告。对于使用MIT-pthreads时发生的警告。请参见2.8.5节,“MIT-pthreads注意事项”。其它问题,检查下面的表。
许多问题的解决方案涉及重新配置。如果你确实需要重新配置,注意下列事项:
- 如果configure在它已经被运行了以后运行,它可以使用先前收集的信息。这个信息存储在“config.cache”里面。当configure启动时,它寻找该文件而且如果它存在,假定信息仍然是正确的,读入它的内容。当你重新配置时,该假设无效。
- 每次运行configure的时候,必须运行make再重新编译。然而,你可能想要把先前构造的老的目标文件删除,因为它们使用不同的配置选项编译而成。
为了防止使用旧的配置信息或目标文件,重新运行configure前运行这些命令:
shell> rm config.cache
shell> make clean
另外,你可以运行make distclean。
下表描述了一些最常发生的编译MySQL的问题:
- 如果在编译“sql_yacc.cc”时,遇到如下错误,可能是存储器或交换空间溢出:
·Internal compiler error: program cc1plus got fatal signal 11
·Out of virtual memory
·Virtual memory exhausted
该问题是gcc要求大量的内存编译带有嵌入函数(inline function)的“sql_yacc.cc”。试试以--with-low-memory选项运行configure:
shell> ./configure -- with-low-memory
如果你正在使用gcc,该选项使得将-fno-inline加到编译行,如果你正使用其它的编译器,则加入-O0。你应该试一试--with-low-memory选项,即使你有特别多的存储器和交换空间,而你认为不可能运行得溢出。这个问题甚至会在很慷慨的硬件配置的系统上出现,通常用--with-low-memory选项修正它。
- 默认情况,configure选则c++作为编译器并用-lg++选项的GNUc++链接。如果你正在使用gcc,这个特性在配置期间导致如下问题:
· configure: error: installation or configuration problem:
· C++ compiler cannot create executables.
也可能在编译期间看到g++、libg++或libstdc++相关的问题。
这些问题的一个原因是你可能没有g++,或可能有g++但无libg++或libstdc++。看一下“config.log”文件。它应该包含c++编译器不能工作的准确原因!为了解决这些问题,可以使用gcc作为C++编译器。试试设置环境变量CXX为"gcc -O3"。例如:
shell> CXX="gcc -O3" ./configure
可以工作,因为gcc象g++一样编译C++源码,但默认地它不链接libg++或libstdc++。
解决这些问题的其它方法当然是安装g++、libg++和libstdc++。然而,我们建议不要在MySQL中使用libg++或libstdc++,因为只会增加mysqld二进制空间而不会带来任何好处。部分版本的库在过去曾经给用户带来一些奇怪的问题。
·如果你的编译以下面任何错误而失败,必须升级make版本到GNUmake:
·making all in mit-pthreads
·make: Fatal error in reader: Makefile, line 18:
·Badly formed macro assignment
或:
make: file `Makefile' line 18: Must be a separator (:
或:
pthread.h: No such file or directory
已知Solaris和FreeBSD的make程序有问题。
已知GNU make 3.75能工作。
·如果你想要定义C或C++编译器所使用的标志,把标志加到CFLAGS和CXXFLAGS环境变量中即可。也可以使用CC和CXX来指定编译器名字。例如:
·shell> CC=gcc
·shell> CFLAGS=-O3
·shell> CXX=gcc
·shell> CXXFLAGS=-O3
·shell> export CC CFLAGS CXX CXXFLAGS
对于已经知道在不同系统上有用的标志定义列表,参见2.1.2.5节,“MySQL AB编译的MySQL二进制版本”。
·如果你遇到象如下的一条错误消息,则需要升级gcc编译器:
·client/libmysql.c:273: parse error before `__attribute__'
gcc2.8.1已知可以工作,但是我们推荐使用gcc 2.95.2或egcs 1.0.3a。
·如果编译mysqld时显示例如下面的那些错误,configure没有正确地检测传到accept()、getsockname()或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);
为了修正它,编辑“config.h”文件(它由configure生成)。寻找这些行:
/* Define as the base type of the last arg to accept */
#define SOCKET_SIZE_TYPE XXX
- 更改XXX为size_t或int,取决于你的操作系统。(注意:每次运行configure都必须这样做,因为configure重新生成“config.h”)。
- “sql_yacc.cc”文件由“sql_yacc.yy”生成。通常构造过程不需要创造“sql_yacc.cc”,因为MySQL有一个已经生成的拷贝,然而,如果你确实需要再创建它,可能会碰到这个错误:
· "sql_yacc.yy", line xxx fatal: default action causes potential...
这是一个yacc版本不完善的迹象。你可能需要安装bison(GNU的yacc)并使用它。
·在Debian Linux 3.0上,如果你编译的MySQL 5.1要支持Berkeley DB,需要安装gawk代替默认的mawk。
·如果你需要调试mysqld或MySQL客户端,运行configure,使用--with-debug选项,然后重新编译并且将客户端程序链接到新的客户端库。请参见E.2节,“调试MySQL客户端”。
·如果你在Linux(例如,SuSE Linux 8.1或Red Hat Linux 7.3)下遇到类似下面的编译错误:
·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
默认情况,configure脚本试图使用g++ GNU C++编译器来确定正确的参数。如果未安装g++,将会产生错误的结果。有两种方法可以解决该问题:
o确保安装了GNU C++ g++。在某些Linux分发版上,需要安装的软件包叫做gpp;在其它分发版上名为gcc-c++。
o使用gcc作为C++编译器,将CXX环境变量设置为gcc:
o export CXX="gcc"
请注意之后需要再次运行configure。
2.8.5. MIT-pthreads注意事项
这节描述使用MIT-pthreads时所涉及的一些问题。
在Linux上,应该不使用MIT-pthreads而是安装LinuxThreads!参见2.12.1节,“Linux注意事项”。
如果你的系统不提供原生的线程支持,将需要使用MIT-pthreads包构造MySQL。这包括大多数FreeBSD系统、SunOS 4.x、Solaris 2.4和更早版本及其它,参见2.1.1节,“MySQL支持的操作系统”。
MIT-pthreads不是MySQL 5.1源码分发版的一部分。如果你需要该安装包,需要单独从http://www.mysql.com/Downloads/Contrib/pthreads-1_60_beta6-mysql.tar.gz下载。
下载后,将源文件提取到MySQL源码目录的顶级目录。将创建新的mit-pthreads子目录。
- 在大多数系统上,你能通过使用configure并用--with-mit-threads选项来强迫运行MIT-pthreads:
- shell> ./configure -- with-mit-threads
当使用MIT-pthreads时,不支持在一个非源码目录构造,因为我们想要使我们对代码的改变减到最小。
·决定是否使用MIT-pthreads的检查仅在处理服务器代码的配置过程期间发生。如果已经用--without-server配置了分发版并只构造客户端代码,客户端将不知道MIT-pthreads是否正在被使用并且是否使用默认的Unix套接字连接。因为在某些平台上Unix套接字文件不能在MIT-pthreads下面工作,这意味着当你运行客户端程序时,你需要使用-h或--host。
·当使用MIT-pthreads编译MySQL时,因为性能原因,系统锁定默认为禁止使用。你可以用--external-locking选项告诉服务器使用系统锁定。只是在相同数据文件上运行两个MySQL服务器时采需要,因此不推荐。
- 有时pthreadbind()命令不能绑定一个套接字但没有任何错误消息(至少在Solaris上),结果是所有到服务器的连接均失败。例如:
- shell> mysqladmin version
- mysqladmin: connect to server at '' failed;
- error: 'Can't connect to mysql server on localhost (146)'
解决它的方法是杀死mysqld服务器并且重启它。这只有当我们强迫服务器停止并马上进行重启时在发生。
- 使用MIT-pthreads,不能用SIGINT(break)中断sleep()系统调用。这只有在运行mysqladmin --sleep时才能注意到。在中断起作用并且进程停止之前必须等待sleep()终止。
- 当链接时,你可能会收到这样的警告消息(至少在Solaris上);它们可以被忽视:
- 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
- 一些其它的警告也可被忽略:
- implicit declaration of function `int strtoll(...)'
- implicit declaration of function `int strtoul(...)'
- 我们还没有让readline在MIT-pthreads上工作。(这不需要,但是可能某些人会感兴趣。)
2.8.6. 在Windows下从源码安装MySQL
- 2.8.6.1. 使用VC++构建MySQL
- 2.8.6.2. 从最新的开发源码创建Windows源码安装包
下面的说明描述了如何在Windows下从5.1版源码构建MySQL二进制。说明用于从包含最新开发源码的标准源码分发版或从BitKeeper树来构建二进制。
注释:本文档中的说明严格限于在Windows下从最新源码分发版或从BitKeeper树来测试MySQL的用户。作为产品使用时,MySQL AB不建议使用你自己从源码构建的MySQL服务器。一般情况,最好使用MySQL AB预编译的对性能进行优化的适用Windows的MySQL二进制分发版。安装二进制分发版的说明参见2.3节,“在Windows上安装MySQL”。
要想在Windows中从源码构建MySQL,Windows系统中应有下面的编译器和资源:
·Visual Studio 2003编译器系统(VC++ 7.0)。
·3到5GB的硬盘空间。
·Windows 2000或更高版本。
确切的系统需求见:http://msdn.microsoft.com/vstudio/productinfo/sysreqs/default.aspx
还需要适用Windows的MySQL源码分发版。有两种方法可以获得MySQL 5.1 源码分发版:
1. 获得MySQL AB打包的源码分发版软件包。预打包的源码分发版可从 http://dev.mysql.com/downloads/获得。
2. 你可以用最新BitKeeper开发源码树构建源码分发版。如果你计划构建,必须在Unix系统中创建安装软件包,并将它转移到Windows系统。(这样操作的理由是部分配置和构建步骤需要只能在Unix中工作的工具)。BitKeeper方法需要:
·运行Unix或类似Unix的系统,例如Linux。
·该系统上安装的BitKeeper 3.0。关于如何下载和安装BitKeeper的说明参见2.8.3节,“从开发源码树安装”。
如果你使用Windows源码分发版,你可以直接跳到2.8.6.1节,“使用VC++构建MySQL”。要想从BitKeeper树构建,继续2.8.6.2节,“从最新的开发源码创建Windows源码安装包”。
如果你发现某些组件不能按预料的工作,或者你有好的建议可以改进目前的在Windows中的构建过程,请向win32邮件列表发送消息。请参见1.7.1.1节,“The MySQL邮件列表”。
2.8.6.1. 使用VC++构建MySQL
注释:MySQL 4.1和以上版本的VC++工作区文件与Microsoft Visual Studio 2003版本兼容,MySQL AB人员已经在每个版本之前进行了测试。
按照以下步骤构建MySQL:
1. 创建工作目录(例如,C:\workdir)。
2. 使用WinZip或其它可以读取.zip文件的Windows工具将源码分发版解压缩到上述目录。
3. 启动Visual Studio。
4. 从File菜单,选择Open Workspace。
5. 打开工作目录中的MySQL.dsw工作区。
6. 从Build菜单,选择Set Active Configuration菜单。
7. 点击窗口选择mysqld - Win32 Debug并点击OK。
8. 按F7开始构建调试服务器、库和客户端应用程序。
9. 按同样方法编译发布版本。
10.程序和库的调试版本位于client_debug和lib_debug目录。程序和库的发布版本位于client_release和lib_release目录。请注意如果你想要构建调试版本和发布版本,可以从Build菜单选择Build All选项。
11.测试服务器。使用前面的说明构建服务器时,默认MySQL基本目录和数据目录位于C:\mysql和C:\mysql\data。如果你想要使用源码树根目录和数据目录作为基本目录和数据目录来测试服务器,需要告诉服务器其路径名。可以在命令行用--basedir和--datadir选项来完成,或将相应选项放入选项文件(在Windows目录或C:\my.cnf中的my.ini文件)。如果想要使用的数据目录在其它地方,可以指定其路径名。
12.根据你想要使用的服务器,从client_release或client_debug目录启动服务器。常用服务器启动说明见2.3节,“在Windows上安装MySQL”。如果想要使用其它基本目录或数据目录,需要相应地更改指令。
13.当服务器根据你的配置独立运行或作为服务时,尝试从client_release或client_debug目录中的MySQL交互式命令行实用工具连接它。
如果构建的程序工作正常,停止服务器。按照以下步骤安装MySQL:
1. 创建安装MySQL的目录。例如,要安装到C:\mysql,使用命令:
2. C:\> mkdir C:\mysql
3. C:\> mkdir C:\mysql\bin
4. C:\> mkdir C:\mysql\data
5. C:\> mkdir C:\mysql\share
6. C:\> mkdir C:\mysql\scripts
如果想要编译其它客户端程序并连接到MySQL,你还需要创建几个目录:
C:\> mkdir C:\mysql\include
C:\> mkdir C:\mysql\lib
C:\> mkdir C:\mysql\lib\debug
C:\> mkdir C:\mysql\lib\opt
如果想要对MySQL进行基准检查,创建目录:
C:\> mkdir C:\mysql\sql-bench
基准检查需要Perl支持。请参见2.13节,“Perl安装注意事项”。
7. 将下面的目录从workdir目录复制到C:\mysql目录:
8. C:\> cd \workdir
9. C:\workdir> copy client_release\*.exe C:\mysql\bin
10.C:\workdir> copy client_debug\mysqld.exe C:\mysql\bin\mysqld-debug.exe
11.C:\workdir> xcopy scripts\*.* C:\mysql\scripts /E
12.C:\workdir> xcopy share\*.* C:\mysql\share /E
如果想要编译其它客户端程序并连接到MySQL,还应当复制几个库和头文件:
C:\workdir> copy lib_debug\mysqlclient.lib C:\mysql\lib\debug
C:\workdir> copy lib_debug\libmysql.* C:\mysql\lib\debug
C:\workdir> copy lib_debug\zlib.* C:\mysql\lib\debug
C:\workdir> copy lib_release\mysqlclient.lib C:\mysql\lib\opt
C:\workdir> copy lib_release\libmysql.* C:\mysql\lib\opt
C:\workdir> copy lib_release\zlib.* C:\mysql\lib\opt
C:\workdir> copy include\*.h C:\mysql\include
C:\workdir> copy libmysql\libmysql.def C:\mysql\include
如果你想要对MySQL进行基准测试,你还应当:
C:\workdir> xcopy sql-bench\*.* C:\mysql\bench /E
按照二进制Windows分发版相同的方法设置并启动服务器。请参见2.3节,“在Windows上安装MySQL”。
2.8.6.2. 从最新的开发源码创建Windows源码安装包
要想从当前的BitKeeper源码树创建Windows源码安装包,使用下面的说明。请注意必须在运行Unix或类Unix操作系统的系统上执行该过程。例如,已知该过程在Linux上工作得很好。
1. 复制MySQL 5.1的BitKeeper源码树。关于如何复制源码树的详细信息,相关说明参见2.8.3节,“从开发源码树安装”。
2. 配置和构建分发版,得到可工作的服务器二进制。实现的一个方法是在源码树顶级目录运行下面的命令:
3. shell> ./BUILD/compile-pentium-max
4. 确保构建过程成功完成后,从源码树顶级目录运行下面的实用工具脚本:
5. shell> ./scripts/make_win_src_distribution
该脚本创建在Windows系统中使用的源码安装包。可以根据你的需求为脚本提供不同的选项。它接受下面的选项:
·--help
显示帮助消息。
·--debug
打印关于脚本操作的信息,不创建包。
·--tmp
指定临时位置。
·--suffix
安装软件包后缀名。
·--dirname
复制文件的目录名(媒介之间)。
·--silent
不打印正处理文件的详细列表。
·--tar
创建tar.gz安装软件包而不是.zip安装软件包。
默认情况,make_win_src_distribution创建Zip-格式的文件,文件名为mysql-VERSION-win-src.zip,其中VERSION代表MySQL源码树的版本。
6. 将创建的Windows源码安装包复制或上载到Windows机器上。要想编译,使用2.8.6.1节,“使用VC++构建MySQL”中的说明。
2.8.7. 在Windows下编译MySQL客户端
在源码文件中,应当在MySQL.h之前包括my_global.h:
#include <my_global.h>
#include <mysql.h>
my_global.h包括你在Windows中编译程序所需要的Windows兼容文件(例如 windows.h)。
可以将代码连接到动态libmysql.lib库,它只是一个包装器以便根据需要装载libmysql.dll,或连接静态mysqlclient.lib库。
MySQL客户端库编译为线程库,因此你应当将代码编译为多线程。