PKG 配布を使用した Solaris への MySQL のインストールに関する情報は、項2.6. 「Solaris に MySQL をインストールする」 を参照してください。
Solaris の tar が長いファイル名を扱えないので、Solaris を使用する際、MySQL 配布を解凍する前でさえ、問題に遭遇する場合があります。これは MySQL を解凍するときにエラーが表示されることを意味します。
この問題が発生したら、GNU tar (gtar) を使用して配布を解凍します。
Sun のネイティブスレッドは Solaris 2.5 およびそれ以降でしが動作しません。Solaris 2.4 およびそれ以前には、MySQL 自動的に MIT-pthreads を使用します。項2.10.5. 「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/ で入手できます。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
バイナリを作成するには、-m64
を
CFLAGS
および
CXXFLAGS
に追加して
--enable-assembler
を
configure
行から削除します。
MySQL ベンチマークでは、Forte 5.0 を 32
ビットモードで使用すると、gcc
3.2 を -mcpu
フラグで使用した場合に比べて UltraSPARC
上で速度が 4% 速くなります。
64-bit mysqld バイナリは、32 ビットバイナリより速度は 4% 遅くなりますが、さらに多くのスレッドおよびメモリーを処理できます。
Solaris 10 を x86_64
で使用する場合、InnoDB
ファイルを forcedirectio
オプションで保持するファイルシステムをマウントするようにしてください。(デフォルトではこのオプションは実装されていません)。それを実装しないと
InnoDB
ストレージエンジンをこのプラットフォームで使用した場合性能が大幅に劣化します。
fdatasync
あるいは
sched_yield
で問題があった場合、LIBS=-lrt
を configure
行に追加すると修正できます。
WorkShop 5.3 以前のコンパイラの場合、configure スクリプトを編集する必要があります。この行を:
#if !defined(__STDC__) || __STDC__ != 1
以下のように変更します。
#if !defined(__STDC__)
__STDC__
を
-Xc
オプションで起動すると、Sun
のコンパイラは Solaris
pthread.h
ヘッダーファイルではコンパイルできません。これじゃ
Sun のバグです
(破損したコンパイラあるいは破損した include
ファイル)。
mysqld
を実行したときに以下のエラーメッセージが表示された場合、-mt
マルチスレッドオプションを有効にしないで
MySQL を Sun
のコンパイラでコンパイルしてみます。
libc internal error: _rmutex_unlock: rmutex not held
-mt
を
CFLAGS
および
CXXFLAGS
追加して再コンパイルします。
gcc の SFW バージョン
(Solaris 8 に同梱)
を使用する場合、/opt/sfw/lib
を環境変数
LD_LIBRARY_PATH
に
configure を実行数 r
前に追加します。
gcc を
sunfreeware.com
から入手して使用する場合、多くの問題が発生する場合があります。これを避けるには、gcc
および GNU binutils
をそれらを動作しているマシンでコンパイルする必要があります。
MySQL を gcc でコンパイル中に以下のエラーが表示された場合、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 のほとんどすべてのバイナリバージョンは古くて、使用できない include ファイルを使用しており、スレッドを使用するすべてのプログラムを破損し、同様にほかのプログラムも破損させる可能性があります。
Solaris
ではどのシステムライブラリも静的バージョン
(libpthreads
および
libdl
)
を提供していませんので、MySQL を
--static
でコンパイルすることはできません。コンパイルしようとすると、以下のエラーが表示されます。
ld: fatal: library -ldl: not found undefined reference to `dlopen' cannot find -lrt
お客様ご自身の MySQL クライアントプログラムをリンクさせる場合、ランタイムで以下のエラーが表示される場合があります。
ld.so.1: fatal: libmysqlclient.so.#: open failed: No such file or directory
この問題は以下のメソッドのいずれかで回避できます。
zlib
をインストールせずに -lz
にリンクする際
configure
に問題がある場合、2
つのオプションがあります。
圧縮通信プロトコルを使用するには、zlib
を ftp.gnu.org
から取得してインストールします。
MySQL をビルドするには
configure を
--with-named-z-libs=no
オプションで実行します。
gcc
を使用してユーザー定義関数 (UDFs) の MySQL
へのロードで問題がある場合、-lgcc
を UDF のリンク行に追加してみます。
MySQL
自動的に起動するには、support-files/mysql.server
を /etc/init.d
にコピーして、シンボリックリンクを
/etc/rc3.d/S99mysql.server
の名前のそれに作成します。
あまりにも多くのプロセスが急激に mysqld に接続を試みた場合、MySQL ログに以下のエラーが記録されます。
Error in accept: Protocol error
この問題の回避策としてサーバーを
--back_log=50
オプションで起動してみます。(MySQL 4 の前に
-O back_log=50
を使用します)。
Solaris は setuid()
アプリケーションのコアファイルをサポートしていないので、--user
オプションを使用している場合、コアファイルを
mysqld
から取得できません。