PKG ディストリビューションを使用した Solaris への MySQL のインストールに関する情報は、項2.6. 「Solaris に MySQL をインストールする」 を参照してください。
Solaris の tar が長いファイル名を扱えないので、Solaris を使用する際、MySQL のディストリビューションを解凍する前でさえ、問題に遭遇する場合があります。これは MySQL を解凍する時にエラーが表示されることを意味します。
この問題が発生したら、GNU tar (gtar) を使用してディストリビューションを解凍します。Solaris 用にコンパイルしたコピーは http://dev.mysql.com/downloads/os-solaris.html にあります。
Sun のネイティブ スレッドは Solaris 2.5 およびそれ以降でしが動作しません。Solaris 2.4 およびそれ以前には、MySQL 自動的に MIT-pthreads を使用します。項2.9.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/ にあります。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
バイナリを作成するには、-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
から取得できません。