MySQL の Linux-Intel バイナリおよび RPM リリースは最高速度に設定されています。弊社では常に高速で安定したコンパイラの使用を心がけています。
バイナリのリリースは -static
とリンクしていますので、通常はどのバージョンのシステムライブラリを使用しているのか心配する必要はありません。Linux
Thread
をインストールする必要もありません。-static
とリンクしたプログラムは動的にリンクしたプログラムより少しだけ大きくなりますが、多少速く
(3-5%)
なっています。しかし、静的にリンクされたプログラムの
1 つの問題は、ユーザー定義関数 (UDF)
を使用できないことです。UDF
を書いたり使用する (C あるいは C++
プログラマーの場合のみ)
場合、動的リンクを使用してご自身で MySQL
をコンパイルする必要があります。
バイナリ配布の既知の問題は、libc
(Red Hat 4.x あるいは Slackware など) を使用した旧
Linux
システムでは、ホスト名の解決に幾つかの
(致命的ではない)
問題があることです。お客様のシステムが
glibc2
ではなく
libc
を使用している場合、多分ホスト名解決および
getpwnam()
で問題に遭遇します。これは
glibc
(不幸にも)
が、-static
でコンパイルするときでさえ、いくつかの外部のライブラリに依存してホスト名解決および
getpwent()
を実装しているからです。これらの問題は 2
つの方法で明らかです。
mysql_install_db を実行したときに以下のエラーメッセージが表示されます。
Sorry, the host 'xxxx
' could not be looked up
この問題は mysql_install_db
--force
を実行して処理します。それは
mysql_install_db の
resolveip
テストを実行しません。マイナス面は、権限テーブルでホスト名を使用できないことです。localhost
の場合を除いて、代わりに IP
番号を使用する必要があります。--force
をサポートしていない旧バージョンの MySQL
を使用している場合、テキストエディタを使用して
mysql_install_db の
resolveip
テストを手動で削除する必要があります。
mysqld を
--user
オプションで実行する際にも以下のエラーが表示される場合があります。
getpwnam: No such file or directory
この問題を回避するには、--user
オプションを指定しないで
mysqld を
su
コマンドで実行します。これによりシステムそのもので
mysqld
プロセスのユーザー ID を変更するため
mysqld
はそれをする必要がありません。
別の解決策、それは両方の問題を解決しますが、バイナリの配布を使用しません。MySQL
のソース配布 (RPM あるいは
tar.gz
フォーマットで)
を取得しそれをインストールします。
Linux 2.2 バージョンの中には、クライアントが
TCP/IP で mysqld
サーバーへ新たに相当数の接続をしたときに
Resource temporarily
unavailable
のエラーが表示される場合があります。この問題は
Linux には TCP/IP
ソケットを閉じる時間とシステムが実際のそれを開放する間に遅延があるためです。TCP/IP
のスロット数にはかぎりがあるため、クライアントが余りにも多くの
TCP/IP
接続を短時間に行うとリソース不足のエラーに遭遇します。たとえば、MySQL
test-connect
ベンチマークを TCP/IP
で実行するときにエラーが発生する場合があります。
弊社ではこの問題に関して Linux の別々のメーリングリストを使用して数回連絡を取っていますが現在までのところまだ解決策は見つかっておりません。唯一これまで分かっている 「fix」 はクライアントの接続を執拗に続けること、あるいはデータベースサーバーとクライアントが同じマシンで稼働している場合、TCP/IP 接続ではなく Unix のソケットファイル接続を使用することです。