免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: luren04
打印 上一主题 下一主题

【申请加精】MySQL 5.1参考手册  关闭 [复制链接]

论坛徽章:
0
41 [报告]
发表于 2008-04-15 11:59 |只看该作者
2.12.3. Solaris注意事项
2.12.3.1. Solaris 2.7/2.8注意事项
2.12.3.2. Solaris x86注意事项
在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 notrun 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和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 foundundefined reference to `dlopen'cannot find -lrt如果你连接你自己的MySQL客户端程序,运行时会出现下面的错误:

ld.so.1: fatal: libmysqlclient.so.#pen 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 previousdefinition如果出现该问题,修复的办法是将/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上使用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
42 [报告]
发表于 2008-04-15 12:00 |只看该作者
2.12.4. BSD注意事项

本节提供在各种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)工作。如果没有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-assemblergmakegmake installcd /usr/local/mysqlbin/mysql_install_db --user=mysqlbin/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" # 1GBkern.dfldsiz="1073741824" # 1GBkern.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=no2.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 exhaustedmake[2]: *** [item_func.o] Error 1试试使用ulimit -v 80000并再次运行make。如果这还不行并且你正在使用bash,试试换到csh或sh;一些BSDI用户报告了使用bash和ulimit有问题。

如果你正在使用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,试试换到csh或sh;一些BSDI用户报告了使用bash和ulimit会有问题。

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上的另一个数据库。(可以通过符号连接连接到另一个硬盘)。

论坛徽章:
0
43 [报告]
发表于 2008-04-15 12:01 |只看该作者
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-shared2.12.5.2. HP-UX 11.x版注意事项
由于在标准 HP-UX库中有一些严重错误,试图在HP-UX 11.0上运行MySQL前应当安装下面的补丁:
PHKL_22840 Streams cumulativePHNE_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 onlinedocumentation如果运行configure时遇到下面的错误,请验证在到HP-UX C和C++编译器的路径前是否有到K&R编译器的路径:

checking for cc option to accept ANSI C... noconfigure: 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补丁的版本。

论坛徽章:
0
44 [报告]
发表于 2008-04-15 12:01 |只看该作者
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=$CFLAGSexport 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编译器的限制。

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

在 AIX 上使用egcs和gcc 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/pse ... /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 kill或mysqladmin 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 _AIX41extern "C" int initgroups(const char *,int);#endif如果你需要为mysqld进程分配大量内存,只使用ulimit -d unlimited是不够的。还可以需要修改mysqld_safe,增加下面的行:

export LDR_CNTRL='MAXDATA=0x80000000'关于使用大量内存的信息请查阅http://publib16.boulder.ibm.com/ ... 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下编译线程程序时,文档推荐对于cc和cxx使用-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 ofaccept(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  -lmcd ..gnumakegnumake installscripts/mysql_install_db

论坛徽章:
0
45 [报告]
发表于 2008-04-15 12:02 |只看该作者
2.12.5.6. Alpha-DEC-OSF/1注意事项
如果遇到编译问题并安装了DEC CC和gcc,尝试这样运行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.hCC=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. 87" 上,编译器有了一些奇怪的行为(未定义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 -pthreadCFLAGS=-O4 -ansi_alias -ansi_args -fast -inline speed \       -speculate all -arch hostCXX=cxx -pthreadCXXFLAGS=-O4 -ansi_alias -ansi_args -fast -inline speed \         -speculate all -arch host -noexceptions -norttiexport 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 kill或mysqladmin shutdown杀死在一个连接上“睡眠”的客户端。相反,当客户端发出下一个命令时,它将死掉。

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

sql_acl.cc:1456: Internal compiler error in `scan_region',at except.c:2566Please 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/ ... 6.2_indigo.rps.html

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

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

