On Solaris, you may run into trouble even before you get the
MySQL distribution unpacked, as the Solaris
tar cannot handle long filenames. This means
that you may see errors when you try to unpack MySQL.
If this occurs, you must use GNU tar
(gtar) to unpack the distribution. You can
find a precompiled copy for Solaris at
https://dev.mysql.com/downloads/os-solaris.html.
Sun native threads work only on Solaris 2.5 and higher. For
Solaris 2.4 and earlier, MySQL automatically uses MIT-pthreads.
See Section 2.8.5, “MIT-pthreads Notes”.
If you get the following error from
configure, it means that you have something
wrong with your compiler installation:
checking for restartable system calls... configure: error can not
run test programs while cross compiling
In this case, you should upgrade your compiler to a newer
version. You may also be able to solve this problem by inserting
the following row into the config.cache
file:
ac_cv_sys_restartable_syscalls=${ac_cv_sys_restartable_syscalls='no'}
If you are using Solaris on a SPARC, the recommended compiler is
gcc 2.95.2 or 3.2. You can find this at
https://gcc.gnu.org/. Note that
egcs 1.1.1 and gcc 2.8.1
do not work reliably on SPARC.
The recommended configure line when using
gcc 2.95.2 is:
CC=gcc CFLAGS="-O3" \
CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti" \
./configure --prefix=/usr/local/mysql --with-low-memory \
--enable-assembler
If you have an UltraSPARC system, you can get 4% better
performance by adding -mcpu=v8
-Wa,-xarch=v8plusa
to the CFLAGS
and
CXXFLAGS
environment variables.
If you have Sun's Forte 5.0 (or newer) compiler, you can run
configure like this:
CC=cc CFLAGS="-Xa -fast -native -xstrconst -mt" \
CXX=CC CXXFLAGS="-noex -mt" \
./configure --prefix=/usr/local/mysql --enable-assembler
To create a 64-bit binary with Sun's Forte compiler, use the
following configuration options:
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
To create a 64-bit Solaris binary using gcc,
add -m64
to CFLAGS
and
CXXFLAGS
and remove
--enable-assembler
from the
configure line.
In the MySQL benchmarks, we obtained a 4% speed increase on
UltraSPARC when using Forte 5.0 in 32-bit mode, as compared to
using gcc 3.2 with the -mcpu
flag.
If you create a 64-bit mysqld binary, it is
4% slower than the 32-bit binary, but can handle more threads
and memory.
When using Solaris 10 for x86_64, you should mount any
filesystems on which you intend to store
InnoDB
files with the
forcedirectio
option. (By default mounting is
done without this option.) Failing to do so will cause a
significant drop in performance when using the
InnoDB
storage engine on this platform.
If you get a problem with fdatasync
or
sched_yield
, you can fix this by adding
LIBS=-lrt
to the configure
line
For compilers older than WorkShop 5.3, you might have to edit
the configure script. Change this line:
#if !defined(__STDC__) || __STDC__ != 1
To this:
#if !defined(__STDC__)
If you turn on __STDC__
with the
-Xc
option, the Sun compiler can't compile with
the Solaris pthread.h
header file. This is
a Sun bug (broken compiler or broken include file).
If mysqld issues the following error message
when you run it, you have tried to compile MySQL with the Sun
compiler without enabling the -mt
multi-thread
option:
libc internal error: _rmutex_unlock: rmutex not held
Add -mt
to CFLAGS
and
CXXFLAGS
and recompile.
If you are using the SFW version of gcc
(which comes with Solaris 8), you must add
/opt/sfw/lib
to the environment variable
LD_LIBRARY_PATH
before running
configure.
If you are using the gcc available from
sunfreeware.com
, you may have many problems.
To avoid this, you should recompile gcc and
GNU binutils
on the machine where you are
running them.
If you get the following error when compiling MySQL with
gcc, it means that your
gcc is not configured for your version of
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'
The proper thing to do in this case is to get the newest version
of gcc and compile it with your current
gcc compiler. At least for Solaris 2.5,
almost all binary versions of gcc have old,
unusable include files that break all programs that use threads,
and possibly other programs as well.
Solaris does not provide static versions of all system libraries
(libpthreads
and libdl
),
so you cannot compile MySQL with --static
. If
you try to do so, you get one of the following errors:
ld: fatal: library -ldl: not found
undefined reference to `dlopen'
cannot find -lrt
If you link your own MySQL client programs, you may see the
following error at runtime:
ld.so.1: fatal: libmysqlclient.so.#:
open failed: No such file or directory
This problem can be avoided by one of the following methods:
Link clients with the
-Wl,r/full/path/to/libmysqlclient.so
flag
rather than with -Lpath
).
Copy libmysqclient.so
to
/usr/lib
.
Add the pathname of the directory where
libmysqlclient.so
is located to the
LD_RUN_PATH
environment variable before
running your client.
If you have problems with configure trying to
link with -lz
when you don't have
zlib
installed, you have two options:
If you want to be able to use the compressed communication
protocol, you need to get and install
zlib
from ftp.gnu.org
.
Run configure with the
--with-named-z-libs=no
option when building
MySQL.
If you are using gcc and have problems with
loading user-defined functions (UDFs) into MySQL, try adding
-lgcc
to the link line for the UDF.
If you would like MySQL to start automatically, you can copy
support-files/mysql.server
to
/etc/init.d
and create a symbolic link to
it named /etc/rc3.d/S99mysql.server
.
If too many processes try to connect very rapidly to
mysqld, you should see this error in the
MySQL log:
Error in accept: Protocol error
You might try starting the server with the
--back_log=50
option as a workaround for this.
(Use -O back_log=50
before MySQL 4.)
Solaris doesn't support core files for
setuid()
applications, so you can't get a
core file from mysqld if you are using the
--user
option.