目录
当前位置: 首页 > 文档资料 > MySQL 中文手册 >

2.12. 具体操作系统相关的注意事项

优质
小牛编辑
131浏览
2023-12-01
2.12.1. Linux注意事项
2.12.2. Mac OS X注意事项
2.12.3. Solaris注意事项
2.12.4. BSD注意事项
2.12.5. 其它Unix注意事项
2.12.6. OS/2注意事项

2.12.1. Linux注意事项

2.12.1.1. Linux操作系统注意事项
2.12.1.2. Linux二进制分发版说明
2.12.1.3. Linux源码分发版说明
2.12.1.4. Linux后期安装注意事项
2.12.1.5. Linux x86注意事项
2.12.1.6. Linux SPARC注意事项
2.12.1.7. Linux Alpha注意事项
2.12.1.8. Linux PowerPC注意事项
2.12.1.9. Linux MIPS注意事项
2.12.1.10. Linux IA-64注意事项
本节讨论发现的在Linux中出现的问题。前面几节描述了一般操作系统相关的问题,使用二进制或源码分发版时可能出现的问题和安装后的问题。后面几节讨论在具体Linux平台上出现的问题。

请注意这些问题的大多数出现在旧的Linux 版本中。如果你运行最新的版本,可能不会发现这些问题。

2.12.1.1. Linux操作系统注意事项

MySQL至少需要Linux 2.0版本。

警告:我们已经发现在SMP系统中Linux 2.2.14 和MySQL会出现一些奇怪的问题。我们还收到来自一些MySQL用户的报告说他们用内核2.2.14使用MySQL时遇到了严重的稳定性问题。如果你正使用该内核,应当升级到2.2.19 (或更新版)或到2.4内核。如果你有一个多CPU盒,应当考虑使用2.4,因为它能大大加速。你的系统将会更稳定。

当使用LinuxThreads时,你应当至少可以看见有三个mysqld进程在运行。这些实际上是线程。有一个线程是LinuxThreads管理器,一个线程处理连接,另一个线程处理告警和信号。

2.12.1.2. Linux二进制分发版说明

MySQL的Linux-Intel二进制和RPM发布配置为最高的可能速度。我们一直在尝试使用可用的最快的稳定的编译器。

二进制发布用-staticis连接,说明一般情况你不需要关心系统库的版本。你也不需要安装LinuxThreads。用-staticis连接的程序稍微大于动态连接程序,但也稍微快一些(3-5%)。但是,静态连接程序的一个问题是你不能使用用户定义函数(UDF)。如果你将要写或使用UDF(只适用于C或C++编程人员),你必须使用动态链接自己编译MySQL。

二进制分发版的一个已知问题是在使用libc的旧的Linux系统(例如Red Hat 4.x或Slackware)上,你会遇到一些(非致命)主机名解析问题。如果系统使用libc没有使用glibc2,你可能会遇到一些主机名解析和getpwnam()问题。这是因为glibc依靠一些外部库来执行主机名解析和getpwent(),即使用-staticis编译也如此。这些问题出现在两个方面:

·当运行mysql_install_db时,你会看见下面的错误消息:

·Sorry, the host 'xxxx' could not be looked up

你可以通过执行mysql_install_db --force来解决该问题,并不在mysql_install_db中执行resolveip测试。不利方面是 你不能在授权表中使用主机名:除了localhost,必须使用IP号。如果你正使用不支持—force的旧版本MySQL,必须使用文本编辑器手动卸载mysql_install中的resolveip测试。

·当你尝试用--user选项运行mysqld时你还会看见下面的错误:

·getpwnam: No such file or directory

要解决该问题,使用su命令启动mysqld,不要指定--user选项。这样使系统自己更改mysqld进程的用户ID,mysqld不再需要这样做。

另一个解决办法可以解决两个问题,即不使用二进制分发版。获得MySQL源码分发版(RPM或tar.gz格式)并安装。

在一些Linux 2.2版本中,当客户端通过TCP/IP建立大量与mysqld服务器的新连接时,你可能会遇到错误Resource temporarily unavailable。该问题是Linux在你关闭TCP/IP套接字的时间和系统实际释放该套接字的时间之间有一个延迟。只有有限数目的TCP/IP时段有空间,因此如果客户端试图在短时间内建立许多新TCP/IP连接时,你会遇到源不可用错误。例如,当你通过TCP/IP运行MySQL test-connect基准测试时你会看见该错误。

我们已经多次向不同的 Linux 邮件列表询问该问题,但是一直没有找到合适的解决办法。唯一知道的“解决办法”是客户端使用永久连接,或,如果你在同一机器上运行数据库服务器和客户端,使用Unix套接字文件来连接,不要使用TCP/IP连接。

2.12.1.3. Linux源码分发版说明

下面关于glibc的注意事项只适用你自己构建MySQL时。如果在x86机器上运行Linux,在大多数情况下最好使用我们的二进制。我们将二进制连接到了我们能找到的打了最好补丁的glibc版本,并使用了最优的编译器选项,尽力使它适合高负荷服务器。对于典型用户,即使对于超过2GB限制的大量并行连接或表设置,在大多数情况下,我们的二进制仍然是最佳选择。阅读下面的内容后,如果你不清楚怎样做,先试用我们的二进制看它是否满足你的需求。如果你发现它不够完善,那么你可以尝试你自己的构建。在这种情况下,我们很希望能看到相关注释,以便我们下次可以构建更好的二进制。

MySQL在Linux上使用 LinuxThreads 。如果你正在使用一个没有glibc2的老的Linux版本,你必须在尝试编译MySQL前安装LinuxThreads。你可以从http://dev.mysql.com/downloads/os-linux.html获得LinuxThreads。

注意:当你执行INSERT DELAYED时,所用的包括2.1.1及以前的glibc版本在pthread_互斥_timedwait()处理上有一个致命错误,如果你正在使用INSERT DELAYED,我们建议先升级glibc。

请注意Linux 内核和LinuxThreads库默认情况下最多可以处理1,024个线程。如果你计划使用超过1,000个并行连接,需要对LinuxThreads进行一些更改,如下所示:

·将sysdeps/unix/sysv/linux/bits/local_lim.h中的PTHREAD_THREADS_MAX增加到4096,将LinuxThreads/internals.h中的STACK_SIZE减少到256KB。路径相对于glibc的根目录。(请注意如果STACK_SIZE为默认值2MB,MySQL有600-1000个连接时不稳定)。

·重新编译LinuxThreads,生成新的libpthreads.a库,并重新连接MySQL。

可以从http://www.volano.com/linuxnotes.html查阅关于LinuxThreads线程限制的详细信息。

还有一个问题会严重影响MySQL的性能,特别是在SMP系统中。在glibc 2.1的LinuxThreads中,对于拥有很多只是短时间内占有互斥体的线程的程序,不能很好地执行互斥。结果出现荒谬的现象:在许多情况下,如果你使用未修改的LinuxThreads连接MySQL,从SMP中去掉卸载处理器实际上会提高MySQL的性能。我们提供了一个glibc 2.1.3的补丁来纠正该行为(http://www.mysql.com/Downloads/Linux/linuxthreads-2.1-patch)。

在glibc 2.2.2中,MySQL使用修改后的互斥,这样甚至比打了补丁的glibc 2.1.3还要好得多。但是,需要注意的是在某些条件下,当前glibc 2.2.2中的互斥代码会高旋,影响了MySQL的性能。通过优化mysqld进程到最高优先级,可以降低在这种情况下出现这种问题的可能性。我们还可以通过补丁来纠正高旋问题,可以从http://www.mysql.com/Downloads/Linux/linuxthreads-2.2.2.patch下载。它集成高旋的纠正、线程最大数目和堆栈空间于一体。你需要用补丁patch -p0 </tmp/linuxthreads-2.2.2.patch在LinuxThreads目录下使用。我们 希望在将来的glibc 2.2发布中能以某种形式将它包括进来。在任何情况下,如果你连接glibc 2.2.2,仍然需要纠正STACK_SIZE和 PTHREAD_THREADS_MAX。我们希望在将来能将默认值纠正到某种程度上可以接受的值,适合高负荷MySQL设置,因此用来产生你自己的构建的 命令可以简化到到./configure; make; make install

我们建议你使用这些补丁来构建专用的libpthreads.a静态版本,并只使用它同MySQL实现静态链接。我们知道这些补丁对于MySQL很安全 并大大改善了它的性能,但是我们还不能断言它在其它应用程序上的效果如何。如果你需要将其它使用LinuxThreads的应用程序同打了补丁的静态版本的库连接,或构建一个打了补丁的共享版本,并将它安装到系统中,你将自己承担风险。

如果你在安装MySQL的过程中遇到任何奇怪的问题,或一些常用实用工具被悬挂起来,很可能是库或编译器相关问题。在这种情况下,使用我们的二进制来解决。

如果你连接你自己的MySQL客户端程序,运行时你会看见下面的错误:

ld.so.1: fatal: libmysqlclient.so.#:
open failed: No such file or directory

使用下面的方法可以避免该问题:

·用-Wl,r/full/path/to/libmysqlclient.so标记连接客户端,不要使用-Lpath)。

·将libmysqclient.so复制到/usr/lib。

·运行客户端程序前,将libmysqlclient.so所在目录的路径名增加到LD_RUN_PATH环境变量。

如果使用Fujitsu编译器 (fcc/FCC),编译MySQ时可能会出现一些问题,因为Linux头文件主要面向gcc。以下的configure行应当结合fcc/FCC使用:

CC=fcc CFLAGS="-O -K fast -K lib -K omitfp -Kpreex -D_GNU_SOURCE \
    -DCONST=const -DNO_STRTOLL_PROTO" \
CXX=FCC CXXFLAGS="-O -K fast -K lib \
    -K omitfp -K preex --no_exceptions --no_rtti -D_GNU_SOURCE \
    -DCONST=const -Dalloca=__builtin_alloca -DNO_STRTOLL_PROTO \
    '-D_EXTERN_INLINE=static __inline'" \
