Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103400847
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Mysql/postgreSQL

2008-05-11 17:29:37

2.12.2. Mac OS X注意事项

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_timeoutinteractive_timeoutnet_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注意事项

Solaris中,甚至在解压缩MySQL分发版时,你也会遇到问题,因为Solaris tar不能处理长文件名。这说明解压缩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.23.2。可以从下载。请注意egcs 1.1.1gcc 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系统,在CFLAGSCXXFLAGS环境变量中加上-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二进制,在CFLAGSCXXFLAGS增加-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 储存引擎时将会造成严重的性能下降。

如果fdatasyncsched_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加到CFLAGSCXXFLAGS上并重新编译。

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

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

如果你用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不提供静态版本的系统库(libpthreadslibdl),因此你不能用--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.72.8中使用Solaris 2.6二进制。大多数Solaris 2.6发布也适用Solaris 2.72.8

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

Solaris 2.7/2.8include文件中有一些缺陷。当使用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注意事项

本节提供在各种BSD Unix中使用MySQL的相关信息。

2.12.4.1. FreeBSD注意事项

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

最容易因此是比较受喜欢的安装方法是使用mysql-servermysql-client移植,可从得到。

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

  • 一个全优化的工作在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中的MySQLLinuxThreads库连接,这样可以避免一些原生FreeBSD线程执行时的问题。为了更好地将LinuxThreads同原生线程进行对比,参见Jeremy Zawodny的文章FreeBSD or Linux for your MySQL Server? 地址:http://jeremy.zawodny.com/blog/archives/000697.html

FreeBSD使用LinuxThreads的已知问题有:

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

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

MySQL构建进程需要GNU make(gmake)工作。如果没有GNU make,必须在编译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.confmysqld用户提高限制并用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版注意事项

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.h184/usr/include/sys/pthreads.h440中的原型冲突。

一个解决办法是将/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 CC++编译器的路径前是否有到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二进制,这是我们已经构建并测试过的。我们也收到了MySQLHP-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
 

可以从找到上述编译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。一般情况可能需要使用power2powerpowerpc。另外,你可能需要使用604604e。我们不能绝对肯定但怀疑power一般应安全,即使在power2机器上也安全。

如果你不知道你的CPU是什么样的,可以执行uname -m命令。可以产生类似000514676700的字符串,格式为xxyyyyyymmss,其中xxss总是00,yyyyyy是唯一的系统IDmmCPU PlanarID。从可以找到这些值的图表。

该图表可以给出你可以使用的机器类型和机器型号,确定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.1gcc,进行下面的更改。

配置完后,编辑config.hinclude/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'

关于使用大量内存的信息请查阅

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,因为egcsDEC上有一些严重缺陷!

当在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行。

如果使用CompaqCC编译器,下面的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

请注意从下载最新的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_ALLOCHAVE_ALLOCA_H的行删除即可。如果mysqladmin create不工作,把config.h定义HAVE_READDIR_R的行删除,你也可能必须删除HAVE_TERM_H行。

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

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

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

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

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

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

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

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

 

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

 

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

在用原生Irix CC++编译器7.3.1.2Irix 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

可以得到gcc

该开发系统需要在OpenServer 5.0.6OpenServer Execution Environment Supplement oss646Boss656BOpenSource库位于 gwxlibs。所有OpenSource工具位于opensrc目录。可以从获得。

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

SCO提供的操作系统补丁:OpenServer 5.0.[0-6]OpenServer 5.0.7

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

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

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

串缓冲区的分配单位为4096 字节的页,clists70字节,锁定记录为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 aioHardware/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_FILE        0               100             64000
CTBUFSIZE       128             0               256
MAX_PROC        0               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
BDFLUSHR        30              1               300
MAX_FLCKREC     0               50              16000
PUTBUFSZ        8000            2000            20000
MAXSLICE        100             25              100
ULIMIT          4194303         2048            4194303
* Streams Parameters
NSTREAM         64              1               32768
NSTRPUSH        9               9               9
NMUXLINK        192             1               4096
STRMSGSZ        16384           4096            524288
STRCTLSZ        1024            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应当为40962048

