この項では MIT-pthreads を使用した幾つかの問題について説明します。
Linux には、MIT-pthreads は使用できません。その代わり実装した LinuxThreads を使用します。項2.13.1. 「Linux の注釈」 を参照してください。
システムがネイティブのスレッドをサポートしていない場合、MIT-pthreads パッケージを使用して MySQL を構築する必要があります。これには旧 FreeBSD システム、SunOS 4.x、Solaris 2.4 およびそれ以前、並びにその他幾つかが含まれます。項2.1.1. 「MySQL Community Server がサポートしているオペレーティングシステム」 を参照してください。
MIT-pthreads は MySQL 5.1 のソース配布には含まれていません。このパッケージが必要な場合は、http://dev.mysql.com/Downloads/Contrib/pthreads-1_60_beta6-mysql.tar.gz から別途ダウンロードする必要があります。
ダウンロードしたら、このソースアーカイブを
MySQL
ソースディレクトリの最上段に抽出します。抽出すると
mit-pthreads
のサブディレクトリが作成されます。
ほとんどのシステムで、MIT-pthreads を
configure を
--with-mit-threads
オプションで実行すると使用できます。
shell> ./configure --with-mit-threads
このコードへの変更を最小限に抑えるために、MIT-pthreads を使用したソース以外のディレクトリでのビルドはサポートしていません。
MIT-pthreads
の使用を決定する確認はサーバーのコードを処理する設定プロセスの実行中にのみ行われます。--without-server
を使用してクライアントコードのみのビルドに配布を設定した場合、クライアントは
MIT-pthreads
を使用するどうかを判断できないため、デフォルトで
Unix
ソケット接続を使用します。なぜなら、Unix
ソケットはプラットフォームによっては
MIT-pthreads
では動作しないため、クライアントのプログラムを実行する際、-h
あるいは --host
を
localhost
以外の値で使用する必要があります。
MySQL を MIT-pthreads
でコンパイルした場合、システムロックはパフォーマンス上の理由でデフォルトで無効になります。システムロックを
--external-locking
オプションで使用するようにサーバーに指定できます。2
台の MySQL
サーバーを同じデータファイルに稼働する場合にのみこれは必要ですが、いずれにしろこのやり方は推奨していません。
スレッド bind()
コマンドがエラーメッセージ (少なくとも
Solaris では)
なしでソケットとのバインドに失敗する場合があります。その結果サーバーへのすべての接続が失敗に終わります。例
:
shell> mysqladmin version
mysqladmin: connect to server at '' failed;
error: 'Can't connect to mysql server on localhost (146)'
この問題を解決するには mysqld サーバーを停止してそれを再起動します。これはサーバーを強制的に停止して直ぐに再起動した場合にのみ起こります。
MIT-pthreads
の使用により、sleep()
のシステムコールの
SIGINT
(ブレーク)
での割り込みはありません。これは
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(...)'
MIT-pthread と連動する
readline
はまだありません。(これは必要ありませんが、興味あるユーザーがいるかも知れません。