Solaris では、MySQL
ディストリビューションをアンパックする前でも問題が発生することがあります。Solaris
tar
は長いファイル名を処理できないので、MySQL
をアンパックするときに以下のようなエラーが表示されることがあります。
x mysql-3.22.12-beta/bench/Results/ATIS-mysql_odbc-NT_4.0-cmp-db2,\ informix,ms-sql,mysql,oracle,solid,sybase, 0 bytes, 0 tape blocks tar: directory checksum error
この場合、GNU
tar
(gtar
)を使用して、ディストリビューションをアンパックする必要がありますSolaris
用のプリコンパイル済みコピーは、http://www.mysql.com/downloads/os-solaris.html
にあります。
Sun のネイティブスレッドは、Solaris 2.5 以降でのみ機能します。バージョン 2.4 以前の Solaris の場合は、MySQL は自動的に MIT-pthreads を使用します。 See 項2.3.6. 「MIT-pthreads に関する注意事項」。
configure 時に以下のエラーが出力される場合
checking for restartable system calls... configure: error can not run 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 を使用している場合は、"-mcpu=v8 -Wa,-xarch=v8plusa" を CFLAGS および CXXFLAGS に追加することでパフォーマンスを 4% 向上できます。
Sun の Forte 5.0
以降のコンパイラを使用している場合は、configure
を以下のように実行できます。
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
を追加します。注意:
これは、MySQL 4.0 以降のみで機能します。MySQL
3.23
にはこれをサポートするために必要な変更が含まれていません。
MySQL ベンチマークでは、UltraSPARC 上で 32
ビットモードで Forte 5.0
を使用した場合、-mcpu
フラグを指定して gcc 3.2
を使用した場合と比較して速度が 4%
向上しました。
64 ビットバイナリを作成した場合、32
ビットバイナリよりも速度が 4%
低下しますが、その代わりに
mysqld
はより多くのスレッドとメモリを処理できます。
fdatasync
または
sched_yield
で問題が発生した場合は、configure 行に
LIBS=-lrt
を追加することでその問題を修正できます。
以下の段落は、WorkShop 5.3 より前のバージョンのコンパイラにのみ関連するものです。
configure
スクリプトを編集して以下の行を変更する必要がある場合もあります。
#if !defined(__STDC__) || __STDC__ != 1
これを次のように変更します。
#if !defined(__STDC__)
-Xc
オプションを指定して
__STDC__
を有効にすると、Sun
のコンパイラは Solaris の pthread.h
ヘッダファイルでコンパイルできません。これは
Sun
のバグです(コンパイラまたはインクルードファイルが壊れています)。
mysqld
を実行したときに、以下のようなエラーメッセージが出力された場合は、マルチスレッドオプション(-mt
)を有効にしていない
Sun のコンパイラを使用して MySQL
をコンパイルしようとしています。
libc internal error: _rmutex_unlock: rmutex not held
CFLAGS
および CXXFLAGS
に -mt
を追加して、再実行してください。
SFW バージョンの gcc (Solaris 8
に付属している)を使用している場合は、configure
を実行する前に、LD_LIBRARY_PATH
環境変数に /opt/sfw/lib
を追加する必要があります。
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
のほとんどすべてのバイナリバージョンに古くて利用に適さないインクルードファイルが組み込まれており、それらによって、スレッドを使用するすべてのプログラム(そして、おそらくその他のプログラムも)が破壊されます。
Solaris
は、静的バージョンのシステムライブラリ(libpthreads
および
libdl
)は一切提供しません。したがって、--static
を指定して MySQL
をコンパイルすることはできません。このオプションを指定してコンパイルすると、以下のエラーが表示されます。
ld: fatal: library -ldl: not found または undefined reference to `dlopen' または cannot find -lrt
多すぎる数のプロセスが非常に迅速に
mysqld
に接続を試みると、MySQL
ログに以下のエラーが出力されます。
Error in accept: Protocol error
この問題を回避するために、--set-variable
back_log=50
オプションを指定してサーバを起動してみてください。
注意: --set-variable=name=value
構文および -O name=value
構文は、MySQL 4.0
以降廃止されました。代わりに、--back_log=50
を使用してください。 See
項4.1.1. 「mysqld
コマンドラインオプション」。
独自の MySQL クライアントをリンクしている場合、そのクライアントを実行したときに、以下のエラーが発生することがあります。
ld.so.1: ./my: fatal: libmysqlclient.so.#: open failed: No such file or directory
以下のいずれかの方法でこの問題を回避できます。
configure が -lz
でリンクする際に問題が発生し、zlib
をインストールしていない場合、以下の 2
つの選択肢があります。
圧縮された通信プロトコルを使用できるようにする場合は、ftp.gnu.org から zlib を入手してインストールする必要がある。
--with-named-z-libs=no
を指定してコンフィギャする。
gcc
を使用していて、ユーザ定義関数(UDF
)を
MySQL
にロードする際に問題が発生した場合は、その
UDF
をリンクする行に
-lgcc
を追加してみてください。
MySQL
を自動的に起動させる場合は、/etc/init.d
に support-files/mysql.server
をコピーして、/etc/rc3.d/S99mysql.server
という名前でそのディレクトリへのシンボリックリンクを作成します。
Solaris では setuid()
アプリケーションのコアファイルがサポートされていないので、--user
オプションを指定している場合、mysqld
からコアファイルを取得することはできません。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.