MAXUP应当为2048

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

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

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

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

NOFILESMAXUP至少应达到2048

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

建议使用下面的公式来计算SEMMSLSEMMNSSEMMNU的值:

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安装软件包并先安装它。可以从获得。你还可以从 获得预编译的安装软件包。

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

为了在系统上构造FSU Pthreads,需要做的工作是运行GNU make。启动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时要使用GNU make

注释:如果你不是作为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文件的某些问题。在这种情况下,你能在找到新的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(至少在的版本)链接了GNU malloc,如果你遇到内存使用的问题,确定gmalloc.o包含在libgthreads.alibgthreads.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提供了OpenServer 5.0.x的操作系统补丁。

·         SCOftp://ftp.sco.com/pub/security/sseftp://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.2libresolv.so.1telnetd修复,以及在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.4OpenServer 6.0.0中的Berkeley DB版本。MySQL使用自己的Berkeley DB。用来构建静态和动态库的configure命令src_directory/bdb/build_unix/中,但是它不在MySQL自己的BDB版本中。工作区如下所示。

1.    按常规配置MySQL

2.    进入cdbdb/build_unix/

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

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

5.    运行gmake

6.    cp -p Makefile.sav Makefile

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

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

SCO提供了UnixWare 7.1.1的操作系统补丁, 提供了UnixWare 7.1.3的操作系统补丁, UnixWare 7.1.4的见, OpenUNIX 8.0.0的见

SCO提供的安全修复相关信息:OpenUNIXftp://ftp.sco.com/pub/security/OpenUNIXUnixWareftp://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数据库引擎。

SFNOLIMHFNOLIM至少应达到2048

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

建议使用下面的公式来计算SEMMSLSEMMNSSEMMNU的值:

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.4OpenServer 6.0.0中的Berkeley DB版本。MySQL使用自己的Berkeley DB。用来构建静态和动态库的configure命令src_directory/bdb/build_unix/中,但是它不在MySQL自己的BDB版本中。工作区如下所示。

1.    按常规配置MySQL

2.    进入cdbdb/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.guessconfig.guess的补丁。你可以从下载补丁。有一个README文件可以提供帮助。

SCO提供了OpenServer6的操作系统补丁。

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

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

默认情况,/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数据库引擎。

SFNOLIMHFNOLIM至少应达到2048

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

建议使用下面的公式来计算SEMMSLSEMMNSSEMMNU的值:

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必须安装在支持长文件名的一个分区上,如HPFSFAT32等等。

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'

2.13. Perl安装注意事项

PerlMySQL的支持借助DBI/DBD客户端接口。接口要求Perl 5.6.0或以后版本。如果你的Perl版本更旧,接口将不能工作

如果想要在Perl DBI中使用事务,需要有1.2216版或更新版DBD::mysql。建议使用2.9003版或更新版。

如果你使用MySQL 4.1客户端库,必须使用DBD::mysql 2.9003或更新版。

MySQL分发版不包含Perl支持。可以从获得Unix需要的模块,或在Windows中使用ActiveState ppm程序。以下章节描述了如何做。

如果你想要运行MySQL基准脚本,必须安装Perl支持。请参见7.1.4节,“MySQL基准套件”

2.13.1. 在Unix中安装Perl

MySQL Perl支持也要求你安装了MySQL客户端编程支持(库和头文件)。大多数安装中安装了必要的文件。但是,如果你在Linux中从RPM文件安装MySQL,确保安装了开发者RPM。客户端程序在客户端RPM中,但是客户端编程支持在开发者RPM

如果你想要安装Perl支持,需要的文件能从CPAN (Comprehensive Perl Archive Network)获得。

Unix中安装Perl模块最简单的方法是使用CPAN模块。例如:

shell> perl -MCPAN -e shell
cpan> install DBI
cpan> install DBD::mysql

DBD::mysql安装运行许多测试。测试中使用默认用户名和密码尝试连接本地MySQL服务器。(默认用户名是Unix中的登录名和Windows中的ODBC。默认密码“没有密码。) 如果你不能通过这些值连接服务器 (例如,如果你的账户有密码),测试失败。可以使用force install DBD::mysql忽略失败的测试。

DBI需要Data::Dumper模块。应该可以安装;如果不能,应当在安装DBI前安装Data::Dumper模块。

还可以下载tar文件压缩格式的模块分发版,并手动构建模块。例如,解压缩和构建DBI分发版的过程为:

1.     将分发版解压缩到当前目录:

2.            shell> gunzip < DBI-VERSION.tar.gz | tar xvf -

该命令创建目录 DBI-VERSION

3.    进入解压缩分发版的顶级目录:

4.            shell> cd DBI-VERSION

5.    构建分发版并编译:

6.            shell> perl Makefile.PL
7.            shell> make
8.            shell> make test
9.            shell> make install

make test命令很重要,因为它验证模块正在工作。注意:在你DBD::mysql安装期间运行该命令试验接口代码时,MySQL服务器必须正在运行,否则测试将失败。

无论何时你安装一个新版本的MySQL,重建并且重新安装DBD::mysql分发版是一个好主意, 特别是在升级MySQL后,观察所有异常,如DBI脚本失败。

如果你没有权限在系统目录下安装Perl模块,或如果你安装本地Perl模块,下列参考书可以帮助你:

在标题“Installing New Modules that Require Locally Installed Modules下面查找。

2.13.2. 在Windows下安装ActiveState Perl

Windows中,应当按照以下步骤安装带ActiveState PerlMySQL DBD模块:

·         获得ActiveState Perl并安装。

·         打开控制台窗口(DOS窗口)

·         如果需要,设置HTTP_proxy变量。例如,你可以试试:

·                set HTTP_proxy=my.proxy.com:3128

·         启动PPM程序:

·                C\> C\perl\bin\ppm.pl

·         如果你还没有安装DBI,则安装:

·                ppm> install DBI

·         如果成功,运行下面的命令:

·                install\
·                ftp://ftp.de.uu.net/pub/CPAN/authors/id/JWIED/DBD-mysql-1.2212.x86.ppd

该进程应当在ActiveState Perl 5.6或更新版本中工作。

如果你不能使上述步骤工作,应该安装MyODBC驱动程序并且通过ODBC连接MySQL服务器:

use DBI;
$dbh= DBI->connect("DBI:ODBC:$dsn",$user,$password) ||
die "Got error $DBI::errstr when connecting to $dsn\n";

2.13.3. 使用Perl DBI/DBD接口的问题

如果Perl报告它不能发现../mysql/mysql.so模块,可能试因为Perl不能定位共享库libmysqlclient.so

可以使用下面的方法修复该问题:

·         perl Makefile.PL -static -config而不要用perl Makefile.PL编译DBD::mysql分发版。

·         libmysqlclient.so复制到其它共享库所在的目录 (可能为/usr/lib /lib)

·         修改用来编译DBD::mysql-L选项,反应libmysqlclient.so的实际位置。

·         Linux中,你可以将libmysqlclient.so的目录路径名增加到/etc/ld.so.conf文件。

·         libmysqlclient.so的目录路径名增加到LD_RUN_PATH环境变量。一些系统使用LD_LIBRARY_PATH

注意如果连接器没有找到另一个库,你还可能需要修改-L选项。例如,如果因为libc/lib下并且连接命令指定了-L/usr/lib,连接器不能找到它,将-L选项更改为-L/lib或在连接命令中增加-L/lib

如果你遇到下面的DBD::mysql错误,你可能使用了gcc(或使用了用gcc编译的旧的二进制)

