这节描述使用MIT-pthreads时所涉及的一些问题。
在Linux上,应该不使用MIT-pthreads而是安装LinuxThreads!参见2.12.1节,“Linux注意事项”。
如果你的系统不提供原生的线程支持,将需要使用MIT-pthreads包构造MySQL。这包括大多数FreeBSD系统、SunOS 4.x、Solaris 2.4和更早版本及其它,参见2.1.1节,“MySQL支持的操作系统”。
MIT-pthreads不是MySQL 5.1源码分发版的一部分。如果你需要该安装包,需要单独从http://www.mysql.com/Downloads/Contrib/pthreads-1_60_beta6-mysql.tar.gz下载。
下载后,将源文件提取到MySQL源码目录的顶级目录。将创建新的mit-pthreads子目录。
- 在大多数系统上,你能通过使用configure并用--with-mit-threads选项来强迫运行MIT-pthreads:
- shell> ./configure -- with-mit-threads
当使用MIT-pthreads时,不支持在一个非源码目录构造,因为我们想要使我们对代码的改变减到最小。
· 决定是否使用MIT-pthreads的检查仅在处理服务器代码的配置过程期间发生。如果已经用--without-server配置了分发版并只构造客户端代码,客户端将不知道MIT-pthreads是否正在被使用并且是否使用 默认的Unix套接字连接。因为在某些平台上Unix套接字文件不能在MIT-pthreads下面工作,这意味着当你运行客户端程序时,你需要使用-h或--host。
· 当使用MIT-pthreads编译MySQL时,因为性能原因,系统锁定 默认为禁止使用。你可以用--external-locking选项告诉服务器使用系统锁定。只是在相同数据文件上运行两个MySQL服务器时采需要,因此不推荐。
- 有时pthreadbind()命令不能绑定一个套接字但没有任何错误消息(至少在Solaris上),结果是所有到服务器的连接均失败。例如:
- shell> mysqladmin version
- mysqladmin: connect to server at '' failed;
- error: 'Can't connect to mysql server on localhost (146)'
解决它的方法是杀死mysqld服务器并且重启它。这只有当我们强迫服务器停止并马上进行重启时在发生。
- 使用MIT-pthreads,不能用SIGINT(break)中断sleep()系统调用。这只有在运行mysqladmin --sleep时才能注意到。在中断起作用并且进程停止之前必须等待sleep()终止。
- 当链接时,你可能会收到这样的警告消息(至少在Solaris上);它们可以被忽视:
- ld: warning: symbol `_iob' has differing sizes:
- (file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4;
- file /usr/lib/libc.so value=0x140);
- /my/local/pthreads/lib/libpthread.a(findfp.o) definition taken
- ld: warning: symbol `__iob' has differing sizes:
- (file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4;
- file /usr/lib/libc.so value=0x140);
- /my/local/pthreads/lib/libpthread.a(findfp.o) definition taken
- 一些其它的警告也可被忽略:
- implicit declaration of function `int strtoll(...)'
- implicit declaration of function `int strtoul(...)'
- 我们还没有让readline在MIT-pthreads上工作。(这不需要,但是可能某些人会感兴趣。)