mysql solaris_MySQL

2.12.3. Solaris注意事项

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

如果出现这种问题,必须使用GNU tar(gtar)来解压缩分发版。可以从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,建议使用编译器gcc2.95.2或3.2。可以从egcs1.1.1和gcc2.8.1不能在SPARC上可靠地工作。

当使用gcc2.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标记的gcc3.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时出现下面的错误消息,原因是你企图不启用-mtmulti-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和GNU 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不提供静态版本的系统库(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.sofrom /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上使用gcc或egcs,并且你碰到了在装载时的内核转储问题,应该使用下列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”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值