/usr/bin/perl: can't resolve symbol '__moddi3'
/usr/bin/perl: can't resolve symbol '__divdi3'

当构建mysql.so库是在连接命令中增加-L/usr/lib/gcc-lib/... -lgcc(当编译Perl客户端时检查生成mysql.somake的输出)-L选项应指定libgcc.a在系统中的安装目录的路径名。

该问题的另一个原因是PerlMySQL没有用gcc编译。在这种情况下,你可以用gcc编译二者来解决。

当你运行测试时你会从DBD::mysql看见下面的错误:

t/00base............install_driver(mysql) failed:
Can't load '../blib/arch/auto/DBD/mysql/mysql.so' for module DBD::mysql:
../blib/arch/auto/DBD/mysql/mysql.so: undefined symbol:
uncompress at /usr/lib/perl5/5.00503/i586-linux/DynaLoader.pm line 169.

这意味着你需要在连接行包括-lz 压缩库。可以通过更改文件lib/DBD/mysql/Install.pm的下列行来实现:

$sysliblist .= " -lm";

更改为:

$sysliblist .= " -lm -lz";

然后,你必须运行make realclean 然后重新安装。

如果你想要在SCO上安装DBI,需要在DBI-xxx 和每个子目录中编辑Makefile。请注意下面的更新假定使用gcc 2.95.2或更新版:

旧:                                 新:
CC = cc                               CC = gcc
CCCDLFLAGS = -KPIC -W1,-Bexport       CCCDLFLAGS = -fpic
CCDLFLAGS = -wl,-Bexport              CCDLFLAGS =
 
LD = ld                               LD = gcc -G -fpic
LDDLFLAGS = -G -L/usr/local/lib       LDDLFLAGS = -L/usr/local/lib
LDFLAGS = -belf -L/usr/local/lib      LDFLAGS = -L/usr/local/lib
 
LD = ld                               LD = gcc -G -fpic
OPTIMISE = -Od                        OPTIMISE = -O1
 
旧:
CCCFLAGS = -belf -dy -w0 -U M_XENIX -DPERL_SCO5 -I/usr/local/include
 
新:
CCFLAGS = -U M_XENIX -DPERL_SCO5 -I/usr/local/include

这些更改是必需的,因为用icccc编译的Perl动态装载器不装载DBI模块。

如果你想要在不支持动态链接(例如 SCO)的系统中使用Perl模块,可以生成一个包括DBIDBD::mysql的静态版本的Perl。方法是生成一个用DBI代码连接的Perl版本,并将它安装到当前Perl的顶级目录。然后构建一个含DBD代码连接的Perl版本并安装。

SCO中,必须将下面的环境变量设置为:

LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:/usr/progressive/lib

Or

LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:\
    /usr/progressive/lib:/usr/skunk/lib
LIBPATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:\
    /usr/progressive/lib:/usr/skunk/lib
MANPATH=scohelp:/usr/man:/usr/local1/man:/usr/local/man:\
    /usr/skunk/man:

首先,在DBD分发版的安装目录运行下述命令来创建一个包括静态连接的DBD模块的Perl

shell> perl Makefile.PL -static -config
shell> make
shell> make install
shell> make perl

然后必须安装新的Perlmake perl的输出表示安装时需要执行的make命令。在SCO中,为make -f Makefile.aperl inst_perl MAP_TARGET=perl

然后,使用刚刚创建的Perl,在DBD::mysql分发版的安装目录运行下述命令来创建另一个Perl,应包括静态连接的DBD::mysql

shell> perl Makefile.PL -static -config
shell> make
shell> make install
shell> make perl

最后,应当安装新的Perlmake perl输出指示了使用的命令。


这是MySQL参考手册的翻译版本,关于MySQL参考手册,请访问dev.mysql.com.。原始参考手册为英文版,与英文版参考手册相比,本翻译版可能不是最新的。

阅读(1217) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~