En Solaris pueden experimentarse problemas aún antes de lograr descomprimir la distribución de MySQL, ya que tar no puede manejar nombres de fichero largos en Solaris. Esto significa que pueden verse errores cuando se intente expandir MySQL.
Si esto ocurre, habrá que emplear el GNU tar (gtar) para expandir la distribución. Se puede hallar una copia precompilada para Solaris en http://dev.mysql.com/downloads/os-solaris.html.
Los procesos nativos de Sun solamente funcionan en Solaris 2.5 y posteriores. Para la versión 2.4 y anteriores, MySQL utilizará MIT-pthreads automáticamente. Consulte Sección 2.8.5, “Notas sobre MIT-pthreads”.
Si se obtienen el siguiente error en configure, significa que algo falló en la instalación del compilador:
checking for restartable system calls... configure: error can not run test programs while cross compiling
En este caso se debería actualizar a una versión más reciente
del compilador. También podría resolverse este problema
insertando la siguiente línea en el fichero
config.cache
:
ac_cv_sys_restartable_syscalls=${ac_cv_sys_restartable_syscalls='no'}
Si se esta empleando Solaris en una SPARC, el compilador recomendado es gcc 2.95.2 o 3.2. Se lo puede descargar de http://gcc.gnu.org/. Hay que notar que egcs 1.1.1 y gcc 2.8.1 no funcionan confiablemente en SPARC.
La línea recomendada en configure al utilizar gcc 2.95.2 es:
CC=gcc CFLAGS="-O3" \ CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti" \ ./configure --prefix=/usr/local/mysql --with-low-memory \ --enable-assembler
Si se tiene un sistema UltraSPARC, se puede mejorar el
rendimiento en un 4% agregando -mcpu=v8
-Wa,-xarch=v8plusa
a las variables de entorno
CFLAGS
y CXXFLAGS
.
Si se tiene el compilador Forte 5.0 (o posterior) de Sun, se puede ejecutar configure de esta manera:
CC=cc CFLAGS="-Xa -fast -native -xstrconst -mt" \ CXX=CC CXXFLAGS="-noex -mt" \ ./configure --prefix=/usr/local/mysql --enable-assembler
Para crear un binario de 64 bits con el compilador Forte de Sun, deben utilizarse las siguientes opciones de configuración:
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
Para crear un binario de 64 bits para Solarios utilizando
gcc, debe agregarse -m64
a
CFLAGS
y CXXFLAGS
y quitar
--enable-assembler
de la linea de
configure.
En las pruebas de rendimiento MySQL, se obtuvo un incremento del
4% en la velocidad en una UltraSPARC cuando se utilizó Forte
5.0 en modo de 32 bits, comparado con gcc 3.2
con el flag -mcpu
.
Si se crea un binario mysqld de 64 bits, es un 4% más lento que el binario de 32 bits, pero puede manejar más subprocesos y memoria.
Al utilizar Solaris 10 para x86_64, cualquier sistema de
ficheros (filesystem) donde se deseen almacenar ficheros InnoDB
debería ser montado con la opción
forcedirectio
. (Por defecto, el montaje se
realiza sin esta opción) Si no se hace de este modo, el
rendimiento caerá significativamente al usar el motor de
almacenamiento InnoDB en dicha plataforma.
Si se tienen problemas con fdatasync
o
sched_yield
, se podrán solucionar agregando
LIBS=-lrt
en la línea de
configure.
Para compiladores anteriores a WorkShop 5.3, se podría tener que editar el script configure, cambiando esta línea:
#if !defined(__STDC__) || __STDC__ != 1
Poniendo esta en su lugar:
#if !defined(__STDC__)
Si se inicia __STDC__
con la opción
-Xc
, el compilador de Sun no podrá compilar
con el fichero de cabecera pthread.h
de
Solaris. Esto es un error de Sun (en el compilador o en el
fichero).
Si mysqld emite el siguiente mensaje de error
cuando se lo ejecuta, es porque se lo ha compilado con el
compilador de Sun sin habilitar la opción de multihilo
-mt
:
libc internal error: _rmutex_unlock: rmutex not held
Agregar -mt
a CFLAGS
y
CXXFLAGS
y recompilar.
Si se está utilizando la versión SFW de gcc
(que viene con Solaris 8), se debe agregar
/opt/sfw/lib
a la variable de entorno
LD_LIBRARY_PATH
antes de ejecutar
configure.
Si se está empleando el gcc disponible en
sunfreeware.com
, pueden tenerse muchos
problemas. Para evitarlo, se debería recompilar
gcc y GNU binutils
en el
ordenador donde se los ejecutará.
Si se obtiene el siguiente mensaje de error al compilar MySQL con gcc, significa que gcc no está configurado para la versión en uso de 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'
Lo más apropiado para hacer en este caso es conseguir la versión más nueva de gcc y compilarlo con el gcc que se tiene. Al menos en Solaris 2.5, casi todas las versiones binarias de gcc tienen ficheros de cabecera antiguos e inutilizables que hacen caer a todos los programas que usan subprocesos y posiblemente también a otros programas.
Solaris no provee versiones estáticas de todas las bibliotecas
del sistema (libpthreads
y
libdl
), de modo que no se puede compilar
MySQL con --static
. Si se intenta hacer tal
cosa, se obtendrá uno de los siguientes errores:
ld: fatal: library -ldl: not found undefined reference to `dlopen' cannot find -lrt
Si se enlaza con los programas cliente MySQL del usuario, se puede ver el siguiente error en tiempo de ejecución:
ld.so.1: fatal: libmysqlclient.so.#: open failed: No such file or directory
Este problema puede evitarse por medio de alguno de estos métodos:
Si ocurren problemas con configure al
intentar enlazar con -lz
cuando no se tiene
instalado zlib
, hay dos opciones:
Si se desea tener la capacidad de usar el protocolo de
comunicación comprimido, se deberá conseguir
zlib
desde ftp.gnu.org
e instalarlo.
Ejecutar configure con la opción
--with-named-z-libs=no
cuando se compile
MySQL.
Si se está utilizando gcc y se tienen
problemas con la carga de funciones definidas por el usuario
(UDFs) en MySQL, hay que intentar agregar
-lgcc
a la línea donde se enlaza la UDF.
Si se desea que MySQL inicie automáticamente, se debe copiar
support-files/mysql.server
a
/etc/init.d
y crear un vínculo simbólico
hacia él, llamado
/etc/rc3.d/S99mysql.server
.
Si demasiados procesos intentan conectarse muy rápidamente a mysqld, se verá este error en el log de MySQL:
Error in accept: Protocol error
Se puede intentar iniciar el servidor con la opción
--back_log=50
como una forma de solución.
(Utilizar -O back_log=50
en versiones
anteriores a MySQL 4).
Solaris no soporta ficheros de núcleo para aplicaciones
setuid()
, de forma que no se logrará un
fichero de núcleo a partir de mysqld si se
está empleando la opción --user
.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.