http://support.sgi.com/surfzone/ ... /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.hmake应该也有安排上的问题报告。如果只有一个线程正在运行,事情会变慢的。通过启动另外一个客户端来避免它,这可以导致此后其它线程的执行速度增加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.a2.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              450000NHBUF           0               32              524288NMPBUF          0               12              512MAX_INODE       0               100             64000MAX_FILE        0               100             64000CTBUFSIZE       128             0               256MAX_PROC        0               50              16000MAX_REGION      0               500             160000NCLIST          170             120             16640MAXUP           100             15              16000NOFILES         110             60              11000NHINODE         128             64              8192NAUTOUP         10              0               60NGROUPS         8               0               128BDFLUSHR        30              1               300MAX_FLCKREC     0               50              16000PUTBUFSZ        8000            2000            20000MAXSLICE        100             25              100ULIMIT          4194303         2048            4194303* Streams ParametersNSTREAM         64              1               32768NSTRPUSH        9               9               9NMUXLINK        192             1               4096STRMSGSZ        16384           4096            524288STRCTLSZ        1024            1024            1024STRMAXBLK       524288          4096            524288NSTRPAGES       500             0               8000STRSPLITFRAC    80              50              100NLOG            3               3               3NUMSP           64              1               256NUMTIM          16              1               8192NUMTRW          16              1               8192* Semaphore ParametersSEMMAP          10              10              8192SEMMNI          10              10              8192SEMMNS          60              60              8192SEMMNU          30              10              8192SEMMSL          25              25              150SEMOPM          10              10              1024SEMUME          10              10              25SEMVMX          32767           32767           32767SEMAEM          16384           16384           16384* Shared Memory ParametersSHMMAX          524288          131072          2147483647SHMMIN          1               1               1SHMMNI          100             100             2000FILE            0               100             64000NMOUNT          0               4               256NPROC           0               50              16000NREGION         0               500             160000我们建议将这些值设置为:

NOFILES应当为4096或2048。

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数据库引擎。

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,需要做的工作是运行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文件的某些问题。在这种情况下,你能在ftp://www.mysql.com/pub/mysql/Do ... 4.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/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.2和libresolv.so.1的telnetd修复,以及在pre-OSR506系统上的安装说明。

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

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

论坛徽章:
0
46 [报告]
发表于 2008-04-15 12:02 |只看该作者
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       0x7FFFFFFFHVMMLIM         0x9000000       0x1000000       0x7FFFFFFFSSTKLIM         0x1000000       0x2000          0x7FFFFFFFHSTKLIM         0x1000000       0x2000          0x7FFFFFFF我们建议将这些值设置为:

SDATLIM 0x7FFFFFFFHDATLIM 0x7FFFFFFFSSTKLIM 0x7FFFFFFFHSTKLIM 0x7FFFFFFFSVMMLIM 0x7FFFFFFFHVMMLIM 0x7FFFFFFFSFNOLIM 2048HFNOLIM 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/pr ... osr6-patches.tar.gzftp://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       0x7FFFFFFFHVMMLIM         0x9000000       0x1000000       0x7FFFFFFFSSTKLIM         0x1000000       0x2000          0x7FFFFFFFHSTKLIM         0x1000000       0x2000          0x7FFFFFFF我们建议将这些值设置为:

SDATLIM 0x7FFFFFFFHDATLIM 0x7FFFFFFFSSTKLIM 0x7FFFFFFFHSTKLIM 0x7FFFFFFFSVMMLIM 0x7FFFFFFFHVMMLIM 0x7FFFFFFFSFNOLIM 2048HFNOLIM 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,但是这是一个保守的估计。

论坛徽章:
0
47 [报告]
发表于 2008-04-15 12:03 |只看该作者
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.defmv 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';

论坛徽章:
0
48 [报告]
发表于 2008-04-15 12:04 |只看该作者

2.13. Perl安装注意事项

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

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

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

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

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

论坛徽章:
0
49 [报告]
发表于 2008-04-15 12:04 |只看该作者
2.13.1. 在Unix中安装Perl
MySQL Perl支持也要求你安装了MySQL客户端编程支持(库和头文件)。大多数安装中安装了必要的文件。但是,如果你在Linux中从RPM文件安装MySQL,确保安装了开发者RPM。客户端程序在客户端RPM中,但是客户端编程支持在开发者RPM。

如果你想要安装Perl支持,需要的文件能从http://search.cpan.org的CPAN (Comprehensive Perl Archive Network)获得。

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

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

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

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

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

2.            shell> gunzip < DBI-VERSION.tar.gz | tar xvf -该命令创建目录 DBI-VERSION。

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

4.            shell> cd DBI-VERSION5.    构建分发版并编译:

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

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

