4.2的库文件升级,或对其他分发http://www.sunsite.unc.edu/pub/Linux/distributions/redhat/code/rpm/。
如果你正在链接你自己的MySQL客户并且得到错误:
ld.so.1: ./my: fatal: libmysqlclient.so.4: open failed: No such file or directory
当执行它们时,这个问题可用下列方法之一避免:
用下列标志链接客户(而不是-Lpath): -Wl,r/path-libmysqlclient.so。 拷贝libmysqclient.so到“/usr/lib”。 在运行你的客户程序前,把libmysqlclient.so所在目录的路径名加到LD_RUN_PATH的环境变量中。 如果你正在使用 Fujitsu 编译器(fcc / FCC),编译MySQL你将有一些问题,因为 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
4.11.5.1 Linux-x86 注意事项 MySQL要求libc版本 5.4.12 或更新,已知可工作在libc 5.4.46。glibc版本2.0.6和以后版本应该也工作。使用RedHat的glibc RPM有一些问题,所以如果你有问题,检查是否有任何更新!glibc2.0.7-19和2.0.7-29 RPM已知可以工作。
在一些更老的 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宏增加一个额外下划线 (''''__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''''
在Debian GNU/Linux上,如果你想要在系统启动时自动启动MySQL,做下列命令:
shell> cp support-files/mysql.server /etc/init.d/mysql.server shell> /usr/sbin/update-rc.d mysql.server defaults 99
mysql.server可以在MySQL安装目录的“share/mysql”目录下面找到, 或在MySQL源代码树的“support-files”目录下找到。
如果mysqld在它启动时总是核心倾倒(core dump), 问题可能是你有一个老版本的“/lib/libc.a”,重命名它,然后删除“sql/mysqld”并且重新make install再试一试。这个问题在一些 Slackware 安装上被报告了。有最新版本的glibc的RedHat 5.0也有一些类似的问题。见4.11.5.2 RedHat 5.0 注意事项。
如果再链接mysqld时,你得到下列错误, 它意味着你的“libg++.a”没有正确安装:
/usr/lib/libc.a(putc.o): In function `_IO_putc'''': putc.o(.text+0x0): multiple definition of `_IO_putc''''
像这样运行configure,你能避免使用“libg++.a”:
shell> CXX=gcc ./configure
4.11.5.2 RedHat 5.0 注意事项 如果你在RedHat上有MySQL的任何问题,你应该开始升级glibc到最新可能的版本!
如果你安装所有的官方RedHat补丁(包括glibc-2.0.7-19和glibc-devel-2.0.7-19),MySQL的二进制代码和源代码分发运行应该没有任何麻烦!
因为在glibc2.0.5里面有关如何释放pthread_key_create变量有一个错误,更新是需要的。用glibc2.0.5,你必须使用一个静态地链接的MySQL二进制分发。如果你想要从源代码编译,你必须安装来自于http://www.mysql.com/Downloads/Linux 的LinuxThreads修正版本或升级你的glibc。
如果你有一个不正确的glibc或LinuxThreads版本,其结果是mysqld在每个连接以后崩溃。例如,mysqladmin version完成后,mysqld将崩溃!
另一个不正确的库的症状是当mysqld启动时,马上崩溃。在一些Linux系统上,这个问题可以通过这样的配置来修正:
shell> ./configure -- with-mysqld-ldflags=-all-static 在Redhat 5.0上,容易的方法是安装glibc2.0.7-19 RPM并运行configure --with-mysqld-ldflags=-all-static选项。
对于glibc2.0.7的源代码分发,容易运用并被MySQL测试的一个补丁可以在下面找到:
http://www.mysql.com/Download/Linux/glibc-2.0.7-total-patch.tar.gz
如果当你构造MySQL时,你有类似于这些崩溃的经历, 你总能下载到最新的MySQL二进制版本。这是静态链接的以避免库冲突而且应该在所有的Linux系统上工作!
MySQL自带一个内部的调试器可以有很多信息产生踪迹文件,能被用来发现并解决大量不同的问题。见G.1 调试一个MySQL服务器。
4.11.5.3 RedHat 5.1 注意事项 RedHat 5.1的glibc(glibc2.0.7-13 )有一个内存缺陷,所以要得到一个稳定的MySQL版本,你必须升级glibc到2.0.7-19、降级glibc或使用一个mysqld的二进制版本。如果你不这样做,你将碰到内存问题(存储器溢出,等等, 等等)。在这种情况下,最常见的错误是:
Can''''t create a new thread (errno 11). If you are not out of available memory, you can consult the manual for any possible OS dependent bug
在你升级到glibc2.0.7-19以后,你可以用动态链接(缺省)配置MySQL,但是在你从源代码安装了glibc 2.0.7-19之前,你不能运行configure --with-mysqld-ldflags=-all-static选项!
你可以用rpm -q glibc检查你有glibc哪个版本。
4.11.5.4 Linux-SPARC 注意事项 在一些实现中,readdir_r()被破坏了。其症状是SHOW DATABASES总是返回一个空集合。这可以通过在编译前从“config.h”中删除HAVE_READDIR_R进行更正。
有些问题将需要给你的Linux安装打补丁。补丁可在http://www.mysql.com/patches/Linux-sparc-2.0.30.diff找到,这个补丁是针对Linux分发“sparclinux-2.0.30.tar.gz”,它们可从vger.rutgers.edu(一个从来没有与官方的2.0.30版合并的版本)得到。你也必须安装LinuxThreads 0.6或更新。
感谢jacques@solucorp.qc.ca提供这个信息。
4.11.5.5 Linux-Alpha注意事项 在Linux-Alpha上的大问题仍然是在这个平台上的glibc的线程有一些问题。你应该从得到你能找到的最新glibc版本开始。
注意:在你运行任何使用线程的程序之前(象mysqld、thr_alarm或thr_lock),你应该增减共享存储器的限制(用ulimit)。如果你忘记这样做,MySQL基准测试已知是失败的!
用下列命令配置MySQL:
shell> CC=gcc CCFLAGS="-Dalpha_linux_port" CXX=gcc CXXFLAGS="-O3 -Dalpha_linux_port -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql
试试编译mysys/thr_lock和mysys/thr_alarm,测试这些程序的运行!(不用参数调用每一个,如果一切正常,每个应该以test_succeeded结束。)
在安装MySQL以后,在safe_mysqld里去掉ulimit命令的注释,并加入选项以增加共享存储器。
注意对MySQL来说,Linux-Alpha仍然是一个alpha质量的平台。用最新glibc,你有一个让它工作的很好机会。
如果你用信号方面的问题(MySQL出人意料地在高负载下死掉),你可能找到了一个线程和信号有关的OS错误。在这种情况下,你可以告诉MySQL如下配置以不使用信号:
shell> CFLAGS=-DDONT_USE_THR_ALARM CXXFLAGS=-DDONT_USE_THR_ALARM ./configure ...
这不影响MySQL性能,但是有副作用,就是你不能用mysqladmin kill或mysqladmin shutdown杀死在一个连接上“睡眠”的客户。相反,当客户发出下一个命令时,它将死掉。
4.11.5.6 MkLinux 注意 MySQL应该能工作在有最新glibc包的MkLinux上(用glibc2.0.7测试过)。
4.11.5.7 Qube2 Linux注意事项 为了让MySQL在Qube2上工作,(Linux Mips),你需要最新的glibc库(glibc-2.0.7-29C2已知可工作)。你也必须使用egcsC++编译器(egcs-1.0.2-9或更新)。
4.11.6 Alpha-DEC-Unix 注意事项 当在Digital UNIX下编译线程程序时,文档推荐对于cc和cxx使用-pthread选项而且库文件用-lmach -lexc(除了-lpthread外)。你应该象下面这样运行configure:
shell> 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信号),如果如此,试着象这样启动服务器:
shell> nohup mysqld [options] &
nohup使得跟随它的命令忽视从终端发来的任何SIGHUP信号了。另外,通过运行safe_mysqld启动服务器,它为你使用nohup调用mysqld。
4.11.7 Alpha-DEC-OSF1注意事项 如果你有编译问题并安装了DECCC和gcc,尝试这样运行configure:
shell> CC=cc CFLAGS=-O CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql
如果你得到“c_asm.h”文件的问题,你可以创建并使用一个“哑(dummy)”“c_asm.h”文件:
shell> touch include/c_asm.h shell> CC=gcc CFLAGS=-I./include CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql
在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,:
shell> 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 export CC CFLAGS CXX CXXFLAGS ./configure --prefix=/usr/mysql/mysql --with-low-memory --enable-large-files --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"。
当使用g上一页 [1] [2] [3] [4] [5] [6] [7] 下一页 |