./configure \
    --prefix=/usr/local/mysql --enable-assembler \
    --with-mysqld-ldflags=-all-static --disable-shared \
    --with-low-memory

2.12.1.4. Linux后期安装注意事项

在MySQL安装目录或MySQL源码树下的support-files目录下可以找到mysql.server。你可以将它安装为/etc/init.d/mysql,以便自动启动和关闭MySQL。请参见2.9.2.2节,“自动启动和停止MySQL”。

如果MySQL不能打开足够的文件或连接,可能是你没有将Linux配置为处理足够的文件。

在Linux 2.2及以上版本中,你可以检查分配的文件的数目:

shell> cat /proc/sys/fs/file -max
shell> cat /proc/sys/fs/dquot-max
shell> cat /proc/sys/fs/super-max

如果有超过16MB的内存,应当在启动脚本中增加如下内容(例如,在SuSE Linux中:/etc/init.d/boot.local):

echo 65536 > /proc/sys/fs/file-max
echo 8192 > /proc/sys/fs/dquot-max
echo 1024 > /proc/sys/fs/super-max

还可以用root从命令行运行echo命令,但是下一次重新启动计算机时这些设定值会丢掉。

另外,可以使用许多Linux分发版使用的sysctl工具设置启动参数(包括SuSE Linux 8.0和以后版本)。将下面的值放到文件 /etc/sysctl.conf中:

# Increase some values for MySQL
fs.file-max = 65536
fs.dquot-max = 8192
fs.super-max = 1024

你还应将以下内容加入/etc/my.cnf:

[mysqld_safe]
open-files-limit=8192

这样服务器连接和打开文件的总数目可以达到8,192。

LinuxThreads的STACK_SIZE常数控制在寻址空间中线程堆栈的占用空间。它需要足够大,以保证每个线程堆栈有足够的空间,但是应足够小,防止某些线程的堆栈运行全局mysqld数据。遗憾的是,根据我们的发现,如果你用mmap()映射目前正使用的寻址,Linux成功运行 后不会映射映射区,将会清空整个地址页上的数据而不会返回错误信息。因此,mysqld或其它线程应用程序的安全依靠创建线程的代码的“绅士”行为。用户必须采取措施以确保在任何时间运行线程的数目相对线程堆栈应足够低,以防止全局堆内存。使用mysqld时,你应当为max_connections变量设置合理的值强制该行为。

如果你自己构建MySQL,你可以为LinuxThreads打补丁以便更好地使用堆栈。请参见2.12.1.3节,“Linux源码分发版说明”。如果你不想为LinuxThreads打补丁,你应当将max_connections的值设置为不超过500。如果你有大的关键字缓冲区、大的堆内存表,或其它使mysqld分配大量内存的东西,或如果你用2GB的补丁运行2.2内核,max_connections的值应当更低。如果你正使用我们的二进制或RPM版本,可以安全地将max_connections设置为1500(假定没有大的关键字缓冲区或有大量数据的堆内存表。将LinuxThreads中的STACK_SIZE降低得越低,可以安全地创建越多的线程。我们推荐的值的范围为128KB到256KB。

如果你正使用大量的并行连接,在2.2内核中你可能会遇到一个“特性”,即通过对进程的分支或克隆子进程的行为进行罚分,来试图防止轰炸攻击。这样你增加并行客户端的数量时,MySQL不能正确响应。在单CPU系统中,我们已经发现该现象,即线程创建地很慢;连接MySQL的时间很长(长达1分钟),并且关闭的时间也很长。在多CPU系统中,我们已经观察到随着客户端数目的增加,查询速度逐渐下降。在寻求解决办法的过程中,我们收到了一个用户的内核补丁,他声称该补丁可以解决他的问题。从http://www.mysql.com/Downloads/Patches/linux-fork.patch可以下载该补丁。我们已经在开发和生产系统上对该补丁进行了广泛的测试。它可以大大改善MySQL的性能,而不会造成任何问题,我们向仍然在2.2内核运行高负荷服务器的用户推荐它。

在2.4内核中已经对该问题进行了修复,因此如果你不满意当前系统的性能,不要为2.2内核打补丁,在SMP系统中升级到2.4版要容易地多,升级不仅可以修复错误,还可以使SMP更好地加速。

我们已经在双CPU机器上在2.4内核中对MySQL进行了测试,发现MySQL的比例要好得多。1,000名客户查询时,还看不到速度有实质上的下降,MySQL的比例因子(最大吞吐量与一个客户端的吞吐量的比例)为180%。我们在四-CPU系统中也观察到了类似的结果:当客户数目上升到1,000名时还没有实质上的减慢,比例因子为300%。根据这些结果,对于使用2.2内核的高负荷SMP服务器,我们绝对建议升级到 2.4内核。

我们已经发现,在2.4内核中应使用可能的最高优先级来运行mysqld进程,以获得最佳性能。可以通过为mysqld_safe加renice -20 $$命令来实现。在四-CPU系统中的测试中,提高优先级在400个客户时会使吞吐量增加60%。

我们目前还想搜集关于MySQL在four-way和eight-way系统上用2.4内核执行的性能的更详细信息。如果你访问了这些系统并进行了一些基准测试,请将结果用email发送到<benchmarks@mysql.com>。我们将对它们进行审查以包括进手册中。

如果用ps运行mysqld服务器进程时发现进程死掉了,一半是MySQL中有缺陷或数据库表崩溃了。请参见A.4.2节,“如果MySQL依然崩溃,应作些什么”。

如果mysqld死掉并给出SIGSEGV信号,要想在Linux中对内核进行调试,你可以用--core-file选项启动mysqld。注意你还可能需要通过向mysqld_safe添加ulimit -c 1000000或用--core-file-size=1000000启动mysqld_safe来加大内核文件的大小。请参见5.1.3节,“mysqld_safe:MySQL服务器启动脚本”。

2.12.1.5. Linux x86注意事项

MySQL需要5.4.12或更新版本的libc。已知它可以在libc 5.4.46中工作。glibc 2.0.6和更新版本应当也可以工作。Red Hat的glibc RPM有一些问题,因此如果你遇到问题,应看看是否有更新版。已知glibc 2.0.7-19和2.0.7-29 RPM可以工作。

如果你正使用Red Hat 8.0或更新的glibc 2.2.x库,你会看见mysqld执行gethostbyaddr()时会死掉。这是因为新的glibc库在执行该调用时需要大于128KB的堆栈空间。要想修复该问题,用--thread-stack=192K选项启动mysqld。(在MySQL 4以前的版本中应使用-O thread_stack=192K)。在MySQL 4.0.10和以上版本中,该堆栈空间值即为默认值,因此你不会看见该问题。

如果你正使用gcc 3.0和以上版本编译MySQL,在编译MySQL前你必须先安装libstdc++v3库;如果不这样做,在联接过程中会遇到关于丢失__cxa_pure_virtual符号的错误。

在一些旧的Linux分发版中,configure会生成如下错误:

Syntax error in sched.h. Change _P to __P in the
/usr/include/sched.h file.
See the Installation chapter in the Reference Manual.

只需要按照错误消息的提示操作。对只有一条下划线的_P名再增加一条下划线,然后重新尝试。

编译时可能会出现警告。下面的警告可以忽略:

mysqld.cc -o objs-thread/mysqld.o
mysqld.cc: In function `void init_signals()':
mysqld.cc:315: warning: assignment of negative value `-1' to
`long unsigned int'
mysqld.cc: In function `void * signal_hand(void *)':
mysqld.cc:346: warning: assignment of negative value `-1' to
`long unsigned int'

如果mysqld启动时总是出现转储内核, 问题可能是你使用了旧的/lib/libc.a。尝试重新对其命名,然后删掉sql/mysqld并重新执行make install然后再次尝试。已经报导在部分Slackware安装中出现了该问题。

当链接mysqld时如果出现下面的错误,说明libg++.a安装不正确:

/usr/lib/libc.a(putc.o): In function `_IO_putc':
putc.o(.text+0x0): multiple definiti在of `_IO_putc'

你可以使用libg++.a运行configure来避免该问题:

shell> CXX=gcc ./configure

2.12.1.6. Linux SPARC注意事项

在部分执行过程中,readdir_r()会中断。现象是SHOW DATABASES语句总是返回空子集。可以在完成配置、进行编译前从config.h中删掉HAVE_READDIR_R来修复。

2.12.1.7. Linux Alpha注意事项

我们已经用我们的基准和测试套件在Alpha中测试了MySQL 5.1,看起来工作得不错。

我们目前在配置Alpha EV6处理器的Compaq DS20机器上,在SuSE Linux 7.0中对AXP、内核2.4.4-SMP、Compaq C编译器(V6.2-505)和Compaq C++编译器(V6.3-006)构建MySQL二进制软件包。

你可以从http://www.support.compaq.com/alpha-tools/ 找到上述编译器。使用这些编译器,得到的MySQL性能比gcc要好9-14%。

在Alpha版MySQL中,我们在编译选项中使用-arch generic标记,可以确保二进制在所有Alpha处理器中运行。我们还采用静态编译以避免库问题。configure命令应为:

CC=ccc CFLAGS="-fast -arch generic" CXX=cxx \
CXXFLAGS="-fast -arch generic -noexceptions -nortti" \
./configure --prefix=/usr/local/mysql --disable-shared \
    --with-extra-charsets=complex --enable-thread-safe-client \
    --with-mysqld-ldflags=-non_shared --with-client-ldflags=-non_shared
 

如果想要使用egcs,可以使用下面的configure行:

CFLAGS="-O3 -fomit-frame-pointer" CXX=gcc \
CXXFLAGS="-O3 -fomit-frame-pointer -felide-constructors \
    -fno-exceptions -fno-rtti" \
./configure --prefix=/usr/local/mysql --disable-shared

已知的在Linux-Alpha中运行MySQL的问题:

·在gdb 4.18 中不能调试线程应用程序。你应当使用gdb 5.1。

·使用gcc时如果你尝试静态链接mysqld,启动时映像会导致转储内核。换句话说,使用gcc时不要使用--with-mysqld-ldflags=-all-static。

2.12.1.8. Linux PowerPC注意事项

MySQL应当可以在使用最新glibc安装软件包(用glibc 2.0.7测试)的MkLinux上工作。

2.12.1.9. Linux MIPS注意事项

为了使MySQL在Qube2(Linux Mips)上工作,需要最新的glibc库。已知glibc-2.0.7-29C2可以工作。还必须使用egcs C++编译器(egcs 1.0.2-9、gcc 2.95.2或更新版)。

2.12.1.10. Linux IA-64注意事项

要想让MySQL在Linux IA-64中编译,我们用 gcc 2.96构建时使用下面的configure命令:

CC=gcc \
CFLAGS="-O3 -fno-omit-frame-pointer" \
CXX=gcc \
CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors \
    -fno-exceptions -fno-rtti" \
    ./configure --prefix=/usr/local/mysql \
    "--with-comment=Official MySQL binary" \
    --with-extra-charsets=complex

在IA-64中,MySQL客户端二进制使用共享库。这意味着如果你将我们的二进制分发版安装到/usr/local/mysql之外的其它位置,需要将libmysqlclient.so安装目录路径加到/etc/ld.so.conf文件或LD_LIBRARY_PATH环境变量中。

参见A.3.1节,“与MySQL客户端库的链接问题”。

2.12.2. Mac OS X注意事项

2.12.2.1. Mac OS X 10.x (Darwin)
2.12.2.2. Mac OS X Server 1.2 (Rhapsody)
在Mac OS X中,tar不能处理长文件名。如果你需要解包.tar.gz分发版,应使用gnutar

2.12.2.1. Mac OS X 10.x (Darwin)

MySQL应当可以在Mac OS X 10.x(Darwin)中工作,不会有重大问题。

已知的问题有:

·连接时间(wait_timeout、interactive_timeout和net_read_timeout)值不理想。

这可能是线程库中的信号处理问题,信号不能中断挂起的读命令,我们希望将来能对线程库进行更新以修复该问题。

在Darwin 6.3中用下面的configure行对Mac OS X二进制进行了编译:

CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc \
CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors \
    -fno-exceptions -fno-rtti" \
    ./configure --prefix=/usr/local/mysql \
    --with-extra-charsets=complex --enable-thread-safe-client \
    --enable-local-infile --disable-shared

参见2.5节,“在Mac OS X上安装MySQL”。

2.12.2.2. Mac OS X Server 1.2 (Rhapsody)

对于当前版本的Mac OS X服务器,编译MySQL之前不需要对操作系统进行更改。在服务器平台上的编译与客户端版本Mac OS X相同。

对于旧的版本(Mac OS X Server 1.2, a.k.a. Rhapsody),在配置MySQL之前必须先安装pthread软件包。

参见2.5节,“在Mac OS X上安装MySQL”。

2.12.3. Solaris注意事项

2.12.3.1. Solaris 2.7/2.8注意事项
2.12.3.2. Solaris x86注意事项

在Solaris中,甚至在解压缩MySQL分发版时,你也会遇到问题,因为Solaristar不能处理长文件名。这说明解压缩MySQL分发版时会遇见错误。

如果出现这种问题,必须使用GNU tar(gtar)来解压缩分发版。可以从http://dev.mysql.com/downloads/os-solaris.html找到预编译的Solaris版本。

Sun原生线程只在Solaris 2.5和更高版本中工作。对于版本2.4和更早版本,MySQL自动使用MIT-pthreads。请参见2.8.5节,“MIT-pthreads注意事项”。

如果你运行configure时遇到下面的错误,说明编译器安装得有问题:

checking for restartable system calls... configure: error can not
run test programs while cross compiling

在这种情况下,应当将编译器升级到较新的版本。还可以在config.cache文件中插入下面的行来解决该问题:

ac_cv_sys_restartable_syscalls=${ac_cv_sys_restartable_syscalls='no'}

如果在SPARC上使用Solaris,建议使用编译器gcc 2.95.2或3.2。可以从http://gcc.gnu.org/下载。请注意egcs 1.1.1和gcc 2.8.1不能在SPARC上可靠地工作。

当使用gcc 2.95.2时建议的configure行:

CC=gcc CFLAGS="-O3" \
CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti" \
./configure --prefix=/usr/local/mysql --with-low-memory \
    --enable-assembler

如果你使用UltraSPARC系统,在CFLAGS和CXXFLAGS环境变量中加上-mcpu=v8 -Wa,-xarch=v8plusa,性能可以提高4%。

如果你有Sun Forte 5.0(或更新版)编译器,可以运行:

CC=cc CFLAGS="-Xa -fast -native -xstrconst -mt" \
CXX=CC CXXFLAGS="-noex -mt" \
./configure --prefix=/usr/local/mysql --enable-assembler

要想用Sun Forte 编译器创建64-位二进制,使用下面的配置选项:

CC=cc CFLAGS="-Xa -fast -native -xstrconst -mt -xarch=v9" \
CXX=CC CXXFLAGS="-noex -mt -xarch=v9" ASFLAGS="-xarch=v9" \
./configure --prefix=/usr/local/mysql --enable-assembler

要想使用gcc创建64-位Solaris二进制,在CFLAGS和CXXFLAGS中增加-m64,并从configure行删掉--enable-assembler。

在MySQL基准测试中,在UltraSPARC上使用32位模式的Forte 5.0,同使用带-mcpu标记的gcc 3.2比较,速度提高了4%。

如果创建了64位的mysqld二进制,速度要比32-位二进制慢4%,但是可以处理更多的线程和内存。

当为x86_64使用Solaris 10时,你应当安装用forcedirectio选项保存InnoDB文件的文件系统。(默认情况不用该选项来安装)。如果不这样做,当在该平台上使用InnoDB储存引擎时将会造成严重的性能下降。

如果fdatasync或sched_yield出现问题,你可以在configure行加LIBS=-lrt修复该问题。

对于早于WorkShop 5.3的编译器,你可能需要编辑configure脚本。应将该行:

#if !defined(__STDC__) || __STDC__ != 1

更该为:

#if !defined(__STDC__)

如果你用-Xc选项打开__STDC__,Sun编译器不能用Solaris pthreads.h头文件编译。这是一个Sun 缺陷(中断的编译器或include文件)。

如果运行mysqld时出现下面的错误消息,原因是你企图不启用-mt multi-thread选项而用Sun编译器编译MySQL:

libc internal error: _rmutex_unlock: rmutex not held

将-mt加到CFLAGS和CXXFLAGS上并重新编译。

如果你正使用gcc的SFW版本(在Solaris 8安装包内),运行configure之前你必须将/opt/sfw/lib加到环境变量LD_LIBRARY_PATH上。

如果你正使用从sunfreeware.com下载的gcc,会遇到许多问题。要想避免,应当在运行机器上重新编译gcc和GNUbinutils。

如果你用gcc编译MySQL时遇到下面的错误,说明gcc配置不适合Solaris的版本:

shell> gcc -O3 -g -O2 -DDBUG_OFF  -o thr_alarm ...
./thr_alarm.c: In function `signal_hand':
./thr_alarm.c:556: too many arguments to function `sigwait'

在这种情况下正确的做法是得到最新版本的gcc,并用你当前的gcc编译器编译。至少对于Solaris 2.5,几乎所有二进制版本的gcc有旧的不再使用的include文件,中断了所有使用线程的程序,也可能会中断其它程序。

Solaris不提供静态版本的系统库(libpthreads和libdl),因此你不能用--static编译MySQL。如果你试图这样做,会遇到下面的错误:

ld: fatal: library -ldl: not found
undefined reference to `dlopen'
cannot find -lrt

如果你连接你自己的MySQL客户端程序,运行时会出现下面的错误:

ld.so.1: fatal: libmysqlclient.so.#:
open failed: No such file or directory

可以通过下面的方法避免该问题:

·用-Wl,r/full/path/to/libmysqlclient.so标记而不要用-Lpath)连接客户端。

·将libmysqclient.so复制到/usr/lib。

·运行客户端程序前,将libmysqlclient.so目录的路径名加到LD_RUN_PATH环境变量上。

如果你未安装zlib用 -lz连接时configure出现问题,你有两个选则:

·如果你想要使用压缩通信协议,你需要从ftp.gnu.org获得并安装zlib。

·构建MySQL时用--with-named-z-libs=no选项运行configure

如果你正使用gcc,向MySQL调用用户定义函数(UDF)时出现问题,尝试向UDF连接行添加-lgcc到。

如果想让MySQL自动启动,可以将support-files/mysql.server复制到/etc/init.d,并创建/etc/rc3.d/S99mysql.server符号连接。

如果有太多进程试图快速连接mysqld,你应当能再MySQL日志只看见错误:

Error in accept: Protocol error

可以尝试用--back_log=50选项启动服务器来解决该问题。(在MySQL 4以前的版本中使用-O back_log=50)。

Solaris不支持setuid()应用程序所需的内核文件,因此如果你使用--user选项你不能从mysqld遇到内核文件。

2.12.3.1. Solaris 2.7/2.8注意事项

一般情况,可以在Solaris 2.7和2.8中使用Solaris 2.6二进制。大多数Solaris 2.6发布也适用Solaris 2.7和2.8。

MySQL应当能够自动检测到新的Solaris版本并解决下面的问题。

Solaris 2.7/2.8的include文件中有一些缺陷。当使用gcc时你会看见下面的错误:

/usr/include/widec.h:42: warning: `getwc' redefined
/usr/include/wchar.h:326: warning: this is the location of the previous
definition

如果出现该问题,修复的办法是将/usr/include/widec.h复制到.../lib/gcc-lib/os/gcc-version/include,并将41行从:

#if     !defined(lint) && !defined(__lint)

更改为:

#if     !defined(lint) && !defined(__lint) && !defined(getwc)

另外,可以直接编辑/usr/include/widec.h。用任何一种方法修复后,应当删掉config.cache并再次运行configure

如果运行make时遇到下面的错误,这是因为configure不能检测到curses.h文件(可能是因为/usr/include/widec.h中的错误):

In file included from mysql.cc:50:
/usr/include/term.h:1060: syntax error before `,'
/usr/include/term.h:1081: syntax error before `;'

可以用下面任何一种方法解决该问题:

·用CFLAGS=-DHAVE_CURSES_H CXXFLAGS=-DHAVE_CURSES_H ./configure配置。

·根据前面的讨论编辑/usr/include/widec.h并重新configure

·删掉config.h文件中的#define HAVE_TERM行并重新运行make

如果链接客户端程序时连接器找不到-lz,问题可能是libz.so文件安装到了/usr/local/lib。可以用下面任何一种方法解决该问题:

·向LD_LIBRARY_PATH增加/usr/local/lib。

·增加到libz.so from /lib的连接。

·如果使用Solaris 8,可以安装Solaris 8 CD分发版中的可选项zlib。

·构建MySQL时用--with-named-z-libs=no选项运行configure

2.12.3.2. Solaris x86注意事项

在x86 Solaris 8上,如果使用strip删除调试符号,mysqld转储内核。

如果正在 Solaris x86上使用gccegcs,并且你碰到了在装载时的内核转储问题,应该使用下列configure命令:

CC=gcc CFLAGS="-O3 -fomit-frame-pointer -DHAVE_CURSES_H" \
CXX=gcc \
CXXFLAGS="-O3 -fomit-frame-pointer -felide-constructors \
    -fno-exceptions -fno-rtti -DHAVE_CURSES_H" \
./configure --prefix=/usr/local/mysql

用libstdc++库和与C++异常处理来避免这个问题。

如果这没有帮助,你应该编译一个调试版本并且用一个踪迹文件运行它或在gdb下运行它。请参见E.1.3节,“在gdb环境下调试mysqld”。

2.12.4. BSD注意事项

2.12.4.1. FreeBSD注意事项
2.12.4.2. NetBSD注意事项
2.12.4.3. OpenBSD 2.5版注意事项
2.12.4.4. BSD/OS 2.x版注意事项
2.12.4.5. BSD/OS 3.x版注意事项
2.12.4.6. BSD/OS 4.x版注意事项
本节提供在各种BSD Unix中使用MySQL的相关信息。

2.12.4.1. FreeBSD注意事项

对于运行MySQL,推荐使用FreeBSD 4.x或更新版本,因为其线程包更加完整。要想遇到一个安全、稳定的系统,你应当只使用标记-RELEASE的FreeBSD内核。

最容易因此是比较受喜欢的安装方法是使用mysql-server和mysql-client移植,可从http://www.freebsd.org得到。

使用这些移植的益处包括:

  • 一个全优化的工作在FreeBSD版本上的MySQL
  • 自动配置和构建。
  • 启动脚本安装在/usr/local/etc/rc.d。

·用pkg_info -L察看哪个文件被安装的能力

·如果你在那台机器上不再想要MySQL,用pkg_delete完全删除它们。

建议在FreeBSD 2.x版上使用 MIT-pthreads,在版本3和以上版本用原生线程。在一些2.2.x的以后版本使用原生线程运行是可能的,但是你可能碰到mysqld关掉的问题。

遗憾的是,FreeBSD调用的某些函数还不能完全保证线程安全。特别令人注意的是,包括gethostbyname()函数, MySQL使用该函数将主机名转换为IP地址。在某些环境中,mysqld进程会突然造成100%的CPU负荷,不再响应。如果你遇到该问题,尝试使用--skip-name-resolve选项启动MySQL。

另外,还可以将FreeBSD 4.x中的MySQL同LinuxThreads库连接,这样可以避免一些原生FreeBSD线程执行时的问题。为了更好地将LinuxThreads同原生线程进行对比,参见Jeremy Zawodny的文章FreeBSD or Linux for your MySQL Server?地址:http://jeremy.zawodny.com/blog/archives/000697.html

在FreeBSD使用LinuxThreads的已知问题有:

·连接时间(wait_timeout、interactive_timeout和net_read_timeout)值不理想。现象是永久连接挂起较长时间,不能关闭,只有线程执行新命令时 'kill'线程方有效。

这可能是线程库中的信号处理问题,信号不能中断挂起的读命令。期望在FreeBSD 5.0中修复。

MySQL构建进程需要GNU make(gmake)工作。如果没有GNUmake,必须在编译MySQL前先安装它。

建议的在FreeBSD中用gcc(2.95.2和以上版本)编译和安装MySQL的方法是:

CC=gcc CFLAGS="-O2 -fno-strength-reduce" \
    CXX=gcc CXXFLAGS="-O2 -fno-rtti -fno-exceptions \
    -felide-constructors -fno-strength-reduce" \
    ./configure --prefix=/usr/local/mysql --enable-assembler
gmake
gmake install
cd /usr/local/mysql
bin/mysql_install_db --user=mysql
bin/mysqld_safe &
 

如果configure使用MIT-pthreads,应当阅读MIT-pthreads注意事项。请参见2.8.5节,“MIT-pthreads注意事项”。

如果你从make install遇到一个它不能找到“/usr/include/pthreads”的错误,configure没有检测出你需要MIT-pthreads。要修复该问题,移走config.cache,然后用--with-mit-threads选项重新运行configure

确定让你的名字解析程序安装正确,否则当连接mysqld时,你可能会遇到解析延时或失败。保证在“/etc/hosts”文件中的localhost入口是正确的。“/etc/hosts”文件应该以下面一行开始:

127.0.0.1       localhost localhost.your.domain

已知FreeBSD的文件句柄限制默认值很低。请参见A.2.17节,“文件未找到”。使用--open-files-limit选项执行mysqld_safe启动服务器,或在/etc/login.conf为mysqld用户提高限制并用cap_mkdb /etc/login.conf重建它。如果你不使用默认名(即使用chpass mysqld-user-name),还要保证为该用户设置在密码文件中的相应级别。请参见5.1.3节,“mysqld_safe:MySQL服务器启动脚本”。

FreeBSD将进程空间限制到512MB,即使系统有很多的可用RAM也如此。因此你可能会遇到如下所示错误:

Out of memory (Needed 16391 bytes)

在当前版本的FreeBSD(至少4.x和更高版本)中,你可以在/boot/loader.conf文件中增加下面的条目并重启机器增加该限制(不能在运行时间用sysctl命令更改这些设定值):

kern.maxdsiz="1073741824" # 1GB
kern.dfldsiz="1073741824" # 1GB
kern.maxssiz="134217728" # 128MB

在旧版本的FreeBSD中,必须重新编译内核,以便更改进程的最大数据段空间。在这种情况下,应当查看LINT配置文件中的MAXDSIZ选项查看更详细的信息。

如果MySQL的当前日期有问题,设置TZ变量将会有帮助。请参见附录F:环境变量

2.12.4.2. NetBSD注意事项

为了在NetBSD上编译,你需要GNU make,否则当make试图在C++文件上运行lint时,编译将失败。

2.12.4.3. OpenBSD 2.5版注意事项

在OpenBSD 2.5上,可以用下列选项编译带原生线程的MySQL
CFLAGS=-pthread CXXFLAGS=-pthread ./configure --with-mit-threads=no

2.12.4.4. BSD/OS 2.x版注意事项

如果在编译MySQL时,遇到下列错误,说明虚拟内存的ulimit值太低了:

item_func.h: In method
`Item_func_ge::Item_func_ge(const Item_func_ge &)':
item_func.h:28: virtual memory exhausted
make[2]: *** [item_func.o] Error 1

试试使用ulimit -v 80000并再次运行make。如果这还不行并且你正在使用bash,试试换到cshsh;一些BSDI用户报告了使用bashulimit有问题。

如果你正在使用gcc,可能必须为configure使用--with-low-memory标志才能编译“sql_yacc.cc”

如果MySQL的当前日期有问题,设置TZ变量将会有帮助。请参见附录F:环境变量

2.12.4.5. BSD/OS 3.x版注意事项

升级到BSD/OS 3.1。如果不能升级,则安装BSDI patch M300-038。

在配置MySQL时,使用下列命令:

env CXX=shlicc++ CC=shlicc2 \
./configure \
    --prefix=/usr/local/mysql \
    --localstatedir=/var/mysql \
    --without-perl \
    --with-unix-socket-path=/var/mysql/mysql.sock

已知下面的项可以工作:

env CC=gcc CXX=gcc CXXFLAGS=-O3 \
./configure \
    --prefix=/usr/local/mysql \
    --with-unix-socket-path=/var/mysql/mysql.sock

如果你愿意,可以改变目录位置,或不指定任何位置而使用默认目录。

如果在重负载下的性能有问题,试试使用--skip-thread-priority选项执行mysqld!这将以相同优先级运行所有线程;在BSDI 3.1上,可以得到较好的性能(至少直到BSDI可以修正其线程调度程序)。

如果在编译时遇到virtual memory exhausted错误,试试使用ulimit -v 80000并再次运行make。如果这还不行并且你正在使用bash,试试换到cshsh;一些BSDI用户报告了使用bashulimit会有问题。

2.12.4.6. BSD/OS 4.x版注意事项

BSDI 4.x有一些线程有关的缺陷。如果你想要在这上面使用MySQL,应该安装所有与线程相关的补丁,至少应该安装M400-023。

在一些 BSDI 4.x系统中,你可能会遇到共享库问题。现象是不能执行任何客户端程序,例如,mysqladmin。在这种情况下,需要重新配置,用disable-shared选项禁用库的共享以便进行配置。

一些客户在BSDI 4.0.1中遇到了严重问题,即mysqld二进制过一会儿不能打开表。这是因为一些库/系统相关错误使mysqld未得到指令便更改了当前目录。

修复方法是升级MySQL到最低3.23.34版或更高版,运行configure后,运行make前删掉config.h中的行#define HAVE_REALPATH。

请注意这说明你不能通过符号连接将数据库目录连接到另一个数据库目录,或通过符号连接将表连接到BSDI上的另一个数据库。(可以通过符号连接连接到另一个硬盘)。

2.12.5. 其它Unix注意事项

2.12.5.1. HP-UX 10.20版注意事项
2.12.5.2. HP-UX 11.x版注意事项
2.12.5.3. IBM-AIX注意事项
2.12.5.4. SunOS 4注意事项
2.12.5.5. Alpha-DEC-UNIX(Tru64)版注意事项
2.12.5.6. Alpha-DEC-OSF/1注意事项
2.12.5.7. SGI Irix注意事项
2.12.5.8. SCO UNIX和OpenServer 5.0.x版注意事项
2.12.5.9. SCO UnixWare 7.1.x和OpenUNIX 8.0.0版注意事项
2.12.5.10. SCO OpenServer 6.0.x版注意事项

2.12.5.1. HP-UX 10.20版注意事项

在HP-UX上编译MySQL时,有一些“小”问题。我们推荐您使用gcc而不是HP-UX自己的编译器,因为gcc可以生成更好的代码!

我们推荐在HP-UX上使用gcc 2.95,不使用高度优化标志(类似-O6),因为这在HP-UX上可能不安全。

下面的configure行在gcc 2.95中应当工作:

CFLAGS="-I/opt/dce/include -fpic" \
CXXFLAGS="-I/opt/dce/include -felide-constructors -fno-exceptions \
-fno-rtti" \
CXX=gcc \
./configure --with-pthread \
    --with-named-thread-libs='-ldce' \
    --prefix=/usr/local/mysql --disable-shared

下面的configure行在gcc 3.1中应当工作:

CFLAGS="-DHPUX -I/opt/dce/include -O3 -fPIC" CXX=gcc \
CXXFLAGS="-DHPUX -I/opt/dce/include -felide-constructors \
    -fno-exceptions -fno-rtti -O3 -fPIC" \
./configure --prefix=/usr/local/mysql \
    --with-extra-charsets=complex --enable-thread-safe-client \
    --enable-local-infile  --with-pthread \
    --with-named-thread-libs=-ldce --with-lib-ccflags=-fPIC
    --disable-shared

2.12.5.2. HP-UX 11.x版注意事项

由于在标准 HP-UX库中有一些严重错误,试图在HP-UX 11.0上运行MySQL前应当安装下面的补丁:
PHKL_22840 Streams cumulative
PHNE_22397 ARPA cumulative

这样可以解决在线程应用程序中运行recv()时得到EWOULDBLOCK和执行accept()时得到EBADF的问题。

如果你在未打补丁的HP-UX 11.x系统中使用gcc 2.95.1,可能会遇到下面的错误:

In file included from /usr/include/unistd.h:11,
 from ../include/global.h:125,
 from mysql_priv.h:15,
 from item.cc:19:
/usr/include/sys/unistd.h:184: declaration of C function ...
/usr/include/sys/pthread.h:440: previous declaration ...
In file included from item.h:306,
 from mysql_priv.h:158,
 from item.cc:19:

问题是HP-UX没有一致地定义pthreads_atfork()。它同/usr/include/sys/unistd.h:184和/usr/include/sys/pthreads.h:440中的原型冲突。

一个解决办法是将/usr/include/sys/unistd.h复制到MySQL/include并编辑unistd.h,对它进行更改以匹配pthreads.h中的定义。查找下列行:

extern int pthreads_atfork(void (*prepare)(),void (*parent)(),
  void (*child)());

将它更改为:

extern int pthreads_atfork(void (*prepare)(void),void (*parent)(void),
  void (*child)(void));

更改完后,下面的configure行应当工作:

CFLAGS="-fomit-frame-pointer -O3 -fpic" CXX=gcc \
CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti -O3" \
./configure --prefix=/usr/local/mysql --disable-shared

如果你使用HP-UX 编译器,可以使用下面的命令(已经用cc B.11.11.04进行了测试):

CC=cc CXX=aCC CFLAGS=+DD64 CXXFLAGS=+DD64 ./configure \
    --with-extra-character-set=complex

你可以忽略下面类型的任何错误:

aCC: warning 901: unknown option: `-3': use +help for online
documentation

如果运行configure时遇到下面的错误,请验证在到HP-UX C和C++编译器的路径前是否有到K&R编译器的路径:

checking for cc option to accept ANSI C... no
configure: error: MySQL requires an ANSI C compiler (and a C++ compiler).
Try gcc. See the Installation chapter in the Reference Manual.

不能编译的另一个原因可能是你没有按照前面所述定义+DD64标记。

对于HP-UX 11,另一个办法是使用http://dev.mysql.com/downloads/提供的MySQL二进制,这是我们已经构建并测试过的。我们也收到了MySQL的HP-UX 10.20二进制可以在HP-UX 11上成功运行的报告。如果你遇到问题,一定要检查HP-UX补丁的版本。

2.12.5.3. IBM-AIX注意事项

Autoconf中没有了xlC自动检测,因此运行configure前,需要设置许多变量。以下例子使用IBM编译器:

export CC="xlc_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192 "
export CXX="xlC_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192"
export CFLAGS="-I /usr/local/include"
export LDFLAGS="-L /usr/local/lib"
export CPPFLAGS=$CFLAGS
export CXXFLAGS=$CFLAGS
 
./configure --prefix=/usr/local \
--localstatedir=/var/mysql \
--sbindir='/usr/local/bin' \
--libexecdir='/usr/local/bin' \
--enable-thread-safe-client \
--enable-large-files
 

可以从http://www-frec.bull.com/找到上述编译MySQL分发版的选项。

如果你将前面的configure行中的-O3改为-O2,必须删掉-qstrict选项。这是对IBM C编译器的限制。

如果你正在使用gccegcs编译MySQL必须使用-fno-exceptions标志,因为gcc/egcs的异常处理不是对线程安全的!(已经用egcs1.1测试过)。IBM汇编程序也有一些已知问题,当使用gcc时可以生成坏的代码。

在 AIX 上使用egcsgcc 2.95,我们推荐下列configure行:

CC="gcc -pipe -mcpu=power -Wa,-many" \
CXX="gcc -pipe -mcpu=power -Wa,-many" \
CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti" \
./configure --prefix=/usr/local/mysql --with-low-memory

为了成功编译,需要使用-Wa,-many选项。IBM知道该问题,但是由于工作区的原因,不急于修复它。我们不知道gcc 2.95是否需要-fno-exceptions选项,但是因为MySQL不使用例外,并且该选项可以产生快速的代码,我们建议使用egcs/gcc时使用该选项。

如果汇编码有问题,试试更改-mcpu=xxx选项以匹配你的CPU。一般情况可能需要使用power2、power或powerpc。另外,你可能需要使用604或604e。我们不能绝对肯定但怀疑power一般应安全,即使在power2机器上也安全。

如果你不知道你的CPU是什么样的,可以执行uname -m命令。可以产生类似000514676700的字符串,格式为xxyyyyyymmss,其中xx和ss总是00,yyyyyy是唯一的系统ID,mm是CPU Planar的ID。从http://www16.boulder.ibm.com/pseries/en_US/cmds/aixcmds5/uname.htm可以找到这些值的图表。

该图表可以给出你可以使用的机器类型和机器型号,确定CPU的类型。

如果遇到信号问题(MySQL在高负载下出人意料地死掉),你可能已经发现了与线程和信号有关的一个OS缺陷。在这种情况下,你可以用如下配置告诉MySQL不使用信号:

CFLAGS=-DDONT_USE_THR_ALARM CXX=gcc \
CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti \
-DDONT_USE_THR_ALARM" \
./configure --prefix=/usr/local/mysql --with-debug \
    --with-low-memory

这不影响MySQL的性能,但是有副作用,就是不能用mysqladmin killmysqladmin shutdown杀死在一个连接上“睡眠”的客户端。相反,当客户端发出下一个命令时,它将死掉。

在AIX的一些版本上用libbind.a链接使得getservbyname()内核转储,这是AIX的一个缺陷并且应该报告IBM。

对于AIX 4.2.1和gcc,进行下面的更改。

配置完后,编辑config.h和include/my_config.h,将下面的行:

#define HAVE_SNPRINTF 1

更改为:

#undef HAVE_SNPRINTF

最后需要在mysqld.cc中为initgroups ()添加:

#ifdef _AIX41
extern "C" int initgroups(const char *,int);
#endif

如果你需要为mysqld进程分配大量内存,只使用ulimit -d unlimited是不够的。还可以需要修改mysqld_safe,增加下面的行:

export LDR_CNTRL='MAXDATA=0x80000000'

关于使用大量内存的信息请查阅http://publib16.boulder.ibm.com/pseries/en_US/aixprggd/genprogc/lrg_prg_support.htm

2.12.5.4. SunOS 4注意事项

在SunOS 4上,需要用MIT-pthreads编译MySQL,反过来这意味着需要使用GNU make。

一些SunOS 4系统的动态库和libtool有问题。可以使用下列configure行来避免这个问题:

./configure --disable-shared --with-mysqld-ldflags=-all-static

当编译readline时,可能会遇到关于重复定义的警告,可以忽略。

当编译mysqld的时候,将会遇到implicit declaration of function警告,可以忽略。

2.12.5.5. Alpha-DEC-UNIX(Tru64)版注意事项

如果你在Digital Unix上使用egcs 1.1.2,应当升级到gcc 2.95.2,因为egcs在DEC上有一些严重缺陷!

当在Digital UNIX下编译线程程序时,文档推荐对于cccxx使用-pthread选项和-lmach -lexc库(除了-lpthread外)。你应该象下面这样运行configure

CC="cc -pthread" CXX="cxx -pthread -O" \
./configure --with-named-thread-libs="-lpthread -lmach -lexc -lc"

当编译mysqld时,会看见下面的警告:

mysqld.cc: In function void handle_connections()':
mysqld.cc:626: passing long unsigned int *' as argument 3 of
accept(int,sockadddr *, int *)'

你可以放心地忽略这些警告,它们的发生是因为configure只能检测出错误,而不是警告。

如果直接从命令行启动服务器,当退出时,可能有死掉的问题。(当你退出时,重要进程收到一个SIGHUP信号),如果如此,试着象这样启动服务器:

nohup mysqld [options] &

nohup使得后面的命令忽视从终端发来的任何SIGHUP信号了。另外,通过运行safe_mysqld启动服务器,可以让nohup调用mysqld。请参见5.1.3节,“mysqld_safe:MySQL服务器启动脚本”。

如果编译mysys/get_opt.c时遇到问题,只需要从启动文件删掉#define _NO_PROTO行。

如果使用Compaq的CC编译器,下面的configure行应当工作:

CC="cc -pthread"
CFLAGS="-O4 -ansi_alias -ansi_args -fast -inline speed all -arch host"
CXX="cxx -pthread"
CXXFLAGS="-O4 -ansi_alias -ansi_args -fast -inline speed all \
    -arch host -noexceptions -nortti"
export CC CFLAGS CXX CXXFLAGS
./configure \
    --prefix=/usr/local/mysql \
    --with-low-memory \
    --enable-large-files \
    --enable-shared=yes \
    --with-named-thread-libs="-lpthread -lmach -lexc -lc"
gnumake

如果用共享库编译时libtool出现问题,应当能够在链接mysql时通过下述命令解决该问题:

cd mysql
/bin/sh ../libtool --mode=link cxx -pthread  -O3 -DDBUG_OFF \
    -O4 -ansi_alias -ansi_args -fast -inline speed \
    -speculate all \ -arch host  -DUNDEF_HAVE_GETHOSTBYNAME_R \
    -o mysql  mysql.o readline.o sql_string.o completion_hash.o \
    ../readline/libreadline.a -lcurses \
    ../libmysql/.libs/libmysqlclient.so  -lm
cd ..
gnumake
gnumake install
scripts/mysql_install_db

2.12.5.6. Alpha-DEC-OSF/1注意事项

如果遇到编译问题并安装了DEC CCgcc,尝试这样运行configure

CC=cc CFLAGS=-O CXX=gcc CXXFLAGS=-O3 \
./configure --prefix=/usr/local/mysql

如果遇到“c_asm.h”文件的问题,可以创建并使用一个“哑(dummy)”“c_asm.h”文件:

touch include/c_asm.h
CC=gcc CFLAGS=-I./include \
CXX=gcc CXXFLAGS=-O3 \
./configure --prefix=/usr/local/mysql

请注意从http://ftp.support.compaq.com/public/unix/下载最新的DEC(Compaq)补丁可以修复ld程序的下面问题。

在OSF1 V4.0D和编译器"DEC C V5.6-071 on Digital UNIX V4.0 (Rev. 878)" 上,编译器有了一些奇怪的行为(未定义asm标志)。/bin/ld好象也被破坏(当链接mysqld时,发生_exit undefined问题)。在这个系统上,从OSF 4.0C的版本替换了/bin/ld后,我们设法用下列configure命令行编译MySQL

CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql

用Digital编译器“C++ V6.1-029”,下列命令应该工作:

CC=cc -pthread
CFLAGS=-O4 -ansi_alias -ansi_args -fast -inline speed \
       -speculate all -arch host
CXX=cxx -pthread
CXXFLAGS=-O4 -ansi_alias -ansi_args -fast -inline speed \
 -speculate all -arch host -noexceptions -nortti
export CC CFLAGS CXX CXXFLAGS
./configure --prefix=/usr/mysql/mysql \
    --with-mysqld-ldflags=-all-static --disable-shared \
    --with-named-thread-libs="-lmach -lexc -lc"

在OSF1的某些版本中,alloca()函数被破坏,通过删除定义'HAVE_ALLOCA'的“config.h”的行更正它。

alloca()函数也可能在/usr/include/alloca.h里面有一个不正确的原型,源于此的警告可以忽略。

configure将自动地使用下列线程库: --with-named-thread-libs="-lpthread -lmach -lexc -lc"。

当使用gcc时,也可以试试这样运行configure

CFLAGS=-D_PTHREAD_USE_D4 CXX=gcc CXXFLAGS=-O3 ./configure ....

如果你的信号有问题(MySQL出人意料地在高负载下死掉),可能遇到了一个线程和信号有关的OS缺陷。在这种情况下,你可以告诉MySQL按如下配置不使用信号:

CFLAGS=-DDONT_USE_THR_ALARM \
CXXFLAGS=-DDONT_USE_THR_ALARM \
./configure 

这不影响MySQL性能,但是有副作用,就是不能用mysqladmin killmysqladmin shutdown杀死在一个连接上“睡眠”的客户端。相反,当客户端发出下一个命令时,它将死掉。

使用gcc 2.95.2,会遇到下面的编译错误:

sql_acl.cc:1456: Internal compiler error in `scan_region',
at except.c:2566
Please submit a full bug report.

要修复该问题,应当进入sql目录并剪切、复制最后gcc,但应将-O3改为-O0 (或如果编译行没有任何-O选项,应在gcc后面增加-O0)。之后,可以回到顶级目录并重新运行make

2.12.5.7. SGI Irix注意事项

如果使用Irix 6.5.3或更新版,如果用拥有CAP_SCHED_MGT权限的用户(例如root)运行mysqld或用下面的shell命令给mysqld服务器该权限,mysqld能够创建线程:

chcap "CAP_SCHED_MGT+epi" /opt/mysql/libexec/mysqld

可能需要在运行configure后且在编译前定义“config.h”里面的一些符号。

在一些Irix实现中,alloca()函数被破坏。如果mysqld服务器死于一些SELECT语句,把“config.h”定义HAVE_ALLOC和HAVE_ALLOCA_H的行删除即可。如果mysqladmin create不工作,把“config.h”定义HAVE_READDIR_R的行删除,你也可能必须删除HAVE_TERM_H行。

SGI推荐将本页上的所有补丁作为一个整体来安装:

http://support.sgi.com/surfzone/patches/patchset/6.2_indigo.rps.html

至少,应该安装最新的核心卷(rollup)、最新的rld卷和最新的libc卷。

很明确,对于pthreads支持,需要本页上所有的POSIX补丁:

http://support.sgi.com/surfzone/patches/patchset/6.2_posix.rps.html

如果在编译“mysql.cc”时,遇到类似于下面的错误:

"/usr/include/curses.h", line 82: error(1084):
invalid combinati在of type

那么应在MySQL源码树的顶级目录输入下列命令:

extra/replace bool curses_bool < /usr/include/curses.h > include/curses.h
make

应该也有安排上的问题报告。如果只有一个线程正在运行,事情会变慢的。通过启动另外一个客户端来避免它,这可以导致此后其它线程的执行速度增加2到10倍。这是Irix线程难以理解的问题;可能必须临时准备找出解决方案直到它能被修正。

如果你正在用gcc编译,可以使用下列configure命令:

CC=gcc CXX=gcc CXXFLAGS=-O3 \
./configure --prefix=/usr/local/mysql --enable-thread-safe-client \
    --with-named-thread-libs=-lpthread

在用原生Irix C和C++编译器7.3.1.2的Irix 6.5.11上,下面的项工作:

CC=cc CXX=CC CFLAGS='-O3 -n32 -TARG:platform=IP22 -I/usr/local/include \
-L/usr/local/lib' CXXFLAGS='-O3 -n32 -TARG:platform=IP22 \
-I/usr/local/include -L/usr/local/lib' \
./configure --prefix=/usr/local/mysql --with-innodb --with-berkeley-db \
    --with-libwrap=/usr/local \
    --with-named-curses-libs=/usr/local/lib/libncurses.a

2.12.5.8. SCO UNIX和OpenServer 5.0.x版注意事项

当前的移植仅在“sco3.2v5.0.5”,“sco3.2v5.0.6”和“sco3.2v5.0.7”系统上进行了测试,在“sco 3.2v4.2”上的移植也有很大进展。OpenServer 5.0.8(Legend)具有原生线程,允许文件大于2GB。目前最大的文件可以达到2GB。

我们可以在OpenServer上用gcc 2.95.3用下面的configure命令编译MySQL。

CC=gcc CXX=gcc ./configure --prefix=/usr/local/mysql \
    --enable-thread-safe-client --with-innodb \
    --with-openssl --with-vio --with-extra-charsets=complex

从ftp://ftp.sco.com/pub/openserver5/opensrc/gnutools-5.0.7Kj可以得到gcc

该开发系统需要在OpenServer 5.0.6O的penServer Execution Environment Supplement oss646B和oss656B,OpenSource库位于 gwxlibs。所有OpenSource工具位于opensrc目录。可以从ftp://ftp.sco.com/pub/openserver5/opensrc/获得。

我们建议使用最新的MySQL产品发布。

SCO提供的操作系统补丁:OpenServer 5.0.[0-6]:ftp://ftp.sco.com/pub/openserver5,OpenServer 5.0.7:ftp://ftp.sco.com/pub/openserverv5/507。

SCO提供的关于安全修复的信息:Server 5.0.x:ftp://ftp.sco.com/pub/security/OpenServer。

OpenSever 5.0.x系统上最大的文件的大小为2GB。

在OpenServer 5.0.x上,可供串缓冲区、clist和锁定记录分配的总内存不能超出60MB。

串缓冲区的分配单位为4096 字节的页,clists为70字节,锁定记录为64字节,因此为:

(NSTRPAGES * 4096) + (NCLIST * 70) + (MAX_FLCKREC * 64) <= 62914560

按照以下步骤来配置Database Services选项。如果你不确定应用程序是否需要,参见随应用程序提供的文档。

1. 用root登录。

2. 编辑/etc/conf/sdevice.d/suds文件启用SUDS驱动程序。将第2个域内的N更改为Y。

3. 使用mkdev aio或Hardware/Kernel Manager来启用对asynchronous I/O的支持,并重新连接内核。要想让用户锁定内存用于该类I/O,更新aiomemlock(F)文件。应当对该文件进行更新,包括进可以使用AIO的用户和可以锁定的最大数量的内存。

4. 许多应用程序使用setuid二进制,因此你只能指定单个用户。请参见随应用程序提供的文档来看是否应用程序是这种情况。

完成该进程后,重新启动系统,创建包括这些更改的新内核。

默认情况,/etc/conf/cf.d/mtune中的条目设置为:

Value   Default Min     Max
-----   ------- ---     ---
NBUF    0       24      450000
NHBUF   0       32      524288
NMPBUF  0       12      512
MAX_INODE       0       100     64000
MAX_FILE0       100     64000
CTBUFSIZE       128     0       256
MAX_PROC0       50      16000
MAX_REGION      0       500     160000
NCLIST  170     120     16640
MAXUP   100     15      16000
NOFILES 110     60      11000
NHINODE 128     64      8192
NAUTOUP 10      0       60
NGROUPS 8       0       128
BDFLUSHR30      1       300
MAX_FLCKREC     0       50      16000
PUTBUFSZ8000    2000    20000
MAXSLICE100     25      100
ULIMIT  4194303 2048    4194303
* Streams Parameters
NSTREAM 64      1       32768
NSTRPUSH9       9       9
NMUXLINK192     1       4096
STRMSGSZ16384   4096    524288
STRCTLSZ1024    1024    1024
STRMAXBLK       524288  4096    524288
NSTRPAGES       500     0       8000
STRSPLITFRAC    80      50      100
NLOG    3       3       3
NUMSP   64      1       256
NUMTIM  16      1       8192
NUMTRW  16      1       8192
* Semaphore Parameters
SEMMAP  10      10      8192
SEMMNI  10      10      8192
SEMMNS  60      60      8192
SEMMNU  30      10      8192
SEMMSL  25      25      150
SEMOPM  10      10      1024
SEMUME  10      10      25
SEMVMX  32767   32767   32767
SEMAEM  16384   16384   16384
* Shared Memory Parameters
SHMMAX  524288  131072  2147483647
SHMMIN  1       1       1
SHMMNI  100     100     2000
FILE    0       100     64000
NMOUNT  0       4       256
NPROC   0       50      16000
NREGION 0       500     160000

我们建议将这些值设置为:

NOFILES应当为4096或2048。

MAXUP应当为2048。

要想更改内核,进入/etc/conf/bin并使用./idtunename parameter来更改。例如,要将SEMMS改为200,用root账户执行命令:

# cd /etc/conf/bin
# ./idtune SEMMNS 200

我们建议对该系统进行调节,但是使用的正确参数值取决于访问应用程序或数据库的用户数目和数据库空间(也就是使用的缓冲池)。下面的项影响/etc/conf/cf.d/stune中定义的内核参数:

SHMMAX(推荐设定值:128MB)和SHMSEG(推荐设定值:15)。这些参数影响创建用户缓冲池的MySQL数据库引擎。

NOFILES和MAXUP至少应达到2048。

MAXPROC至少应当设置到3000/4000(取决于用户数)或更大值。

建议使用下面的公式来计算SEMMSL、SEMMNS和SEMMNU的值:

SEMMSL = 13

发现13最适合进程和MySQL。

SEMMNS = SEMMSL * 系统上运行的db服务器数目。

将SEMMNS设置为SEMMSL值乘以你在该系统上一次运行的db服务器的(最大)数目。

SEMMNU = SEMMNS

将SEMMNU值设置为等于SEMMNS值。可以将该值设置为75%的SEMMNS,但是这是一个保守的估计。

至少需要安装"SCO OpenServer Linker and Application Development Libraries"或OpenServer开发系统来使用gcc。你不能只使用GCC Dev系统,而不安装它们。

你应当获得FSU PTHREADS安装软件包并先安装它。可以从http://moss.csc.ncsu.edu/~mueller/ftp/pub/PART/pthreads.tar.gz获得。你还可以从 ftp://ftp.zenez.com/pub/zenez/prgms/FSU-threads-3.14.tar.gz获得预编译的安装软件包。

FSU Pthreads能用带tcpip的SCO UNIX 4.2编译,或使用OpenServer 3.0或Open Desktop 3.0(OS 3.0 ODT 3.0),安装带有使用一个GCC 2.5.X的SCO开发系统。对ODT或OS 3.0,将需要一个GCC 2.5.x的良好移植。没有一个良好的移植会有很多问题。对这个产品的移植需要SCO UNIX开发系统,没有它,缺少所需的库和链接器。还需要SCO-3.2v4.2-includes.tar.gz。该文件包含SCO开发include 文件的更改这是构建MySQL所需要的。需要用这些修改的头文件替换已有系统的include文件。可以从 ftp://ftp.zenez.com/pub/zenez/prgms/SCO-3.2v4.2-includes.tar.gz获得。

为了在系统上构造FSU Pthreads,需要做的工作是运行GNUmake。启动FSU-threads-3.14.tar.gz中的Makefile生成FSU-线程。

“thread/src”目录下运行./configure并且选择SCO OpenServer选项。这个命令拷贝“Makefile.SCO5”“Makefile”。然后运行make

为了在默认的“/usr/include”目录安装,作为root登录,然后cd到“thread/src”目录,并运行make install

记得在制作MySQL时要使用GNUmake

注释:如果你不是作为root启动safe_mysqld,将可能每进程只有默认的110个打开的文件。mysqld将在日志文件写下关于此的注解。

用SCO 3.2V4.2时,应当使用FSU PTHREADS 3.14或更新版。以下configure命令应当工作:

CFLAGS="-D_XOPEN_XPG4" CXX=gcc CXXFLAGS="-D_XOPEN_XPG4" \
./configure \
    --prefix=/usr/local/mysql \
    --with-named-thread-libs="-lgthreads -lsocket -lgen -lgthreads" \
    --with-named-curses-libs="-lcurses"

你可能遇到include文件的某些问题。在这种情况下,你能在ftp://www.mysql.com/pub/mysql/Downloads/SCO/SCO-3.2v4.2-includes.tar.gz找到新的SCO特定的include文件。你应该在MySQL源码树的“include”目录下打开这个文件。

SCO开发注意事项:

  • MySQL应该自动地检测FSU Pthreads并且用-lgthreads -lsocket -lgthreads选项链接mysqld
  • SCO开发库在FSU Pthreads是重入(reentrant)的。SCO宣称它的库函数是重入的,因此他们一定在FSU Pthreads中是重入的。在 OpenServer上的 FSU Pthreads 试图使用SCO方案制作重入的库。
  • FSU Pthreads(至少在ftp::/ftp.zenez.com的版本)链接了GNU malloc,如果你遇到内存使用的问题,确定“gmalloc.o”包含在“libgthreads.a”“libgthreads.so”中。

·在FSU Pthreads中,下列系统调用是pthreads感知的:read()、write()、getmsg()、connect()、accept()、select()和wait()。

·CSSA-2001-SCO.35.2(补丁列为定制erg711905-dscr_remap安全补丁(版本 2.0.0))中断FSU线程并使mysqld不稳定。如果你想在 OpenServer 5.0.6机器上运行mysqld必须删除它。

·如果你使用SCO OpenServer 5,可能需要用-DDRAFT7 in CFLAGS重新编译FSU pthreads。否则,mysqld启动时InnoDB会挂起。

·SCO在ftp://ftp.sco.com/pub/openserver5提供了OpenServer 5.0.x的操作系统补丁。

·SCO在ftp://ftp.sco.com/pub/security/sse和ftp://ftp.sco.com/pub/security/sse提供了OpenServer 5.0.x的安全修复和libsocket.so.2。

·Pre-OSR506安全修复。在ftp://stage.caldera.com/pub/security/openserver/或ftp://stage.caldera.com/pub/security/openserver/CSSA-2001-SCO.10/提供了libsocket.so.2和libresolv.so.1的telnetd修复,以及在pre-OSR506系统上的安装说明。

最好在编译/使用MySQL之前安装这些补丁。

Legend/ OpenServer 6.0.0有原生线程,没有2GB文件大小限制。

2.12.5.9. SCO UnixWare 7.1.x和OpenUNIX 8.0.0版注意事项

我们建议使用最新的MySQL产品发布。

我们可以用下面的configure命令在UnixWare 7.1.x中编译MySQL:

CC="cc" CFLAGS="-I/usr/local/include" \
CXX="CC" CXXFLAGS="-I/usr/local/include" \
./configure --prefix=/usr/local/mysql \
    --enable-thread-safe-client --with-berkeley-db=./bdb \
    --with-innodb --with-openssl --with-extra-charsets=complex

如果你想要使用gcc,必须使用gcc 2.95.3或更新版。

CC=gcc CXX=g++ ./configure --prefix=/usr/local/mysql

当构建MySQL时不使用UnixWare 7.1.4或OpenServer 6.0.0中的Berkeley DB版本。MySQL使用自己的Berkeley DB。用来构建静态和动态库的configure命令src_directory/bdb/build_unix/中,但是它不在MySQL自己的BDB版本中。工作区如下所示。

1. 按常规配置MySQL。

2. 进入(cd)bdb/build_unix/

3. 将 -p Makefile复制(cp)到Makefile.sav

4. 使用同样的选项并运行../dist/configure

5. 运行gmake

6. cp -p Makefile.sav Makefile

7. 进入顶级源目录并运行gmake

允许生成共享和动态库并工作。

SCO在ftp://ftp.sco.com/pub/unixware7提供了UnixWare 7.1.1的操作系统补丁,在ftp://ftp.sco.com/pub/unixware7/713/提供了UnixWare 7.1.3的操作系统补丁, UnixWare 7.1.4的见ftp://ftp.sco.com/pub/unixware7/714/, OpenUNIX 8.0.0的见 ftp://ftp.sco.com/pub/openunix8 。

SCO提供的安全修复相关信息:OpenUNIX见ftp://ftp.sco.com/pub/security/OpenUNIX,UnixWare见 ftp://ftp.sco.com/pub/security/UnixWare。

默认情况,在UnixWare 7.1.1系统中最大文件的大小为1GB,但是UnixWare 7.1.4中文件大小限制是1 TB(用VXFS)。一些OS实用程序 的限制是2GB。在UnixWare 7中可能的最大文件大小是1TB(用VXFS)。

在UnixWare 7.1.4中,你不需要采取措施来获得大文件支持,但在UnixWare 7.1.x的以前版本中需要启用大文件支持,可以运行fsadm。

# fsadm -Fvxfs -o largefiles /
# fsadm / * Note
# ulimit unlimited
# cd /etc/conf/bin
# ./idtune SFSZLIM 0x7FFFFFFF     ** Note
# ./idtune HFSZLIM 0x7FFFFFFF     ** Note
# ./idbuild -B
 
* This should report "largefiles".
** 0x7FFFFFFF represents infinity for these values.

用shutdown重启系统。

默认情况,/etc/conf/cf.d/mtune中的条目设置为:

Value   Default Min     Max
-----   ------- ---     ---
SVMMLIM 0x9000000       0x1000000       0x7FFFFFFF
HVMMLIM 0x9000000       0x1000000       0x7FFFFFFF
SSTKLIM 0x1000000       0x2000  0x7FFFFFFF
HSTKLIM 0x1000000       0x2000  0x7FFFFFFF

我们建议将这些值设置为:

SDATLIM 0x7FFFFFFF
HDATLIM 0x7FFFFFFF
SSTKLIM 0x7FFFFFFF
HSTKLIM 0x7FFFFFFF
SVMMLIM 0x7FFFFFFF
HVMMLIM 0x7FFFFFFF
SFNOLIM 2048
HFNOLIM 2048

我们建议对该系统进行调节,但是使用的正确参数值取决于访问应用程序或数据库的用户数目和数据库空间(也就是使用的缓冲池)。下面的项影响/etc/conf/cf.d/stune中定义的内核参数:

SHMMAX(推荐设定值:128MB)和SHMSEG(推荐设定值:15)。这些参数影响创建用户缓冲池的MySQL数据库引擎。

SFNOLIM和HFNOLIM至少应达到2048。

NPROC至少应当设置到3000/4000(取决于用户数)。

建议使用下面的公式来计算SEMMSL、SEMMNS和SEMMNU的值:

SEMMSL = 13

据发现13最适合进程和MySQL。

SEMMNS = SEMMSL * 系统上运行的db服务器数目。

将SEMMNS设置为SEMMSL值乘以你在该系统上一次运行的db服务器的(最大)数目。

SEMMNU = SEMMNS

将SEMMNU值设置为等于SEMMNS值。可以将该值设置为75%的SEMMNS,但是这是一个保守的估计。

2.12.5.10. SCO OpenServer 6.0.x版注意事项

OpenServer6的主要改进包括:

·大文件支持,可达到1 TB。

·多处理器支持,从4个处理器增加到32个处理器。

·增加的内存支持,可达到64GB。

·将UnixWare的功能扩展到OpenServer6。

·性能的改进

OpenServer6.0.0具有:

·/bin,用于与OpenServer5.0.x相同行为的命令。

·/u95/bin用于标准的命令,例如大文件系统(LFS)支持。

·/udk/bin用于UnixWare 7.1.4中相同的命令,默认是LFS支持。

下面是在OpenServer6上设置PATH的指导。如果用户想使用传统的OpenServer5.0.x,则路径应当首先为/bin。如果用户需要LFS支持,则 路径应当为/u95/bin:/bin。如果用户首选UnixWare 7支持,则路径应为/udk/bin:/u95/bin:/bin:。

我们建议使用最新的MySQL产品发布。

我们可以在OpenServer 6.0.x用下面的configure命令编译MySQL:

CC="cc" CFLAGS="-I/usr/local/include" \
CXX="CC" CXXFLAGS="-I/usr/local/include" \
./configure --prefix=/usr/local/mysql \
    --enable-thread-safe-client --with-berkeley-db=./bdb \
    --with-innodb --with-openssl --with-extra-charsets=complex \
    --enable-readline

如果你想要使用gcc,必须使用gcc2.95.3或更新版。

CC=gcc CXX=g++ ./configure --prefix=/usr/local/mysql

当构建MySQL时不使用UnixWare 7.1.4或OpenServer 6.0.0中的Berkeley DB版本。MySQL使用自己的Berkeley DB。用来构建静态和动态库的configure命令src_directory/bdb/build_unix/中,但是它不在MySQL自己的BDB版本中。工作区如下所示。

1. 按常规配置MySQL。

2. 进入(cd)bdb/build_unix/

3. 将 -p Makefile复制(cp)到Makefile.sav

4. 使用同样的选项并运行../dist/configure

5. 运行gmake

6. cp -p Makefile.sav Makefile

7. 进入顶级源目录并运行gmake

允许生成共享和动态库并工作。OpenServer6.0.0 还需要MySQL源码树的补丁和适用于bdb/dist/config.guess的config.guess的补丁。你可以从ftp://ftp.zenez.com/pub/zenez/prgms/mysql-4.1.12-osr6-patches.tar.gz和ftp://ftp.zenez.com/pub/zenez/prgms/mysql-4.x.x-osr6-patches下载补丁。有一个README文件可以提供帮助。

SCO在ftp://ftp.sco.com/pub/openserver6提供了OpenServer6的操作系统补丁。

SCO在ftp://ftp.sco.com/pub/security/OpenServer提供关于安全修复的信息。

默认情况,在OpenServer6.0.0系统的最大文件大小为1TB。一些操作系统工具的限制是2GB。在UnixWare 7中最大文件大小可以是1TB(用 VXFS或HTFS)。

默认情况,/etc/conf/cf.d/mtune中的条目设置为:

Value   Default Min     Max
-----   ------- ---     ---
SVMMLIM 0x9000000       0x1000000       0x7FFFFFFF
HVMMLIM 0x9000000       0x1000000       0x7FFFFFFF
SSTKLIM 0x1000000       0x2000  0x7FFFFFFF
HSTKLIM 0x1000000       0x2000  0x7FFFFFFF

我们建议将这些值设置为:

SDATLIM 0x7FFFFFFF
HDATLIM 0x7FFFFFFF
SSTKLIM 0x7FFFFFFF
HSTKLIM 0x7FFFFFFF
SVMMLIM 0x7FFFFFFF
HVMMLIM 0x7FFFFFFF
SFNOLIM 2048
HFNOLIM 2048

我们建议对该系统进行调节,但是使用的正确参数值取决于访问应用程序或数据库的用户数目和数据库空间(也就是使用的缓冲池)。下面的项影响/etc/conf/cf.d/stune中定义的内核参数:

SHMMAX(推荐设定值:128MB)和SHMSEG(推荐设定值:15)。这些参数影响创建用户缓冲池的MySQL数据库引擎。

SFNOLIM和HFNOLIM至少应达到2048。

NPROC至少应当设置到3000/4000(取决于用户数)。

建议使用下面的公式来计算SEMMSL、SEMMNS和SEMMNU的值:

SEMMSL = 13

发现13最适合进程和MySQL。

SEMMNS = SEMMSL * 系统上运行的db服务器数目。

将SEMMNS设置为SEMMSL值乘以你在该系统上一次运行的db服务器的(最大)数目。

SEMMNU = SEMMNS

将SEMMNU值设置为等于SEMMNS值。可以将该值设置为75%的SEMMNS,但是这是一个保守的估计。

2.12.6. OS/2注意事项

MySQL使用太多的打开文件。因此,应该增加类似下面的东西到“CONFIG.SYS”文件:
SET EMXOPT=-c -n -h1024

如果不这样做,将可能碰到下列错误:

File 'xxxx' not found (Errcode: 24)`

当OS/2 Warp 3上使用MySQL时,要求FixPack 29或以上版本。用OS/2 Wrap 4,要求FixPack 4或以上版本。这是Pthreads库的一个要求。MySQL必须安装在支持长文件名的一个分区上,如HPFS、FAT32等等。

“INSTALL.CMD”脚本必须从OS/2自己的“CMD.EXE”运行并且不能工作在替代外壳如“4OS2.EXE”。

“scripts/mysql-install-db”脚本已经被重新命名了:它称为“install.cmd”并且是一个REXX脚本,将安装默认的MySQL安全配置并为MySQL创建WorkPlace Shell图标。

动态模块支持通过编译但没有充分测试,动态模块应该使用Pthreads运行时刻库编译。

gcc -Zdll -Zmt -Zcrtdll=pthrdrtl -I../include -I../regex -I.. \
    -o example udf_example.cc -L../lib -lmysqlclient udf_example.def
mv example.dll example.udf

注释:由于OS/2的限制,UDF模块名字的词干不能超过8个字符。模块存储在“/mysql2/udf”目录;safe-mysqld.cmd脚本将把这个目录放在BEGINLIBPATH环境变量中。当使用UDF模块时,指定的扩展名被忽略--它被假定为“.udf”。例如,在 Unix上,共享模块可能被命名为“example.so”并且可以象这样从它装载函数:

mysql>CREATE FUNCTION metaphon RETURNS STRING SONAME 'example.so'

在OS/2中, 模块被命名为example.udf,但是不能指定模块扩展名:

mysql> CREATE FUNCTION metaphon RETURNS STRING SONAME 'example'