如果你没有权限在系统目录下安装Perl模块,或如果你安装本地Perl模块,下列参考书可以帮助你:http://servers.digitaldaze.com/e ... odules.html#modules

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

2.13.2. 在Windows下安装ActiveState Perl
在Windows中,应当按照以下步骤安装带ActiveState Perl的MySQL DBD模块:

·         从http://www.activestate.com/Products/ActivePerl/获得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/aut ... ysql-1.2212.x86.ppd该进程应当在ActiveState Perl 5.6或更新版本中工作。

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

use DBI;$dbh= DBI->connect("DBI:ODBCdsn",$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.so的make的输出)。-L选项应指定libgcc.a在系统中的安装目录的路径名。

该问题的另一个原因是Perl和MySQL没有用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 = gccCCCDLFLAGS = -KPIC -W1,-Bexport       CCCDLFLAGS = -fpicCCDLFLAGS = -wl,-Bexport              CCDLFLAGS = LD = ld                               LD = gcc -G -fpicLDDLFLAGS = -G -L/usr/local/lib       LDDLFLAGS = -L/usr/local/libLDFLAGS = -belf -L/usr/local/lib      LDFLAGS = -L/usr/local/lib LD = ld                               LD = gcc -G -fpicOPTIMISE = -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这些更改是必需的,因为用icc或cc编译的Perl动态装载器不装载DBI模块。

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

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

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

LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:\    /usr/progressive/lib:/usr/skunk/libLIBPATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:\    /usr/progressive/lib:/usr/skunk/libMANPATH=scohelp:/usr/man:/usr/local1/man:/usr/local/man:\    /usr/skunk/man:首先,在DBD分发版的安装目录运行下述命令来创建一个包括静态连接的DBD模块的Perl:

shell> perl Makefile.PL -static -configshell> makeshell> make installshell> make perl然后必须安装新的Perl。make perl的输出表示安装时需要执行的make命令。在SCO中,为make -f Makefile.aperl inst_perl MAP_TARGET=perl。

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

shell> perl Makefile.PL -static -configshell> makeshell> make installshell> make perl最后,应当安装新的Perl。make perl的输出指示了使用的命令。

论坛徽章:
0
50 [报告]
发表于 2008-04-15 12:33 |只看该作者

第3章:教程

目录

3.1. 连接与断开服务器
3.2. 输入查询
3.3. 创建并使用数据库
3.3.1. 创建并选择数据库
3.3.2. 创建表
3.3.3. 将数据装入表中
3.3.4. 从表检索信息
3.4. 获得数据库和表的信息
3.5. 在批处理模式下使用mysql
3.6. 常用查询的例子
3.6.1. 列的最大值
3.6.2. 拥有某个列的最大值的行
3.6.3. 列的最大值:按组
3.6.4. 拥有某个字段的组间最大值的行
3.6.5. 使用用户变量
3.6.6. 使用外键
3.6.7. 根据两个键搜索
3.6.8. 根据天计算访问量
3.6.9. 使用AUTO_INCREMENT
3.7. 孪生项目的查询
3.7.1. 查找所有未分发的孪生项
3.7.2. 显示孪生对状态的表
3.8. 与Apache一起使用MySQL
本章通过演示如何使用mysql客户程序创造和使用一个简单的数据库,提供一个MySQL的入门教程。mysql(有时称为“终端监视器”或只是“监视”)是一个交互式程序,允许你连接一个MySQL服务器,运行查询并察看结果。mysql可以用于批模式:你预先把查询放在一个文件中,然后告诉mysql执行文件的内容。本章将介绍使用mysql的两个方法。

要想查看由mysql提供的选择项目表,可以用--help选项来调用:

shell> mysql --help
本章假定mysql已经被安装在你的机器上,并且有一个MySQL服务器可以连接。否则,请联络MySQL管理员。(如果你是管理员,则需要查阅本手册的其它章节,例如第5章:数据库管理。)

本章描述建立和使用一个数据库的全过程。如果你仅仅对访问一个已经存在的数据库感兴趣,可以跳过描述怎样创建数据库及它所包含的表的章节。

由于本章是一个教程,省略了许多细节。关于这里所涉及的主题的详细信息,请查阅本手册的相关章节。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP