這節描述使用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上工作。(這不需要,但是可能某些人會感興趣。)