Esta sección se ocupa de problemas que han ocurrido bajo Linux. Las primeras subsecciones describen dificultades relacionadas con el sistema operativo en general, problemas que pueden ocurrir al emplear distribuciones binarias o de código fuente, y problemas posteriores a la instalación. Las restantes subsecciones se ocupan de problemas que se dan en plataformas Linux específicas.
Nótese que la mayoría de estos problemas ocurren en versiones antiguas de Linux. Si se está ejecutando una versión reciente, es probable que no se vea ninguno de ellos.
MySQL requiere por lo menos Linux Versión 2.0.
Advertencia: Se detectaron algunos problemas extraños con Linux 2.2.14 y MySQL sobre sistemas SMP (multiprocesamiento simétrico). También se tiene información de algunos usuarios que encontraron serios problemas de estabilidad al ejecutar MySQL con el kernel 2.2.14. Si se está empleando este kernel, se debería actualizar a la versión 2.2.19 (o posterior) o 2.4. Si se cuenta con un ordenador con múltiples CPUs, habría que considerar seriamente el uso del kernel 2.4, ya que representa un notable incremento de velocidad. También es más estable.
Al emplear LinuxThreads, se debería ver un mínimo de tres procesos mysqld en ejecución. De hecho, son hebras (threads). Uno corresponde al gestor de LinuxThreads, otro es para manejar conexiones, y uno más para manejar advertencias y señales.
El binario para Linux-Intel y los releases RPM de MySQL están configurados para funcionar a la mayor velocidad posible. Quienes desarrollan MySQL siempre tratan de emplear el compilador estable más rápido disponible.
El release binario se enlaza con -static
,
lo cual significa que normalmente no habrá que preocuparse
por la versión de las bibliotecas del sistema que se tenga.
Un programa enlazado con -static
es
ligeramente más rápido (3-5%). Sin embargo, un problema con
los programas enlazados estáticamente es que no se pueden
emplear funciones definidas por el usuario (FDU o UDF, por sus
siglas en inglés). Si se van a escribir o emplear FDUs (esto
es sólo para programadores de C o C++), habría que
recompilar MySQL empleando enlazado dinámico.
Un problema con las distribuciones binarias es que en sistemas
Linux antiguos que utilizan libc
(tal como
Red Hat 4.x o Slackware), se tendrán algunos problemas (no
fatales) con la resolución del nombre de host. Si el sistema
emplea libc
en lugar de
glibc2
, probablemente se encontrarán
algunas dificultades con la resolución de nombres de host y
getpwnam()
. Esto ocurre porque
glibc
(desafortunadamente) depende de
algunas bibliotecas externas para implementar la resolución
de nombres de host y getpwent()
, incluso
cuando se compila con -static
. Estos
problemas se manifiestan de dos maneras:
-
Ver el siguiente mensaje de error al ejecutar mysql_install_db:
Sorry, the host '
xxxx
' could not be looked upEsto puede solventarse mediante la ejecución de mysql_install_db --force, lo cual evita que se ejecute la prueba de resolveip en mysql_install_db. La contraparte de esto es que no se pueden utilizar nombres de host en las tablas de permisos: excepto
localhost
, se deben usar números d eIP en su lugar. Si se está utilizando una versión de MySQL que no soporta la opción--force
, se debe quitar manualmente la pruebaresolveip
demysql_install
empleando un editor de textos. -
También se puede hallar el siguiente error cuando se ejecuta mysqld con la opción
--user
:getpwnam: No such file or directory
Para resolver esto, iniciar mysqld mediante el comando
su
en lugar de especificar la opción--user
. Esto provoca que el sistema cambie el ID de usuario del proceso mysqld, así no debe hacerlo mysqld.
Otra solución, que resuelve ambos problemas, es no usar una
distribución binaria. En su lugar se debe obtener una
distribución de código fuente de MySQL (en formatos RPM o
tar.gz
).
En algunas versiones 2.2 de Linux puede producirse el error
Resource temporarily unavailable
cuando los
clientes establezcan un número elevado de nuevas conexiones
TCP/IP al servidor mysqld. La razón es que
Linux tiene un retraso entre el momento en que se cierra un
socket TCP/IP y el momento en que el sistema lo libera
realmente. Sólo hay capacidad para una cantidad limitada de
conexiones, por eso se produce el error de recursos no
disponibles (resource-unavailable) si los clientes intentan
realizar demasiadas conexiones TCP/IP en un período corto de
tiempo. Por ejemplo, este error puede verse cuando se ejecuta
la prueba de rendimiento test-connect
sobre TCP/IP.
Se ha indagado sobre este problema en diferentes listas de correo de Linux pero nunca se ha obtenido una solución convincente. El único “fix” conocido es para clientes que emplean conexiones persistentes, o, si se están ejecutando el servidor y los clientes en el mismo ordenador, emplear conexiones a través de ficheros socket de Unix en lugar de conexiones TCP/IP.
Las siguientes notas relativas a glibc
son
aplicables únicamente en el caso que se desee compilar el
código de MySQL. Si se está ejecutando Linux en un ordenador
x86, en la mayoría de los casos será mucho mejor utilizar el
binario. Quienes hacen MySQL enlazan los binarios utilizando
la mejor y más actual versión de glibc
que tienen disponible y con las opciones de compilación más
apropiadas a fin de hacerlo apto para un servidor de uso
intensivo o high-load. Para un usuario típico, o incluso en
configuraciones con muchas conexiones concurrentes o tablas
excediendo el límite de 2Gb, el binario provisto por MySQL AB
es en la mayoría de los casos la mejor elección. Luego de
leer el siguiente texto, si aún persiste la duda, hay que
probar el binario para determinar si cubre las necesidades del
usuario. Si no es suficiente, entonces puede intentarse una
compilación propia. En tal caso MySQL AB apreciará que se le
comuniquen los detalles para crear mejores binarios en el
futuro.
MySQL emplea LinuxThreads en Linux. Si se utiliza una versión
antigua de Linux que no tiene glibc2
, se
deberá instalar LinuxThreads antes de compilar MySQL.
LinuxThreads puede descargarse de
http://dev.mysql.com/downloads/os-linux.html.
Notar que las versiones de glibc
hasta la
2.1.1 inclusive tienen un error fatal en el manejo de
pthread_mutex_timedwait()
, el cual es
utilizado al emitir sentencias INSERT
DELAYED
. Se recomienda que no se use INSERT
DELAYED
sin antes haber actualizado
glibc
.
El kernel de Linux y la biblioteca LinuxThreads pueden manejar por defecto un máximo de 1024 subprocesos. Si se planea gestionar más de 1000 conexiones simultáneas, se necesitarán algunos cambios en LinuxThreads:
-
Incrementar
PTHREAD_THREADS_MAX
en el ficherosysdeps/unix/sysv/linux/bits/local_lim.h
a un valor de 4096 y reducirSTACK_SIZE
en el ficherolinuxthreads/internals.h
a un valor de 256KB. Las rutas son relativas a la raíz deglibc
. (Tener en cuenta que MySQL no es estable con 600 a 1000 conexiones siSTACK_SIZE
se deja en el valor por defecto de 2MB). -
Recompilar LinuxThreads para producir una nueva biblioteca
libpthread.a
, y volver a enlazarla con MySQL.
Hay otro problema que afecta enormemente el rendimiento de
MySQL, especialmente en sistemas SMP (multiprocesamiento
simétrico, por sus siglas en inglés). La implementación de
mutex en LinuxThreads en glibc
2.1 es muy
pobre para programas con muchos subprocesos que mantengan el
mutex sólo por un corto tiempo. Esto produce un resultado
paradójico: si se enlaza MySQL con LinuxThreads sin
modificar, el quitar procesadores de un sistema SMP realmente
mejora el rendimiento de MySQL en muchos casos. MySQL AB ha
creado un parche disponible para glibc
2.1.3 para corregir este comportamiento
(http://www.mysql.com/Downloads/Linux/linuxthreads-2.1-patch).
Con glibc
2.2.2, MySQL utiliza el mutex
adaptable, lo cual es mucho mejor inclusive que
glibc
2.1.3 con parche y todo. Hay que
estar al tanto, sin embargo, de que bajo ciertas condiciones,
el código de exclusión mutua (mutex) actual emplea con
demasiada frecuencia los spinlocks (bucles de programa que
ciclan constantemente esperando por una condición), lo cual
repercute en las prestaciones de MySQL. La probabilidad de que
esto ocurra se puede reducir dando al proceso
mysqld la máxima prioridad. MySQL AB
también ha logrado corregir el comportamiento relativo a los
spinlocks con un parche, que puede descargarse desde
http://www.mysql.com/Downloads/Linux/linuxthreads-2.2.2.patch.
Este combina la corrección del uso excesivo de spinlocks,
máximo número de procesos, y la capacidad de la pila, todo
en uno. Se lo deberá aplicar en el directorio
linuxthreads
con patch -p0
</tmp/linuxthreads-2.2.2.patch
. Es de esperar que
sea incluido de alguna forma en futuras versiones de
glibc
2.2. De cualquier modo, si enlaza con
glibc
2.2.2, aún será necesario corregir
STACK_SIZE
y
PTHREAD_THREADS_MAX
. Es de esperar que los
valores por defecto de éstos sean llevados en el futuro a un
número más aceptable para configuraciones MySQL de altas
prestaciones, de modo que los comandos necesarios para
recompilarlo se reduzcan a ./configure; make; make
install.
Se recomienda que se usen estos parches para producir una
versión estática, especial, de
libpthread.a
y emplearla solamente para
enlazado dinámico con MySQL. Se sabe que los mencionados
parches son seguros para MySQL y mejoran significativamente su
rendimiento, pero no se puede decir nada acerca de sus efectos
sobre otras aplicaciones. Enlazar otras aplicaciones que
requieran LinuxThreads con la versión estática parcheada o
hacer una versión mixta e instalarla en el sistema, es por
cuenta del usuario y a su riesgo.
Si se experimenta cualquier problema extraño durante la instalación de MySQL, o algunas utilidades comunes se congelan, es muy probable que esté relacionado con las bibliotecas o el compilador. Si este es el caso, utilizar el binario de MySQL AB resolverá el problema.
Si el usuario compila sus propios programas cliente, es posible que vea los siguientes errores en tiempo de ejecución:
ld.so.1: fatal: libmysqlclient.so.#: open failed: No such file or directory
Este problema puede evitarse de alguna de estas maneras:
Si se emplea el compilador Fujitsu
(fcc/FCC
), se puede tener algún problema
al compilar MySQL porque los ficheros de cabecera de Linux
están muy orientados a gcc. La siguiente
línea de configure debería funcionar con
fcc/FCC:
CC=fcc CFLAGS="-O -K fast -K lib -K omitfp -Kpreex -D_GNU_SOURCE \ -DCONST=const -DNO_STRTOLL_PROTO" \ CXX=FCC CXXFLAGS="-O -K fast -K lib \ -K omitfp -K preex --no_exceptions --no_rtti -D_GNU_SOURCE \ -DCONST=const -Dalloca=__builtin_alloca -DNO_STRTOLL_PROTO \ '-D_EXTERN_INLINE=static __inline'" \ ./configure \ --prefix=/usr/local/mysql --enable-assembler \ --with-mysqld-ldflags=-all-static --disable-shared \ --with-low-memory
mysql.server es un fichero que puede
hallarse en el directorio support-files
bajo el directorio de instalación de MySQL o en un árbol de
código fuente MySQL. Se instala como
/etc/init.d/mysql
para conseguir que
MySQL inicie y se detenga automáticamente. Consulte
Sección 2.9.2.2, “Arrancar y parar MySQL automáticamente”.
Si MySQL no puede abrir suficiente ficheros o conexiones, es posible que Linux no se haya configurado para gestionar suficientes ficheros.
En Linux 2.2 y posteriores, se puede verificar la cantidad de manejadores de ficheros asignados de esta forma:
shell> cat /proc/sys/fs/file-max shell> cat /proc/sys/fs/dquot-max shell> cat /proc/sys/fs/super-max
Si se poseen más de 16 MB de ram, se debería agregar a los scripts de inicio algo como lo siguiente (por ejemplo, mysql.server en SuSE Linux):
echo 65536 > /proc/sys/fs/file-max echo 8192 > /proc/sys/fs/dquot-max echo 1024 > /proc/sys/fs/super-max
Los comandos echo
también pueden
ejecutarse como root
,desde la línea de
comandos, pero los valores establecidos se perderán la
próxima vez que se reinicie el ordenador.
De manera alternativa, estos parámetros pueden configurarse
al inicio usando la herramienta sysctl
, la
cual es usada por muchas distribuciones de Linux (incluyendo
SuSE Linux 8.0 y posteriores). Colocar los siguientes valores
en un fichero llamado /etc/sysctl.conf
:
# Incrementa algunos valores para MySQL fs.file-max = 65536 fs.dquot-max = 8192 fs.super-max = 1024
También se debería agregar lo siguiente a
/etc/my.cnf
:
[mysqld_safe] open-files-limit=8192
Esto elevará a 8192 el límite del servidor para el número total de conexiones y ficheros abiertos.
La constante STACK_SIZE
de Linuxthreads
controla el espacio de la pila de subprocesos en el espacio de
direcciones. Necesita ser lo suficientemente grande como para
brindar bastante lugar para cada pila individual de
subprocesos, pero lo suficientemente pequeña para mantener la
pila de algunos subprocesos ejecutándose fuera de los datos
globales de mysqld. Desafortunadamente, la
experiencia demostró que la implementación Linux de
mmap()
desasigna una región previamente
asignada (mapped), si se solicita asignar (map) una dirección
actualmente en uso, poniendo a cero los datos de toda la
página en lugar de retornar un error. De modo que la
seguridad de mysqld o cualquier otra
aplicación hebrada depende de la "caballerosidad" del código
que crea los subprocesos. El usuario debe tomar medidas para
cerciorarse que el número de procesos en ejecución en
cualquier momento dado es lo suficientemente bajo como para
que las pilas de procesos se mantengan lejos del montón
(heap) global. Con mysqld esto debería
hacerse, estableciendo un valor razonable para la variable
max_connections
.
Si el usuario compila por sí mismo a MySQL, puede aplicar un
parche a LinuxThreads para un mejor uso de la pila. Consulte
Sección 2.12.1.3, “Notas sobre la distribución de código fuente para Linux”. Si no se desea aplicar
un parche a LinuxThreads, se deberá establecer
max_connections
a un valor no mayor de 500,
o incluso menos si se tienen un gran buffer de claves, grandes
tablas de montón (heap tables) o alguna otra cosa que obligue
a mysqld a reservar gran cantidad de
memoria,o si se está ejecutando un kernel 2.2 con un parche
de 2Gb. Si se está empleando la versión binaria en RPM, se
puede establecer en forma segura
max_connections
a un valor de 1500,
asumiendo que no hay grandes buffers de claves, o grandes
tablas de montón (heap tables) con muchos datos. Mientras
más se reduzca STACK_SIZE
en LinuxThreads,
más subprocesos podrán crearse sin problemas. Se recomiendan
valores ente 128KB y 256KB.
Si se utilizan muchas conexiones simultáneas, puede sufrirse una “característica” del kernel 2.2, que intenta prevenir ataques de bomba de bifurcación (fork bomb) penalizando los procesos que bifurcan o clonan un proceso hijo. Esto provoca que MySQL no escale bien a medida que se incrementa el número de clientes simultáneos. En sistemas con una única CPU, esto se manifiesta a través de lentitud en la creación de procesos; puede llevar largo tiempo conectarse a MySQL (hasta un minuto) y puede llevar lo mismo para detenerlo. En sistemas con múltiples CPUs, se observó una caída gradual en la velocidad de las consultas a medida que aumenta el número de clientes. En la búsqueda de una solución, se recibió un parche para el kernel de parte de un usuario que lo necesitó para su sitio web. Este parche puede descargarse de http://www.mysql.com/Downloads/Patches/linux-fork.patch. MySQL AB probó ampliamente este parche tanto en sistemas en desarrollo como en producción. Funcionó incrementando notablemente el rendimiento de MySQL sin causas problemas, por lo tanto se lo recomienda a los usuario que aún ejecuten servidores de altas prestaciones en kernels 2.2.
Este problema se resolvió en el kernel 2.4, de modo que si no se está satisfecho con el rendimiento actual del sistema, en lugar de aplicar un parche al kernel 2.2, podría ser más sencillo actualizarlo a 2.4. En sistemas SMP (multiprocesamiento simétrico), la actualización también favorecerá el desempeño de SMP además de corregir el error.
Al probar MySQL con un kernel 2.4 en un ordenador de dos procesadores, se halló que MySQL escala mucho mejor. Hasta 1,000 clientes prácticamente no se producen retrasos en el rendimiento de las consultas, y el factor de escalado de MySQL (calculado como el máximo rendimiento respecto al rendimiento de un cliente) fue 180%. Se observaron resultados similares en un ordenador de cuatro procesadores: hasta 1,000 clientes prácticamente no se producen retrasos en el rendimiento de las consultas, y el factor de escalado de MySQL fue de 300%. Al basarse en estos resultados, definitivamente se recomienda que los servidores de alta prestación ejecutando un kernel 2.2 se actualicen a 2.4.
A fin de obtener el máximo rendimiento, es esencial ejecutar
el proceso mysqld con la prioridad más
alta posible en kernel 2.4. Esto puede lograrse agregando un
comando renice -20 $$
a
mysqld_safe. En las pruebas sobre un
ordenador de 4 procesadores, el aumento de la prioridad
produjo un 60% de incremento en el rendimiento con 400
clientes.
En la actualidad, MySQL AB se halla recolectando información
sobre el desempeño de MySQL sobre un kernel 2.4 en sistemas
de cuatro y ocho procesadores. Si se tiene acceso a tales
sistemas, y se han hecho algunas pruebas de rendimiento, por
favor envíese un mensaje de correo electrónico a
<[email protected]>
con los resultados. Estos
serán revisados para su inclusión en este manual.
Si con ps se advierte un proceso mysqld muerto, generalmente significa un error en MySQL o una tabla corrupta. Consulte Sección A.4.2, “Qué hacer si MySQL sigue fallando (crashing)”.
Para que se genere un volcado de núcleo en Linux cuando
mysqld finalice imprevistamente con una
señal SIGSEGV
, debe iniciarse
mysqld con la opción
--core-file
. También es probable que se
necesite aumentar el espacio para el fichero de volcado de
núcleo mediante el agregado de ulimit -c
1000000 a mysqld_safe o iniciando
mysqld_safe con
--core-file-size=1000000
. Consulte
Sección 5.1.3, “El script de arranque del servidor mysqld_safe”.
MySQL necesita la versión 5.4.12 o posterior de
libc
. Se sabe que trabaja correctamente con
libc
5.4.46. glibc
versión 2.0.6 y posterior también debería funcionar. Han
ocurrido algunos problemas con los RPMs de
glibc
para Red Hat, de modo que si sucede,
se deberá buscar cualquier actualización disponible. Los
RPMs de las versiones glibc
2.0.7-19 y
2.0.7-29 funcionan adecuadamente.
Si se está empleando Red Hat 8.0 o una nueva biblioteca
glibc
2.2.x, se puede ver una finalización
imprevista de mysqld en
gethostbyaddr()
. Esto sucede porque la
nueva biblioteca glibc
requiere un tamaño
de pila mayor a 128Kb para esta llamada. Para solucionar el
problema, se debe iniciar mysqld con la
opción --thread-stack=192K
. (Use
-O thread_stack=192K
si está utilizando
una versión de MySQL anterior a MySQL 4). Este tamaño de
pila es el predeterminado en MySQL 4.0.10 y posteriores, de
modo que el problema mencionado no existirá.
Si se está empleando gcc 3.0 o posterior
para compilar MySQL, se deberá instalar la biblioteca
libstdc++v3
antes de compilar MySQL; si no
se hace de esta forma, se obtendrá un error relativo a un
símbolo inexistente __cxa_pure_virtual
durante el enlazado.
En algunas distribuciones de Linux antiguas, configure puede producir un error como este:
Syntax error in sched.h. Change _P to __P in the /usr/include/sched.h file. See the Installation chapter in the Reference Manual.
Simplemente hay que hacer lo que el mensaje dice (Error de
sintaxis en sched.h. Cambie _P a __P en el fichero
/usr/include/sched.h) Agregar un carácter de subrayado
adicional al nombre de macro _P
que tiene
solamente uno, y reintentar.
Pueden aparecer algunas advertencias durante la compilación. Las que se listan a continuación, pueden ignorarse:
mysqld.cc -o objs-thread/mysqld.o mysqld.cc: In function `void init_signals()': mysqld.cc:315: warning: assignment of negative value `-1' to `long unsigned int' mysqld.cc: In function `void * signal_hand(void *)': mysqld.cc:346: warning: assignment of negative value `-1' to `long unsigned int'
Si mysqld realiza siempre un volcado de
núcleo al iniciarse, el problema puede estar en una versión
antigua de /lib/libc.a
. Debe intentarse
renombrando el fichero, luego borrar
sql/mysqld
y ejecutar nuevamente el
comando make install. Luego reintentar.
Este problema se informó en algunas instalaciones de
Slackware.
Si se obtiene el siguiente error al enlazar
mysqld, significa que la biblioteca
libg++.a
no se instaló correctamente:
/usr/lib/libc.a(putc.o): In function `_IO_putc': putc.o(.text+0x0): multiple definition of `_IO_putc'
Se puede evitar el uso de libg++.a
ejecutando configure de esta manera:
shell> CXX=gcc ./configure
En algunas implementaciones, readdir_r()
no
funciona correctamente. El síntoma es que la sentencia
SHOW DATABASES
devuelve una respuesta
vacía. Esto puede solucionarse eliminando
HAVE_READDIR_R
del fichero
config.h
después de configurar y antes
de compilar.
Se hicieron pruebas de rendimiento y funcionamiento con MySQL 5.0 sobre Alpha, y parece funcionar correctamente.
Actualmente, los paquetes binarios de MysQL se crean sobre SuSE Linux 7.0 para AXP, kernel 2.4.4-SMP, Compiladores Compaq C (V6.2-505) y Compaq C++ (V6.3-006) sobre un ordenador Compaq DS20 con procesador Alpha EV6.
Los compiladores mencionados pueden descargarse de http://www.support.compaq.com/alpha-tools/. Usando éstos en lugar de gcc, se ha obtenido una mejora del 9% al 14% en el rendimiento de MySQL.
Para MySQL 5.0 sobre Alpha, se utiliza el flag -arch
generic
en las opciones del compilador, lo cual
garantiza que el binario se ejecute en todos los procesadores
Alpha. También se compila estáticamente para evitar
problemas con bibliotecas. El comando
configure se ve así:
CC=ccc CFLAGS="-fast -arch generic" CXX=cxx \ CXXFLAGS="-fast -arch generic -noexceptions -nortti" \ ./configure --prefix=/usr/local/mysql --disable-shared \ --with-extra-charsets=complex --enable-thread-safe-client \ --with-mysqld-ldflags=-non_shared --with-client-ldflags=-non_shared
Si se desea emplear egcs, la siguiente linea en configure ha funcionado bien:
CFLAGS="-O3 -fomit-frame-pointer" CXX=gcc \ CXXFLAGS="-O3 -fomit-frame-pointer -felide-constructors \ -fno-exceptions -fno-rtti" \ ./configure --prefix=/usr/local/mysql --disable-shared
Algunos problemas conocidos al ejecutar MySQL en Linux-Alpha:
-
La depuración de aplicaciones multihilo como MySQL no funciona en
gdb 4.18
. Debe emplearse gdb 5.1 en su lugar. -
Si se intenta enlazar estáticamente mysqld cuando se utiliza gcc, la imagen resultante realiza un volcado de núcleo al iniciarse. Esto significa que no se debe emplear
--with-mysqld-ldflags=-all-static
con gcc.
MySQL debería funcionar en MkLinux con el paquete más nuevo
de glibc
(se lo probó con
glibc
2.0.7).
Para lograr que MySQL funcione en Qube2 (Linux Mips), se
necesita la verseón más nueva de las bibliotecas
glibc
. glibc-2.0.7-29C2
funciona correctamente. También es necesario emplear el
compilador de C++ egcs
(egcs 1.0.2-9, gcc
2.95.2 o posterior).
Para lograr que MySQL se compile en Linux IA-64, se los desarrolladores de MySQL utilizaron el siguiente comando configure para compilar con gcc 2.96:
CC=gcc \ CFLAGS="-O3 -fno-omit-frame-pointer" \ CXX=gcc \ CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors \ -fno-exceptions -fno-rtti" \ ./configure --prefix=/usr/local/mysql \ "--with-comment=Official MySQL binary" \ --with-extra-charsets=complex
En IA-64, los clientes binarios de MySQL utilizan bibliotecas
compartidas. Esto significa que si se instala la distribución
binaria provista por MySQL AB en otra ubicación que no sea
/usr/local/mysql
, se deberá agregar la
ruta donde está instalado
libmysqlclient.so
, ya sea en el fichero
/etc/ld.so.conf
o en la variable de
entorno LD_LIBRARY_PATH
.
Consulte Sección A.3.1, “Problemas al enlazar a la biblioteca de clientes MySQL”.
En Mac OS X, tar no puede manejar nombres
largos de fichero. Si se necesita descomprimir una distribución
.tar.gz
, se deberá emplear
gnutar.
MySQL debería funcionar sin mayores problemas en Mac OS X 10.x (Darwin).
Los problemas conocidos son:
-
Los valores de tiempo de conexión (
wait_timeout
,interactive_timeout
ynet_read_timeout
) no se respetan.Probablemente esto sea indicio de un problema de manejo en la biblioteca de subprocesos, donde la señal no interrumpe una lectura pendiente. Es de esperar que una futura actualización de la biblioteca de subprocesos lo corrija.
El binario provisto por MySQL para Mac OS X está compilado sobre Darwin 6.3 con la siguiente línea en configure:
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc \ CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors \ -fno-exceptions -fno-rtti" \ ./configure --prefix=/usr/local/mysql \ --with-extra-charsets=complex --enable-thread-safe-client \ --enable-local-infile --disable-shared
En versiones actuales de Mac OS X Server no se requieren cambios al sistema operativo antes de compilar MySQL. La compilación para la plataforma Server es lo mismo que para la versión cliente de MySQL.
En versiones antiguas (Mac OS X Server 1.2, también conocido como Rhapsody), se debe instalar un paquete pthread antes de intentar configurar MySQL.
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
desdeftp.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
.
Generalmente se puede utilizar un binario de Solaris 2.6 en Solaris 2.7 y 2.8. La mayoría de los problemas mencionados bajo Solaris 2.6 también se aplican a Solaris 2.7 y 2.8.
MySQL debería detectar automáticamente nuevas vesiones de Solaris y habilitar soluciones específicas para los siguientes problemas.
Solaris 2.7/2.8 tiene algunos errores en los ficheros de inclusión. Se obtiene el siguiente error al usar gcc:
/usr/include/widec.h:42: warning: `getwc' redefined /usr/include/wchar.h:326: warning: this is the location of the previous definition
Si ocurre eso, puede solucionarse copiando
/usr/include/widec.h
a
.../lib/gcc-lib/os/gcc-version/include
y
cambiando la línea 41:
#if !defined(lint) && !defined(__lint)
Colocando esta:
#if !defined(lint) && !defined(__lint) && !defined(getwc)
Como alternativa, puede editarse directamente el fichero
/usr/include/widec.h
. En cualquiera de
las dos formas, se debe eliminar
config.cache
y ejecutar
configure nuevamente.
Si se obtienen los siguientes errores al ejecutar
make, es debido a que
configure no detectó correctamente el
fichero curses.h
(probablemente a causa
del error en /usr/include/widec.h
):
In file included from mysql.cc:50: /usr/include/term.h:1060: syntax error before `,' /usr/include/term.h:1081: syntax error before `;'
La solución es hacer algo de lo siguiente:
-
Configure con
CFLAGS=-DHAVE_CURSES_H CXXFLAGS=-DHAVE_CURSES_H ./configure
. -
Editar
/usr/include/widec.h
como se indicó anteriormente y ejecutar de nuevo configure. -
Quitar la línea
#define HAVE_TERM
del ficheroconfig.h
y ejecutar de nuevo make.
Si el enlazador no puede hallar -lz
cuando
enlaza programas cliente, probablemente el problema sea que el
fichero libz.so
se instaló en
/usr/local/lib
. Este problema puede
resolverse con alguno de los siguientes métodos:
-
Agregar
/usr/local/lib
aLD_LIBRARY_PATH
. -
Agregar un vínculo a
libz.so
desde/lib
. -
Si se está utilizando Solaris 8, se puede instalar el opcional
zlib
desde el CD de distribución del sistema operativo. -
Ejecutar configure con la opción
--with-named-z-libs=no
cuando se compila MySQL.
En Solaris 8 sobre x86, mysqld realiza un
volcado de núcleo si se quitan los símbolos de depuración
utilizando strip
.
Si se emplea gcc o egcs en Solaris x86 y se experimentan problemas con volcados de núcleo bajo carga, se debería usar el siguiente comando configure:
CC=gcc CFLAGS="-O3 -fomit-frame-pointer -DHAVE_CURSES_H" \ CXX=gcc \ CXXFLAGS="-O3 -fomit-frame-pointer -felide-constructors \ -fno-exceptions -fno-rtti -DHAVE_CURSES_H" \ ./configure --prefix=/usr/local/mysql
Esto evita inconvenientes con la biblioteca
libstdc++
y con excepciones de C++.
Si esto no funciona, se deberá compilar una versión de depuración y ejecutarla con un fichero de seguimiento (trace) o bajo gdb. Consulte Sección D.1.3, “Depurar mysqld con gdb”.
Esta sección proporciona información sobre el uso de MySQL en variantes de BSD Unix.
Para ejecutar MySQL se recomienda FreeBSD 4.x o posterior,
porque el paquete de subprocesos está mucho más integrado.
Para lograr un sistema seguro y estable, se deberían emplear
solamente kernels de FreeBSD marcados con
-RELEASE
.
La forma más fácil (y más empleada) de instalar MySQL es
utilizar los ports (herramientas para crear, actualizar, y
quitar paquetes de aplicaciones) de
mysql-server y
mysql-client
disponibles en
http://www.freebsd.org/. Utilizar estos ports
conlleva los siguiente benficios:
-
Un servidor MySQL funcional, con todas las optimizaciones conocidas para la versión de FreeBSD donde se instala.
-
Configuración y compilación automáticas.
-
Scripts de inicio instalados en
/usr/local/etc/rc.d
. -
Es posible emplear
pkg_info -L
para ver los ficheros que hay instalados. -
Es posible emplear
pkg_delete
para quitar MySQL del ordenador.
Se recomienda utilizar MIT-pthreads en FreeBSD 2.x, y los subprocesos (threads) nativos en la Versión 3 en adelante. En algunas versiones 2.2.x es posible utilizar subprocesos nativos, pero pueden aparecer problemas al finalizar mysqld.
Desafortunadamente, ciertas llamadas a funciones en FreeBSD no
son todavía totalmente aptas para subprocesos. Sobre todo,
esto incluye a la función gethostbyname()
,
la cual es utilizada por MySQL para convertir nombres de host
en direcciones IP. Bajo ciertas circunstancias, el proceso
mysqld de repente absorbe el 100% de la
capacidad de la CPU y deja de responder. Si ocurre este
problema, inténtese iniciar MySQL usando la opción
--skip-name-resolve
.
Alternativamente puede enlazarse MySQL en FreeBSD 4.x empleando la biblioteca LinuxThreads, la cual evita algunos problemas que tiene la implementación de subprocesos nativa de FreeBSD. Puede encontrarse una muy buena comparación entre LinuxThreads y la implementación nativa en el artículo de Jeremy Zawodny FreeBSD or Linux for your MySQL Server? (FreeBSD o Linux para su Servidor MySQL?) en http://jeremy.zawodny.com/blog/archives/000697.html.
Los problemas conocidos al utilizar LinuxThreads en FreeBSD son:
-
Los valores de tiempos de conexión (
wait_timeout
,interactive_timeout
ynet_read_timeout
) no se respetan. El síntoma es que las conexiones persistentes se congelan por un tiempo muy largo, sin cerrarse, y matar ('kill') el subproceso no tendrá efecto hasta que éste pase al siguiente comando.Esto probablemente sea un indicio de un problema en el manejo de señales en la biblioteca de procesos, donde la señal no interrumpe una lectura pendiente. Se supone que esto se resolvió en FreeBSD 5.0
El proceso de compilación de MySQL necesita GNU make (gmake) para llevarse a cabo. Si no está disponible GNU make, habrá que instalarlo antes de compilar MySQL.
La forma recomendada de compilar e instalar MySQL en FreeBSD con gcc (2.95.2 y superior) es:
CC=gcc CFLAGS="-O2 -fno-strength-reduce" \ CXX=gcc CXXFLAGS="-O2 -fno-rtti -fno-exceptions \ -felide-constructors -fno-strength-reduce" \ ./configure --prefix=/usr/local/mysql --enable-assembler gmake gmake install cd /usr/local/mysql bin/mysql_install_db --user=mysql bin/mysqld_safe &
Si se tiene conocimiento de que configure utiliza MIT-pthreads, se debería leer las notas para MIT-pthreads. Consulte Sección 2.8.5, “Notas sobre MIT-pthreads”.
Si se obtiene un error de make install
donde anuncia que no se puede hallar el fichero
/usr/include/pthreads
, es porque
configure no detectó que se necesitan
MIT-pthreads. Para solucionar este problema, debe eliminarse
config.cache
, y luego ejecutar nuevamente
configure con la opción
--with-mit-threads
.
Se debe estar seguro de que la configuración de resolución
de nombres es la correcta. De otras maneras, se pueden
experimentar demoras o fallas al conectarse a
mysqld. También hay que verificar que sea
correcta la entrada para localhost
en el
fichero /etc/hosts
. El fichero debería
comenzar con una línea similar a esta:
127.0.0.1 localhost localhost.your.domain
Se sabe que FreeBSD tiene en forma predeterminada un límite
de manejadores de ficheros muy bajo. Consulte
Sección A.2.17, “No se encontró el fichero”. Hay que iniciar el
servidor utilizando la opción
--open-files-limit
para
mysqld_safe, o elevar en el fichero
/etc/login.conf
el límite para el
usuario mysqld y recompilarlo con
cap_mkdb /etc/login.conf
. También hay que
asegurarse de establecer la clase apropiada de usuario en el
fichero de contraseñas si no se está empleando el
predeterminado (utilizar chpass
mysqld-user-name
). Consulte
Sección 5.1.3, “El script de arranque del servidor mysqld_safe”.
Si se dispone de mucha memoria,se podría considerar la
recompilación del kernel para permitirle a MySQL utilizar
más de 512Mb de RAM. Para más información, ver la
opción MAXDSIZ
en el fichero de
configuración LINT.
Si se tienen problemas con la fecha actual en MySQL, podría
ser de ayuda establecer al valor de la variable
TZ
. Consulte
Apéndice E, Variables de entorno.
Para compilar en NetBSD, se necesitará GNU
make. De otro modo, el proceso fallará
cuando make intente ejecutar
lint
en ficheros de C++.
En OpenBSD versión 2.5, se puede compilar MySQL con subprocesos nativos empleando las siguientes opciones:
CFLAGS=-pthread CXXFLAGS=-pthread ./configure --with-mit-threads=no
Si se obtiene un error como Error in accept:: Bad
file descriptor
o el error 9 al intentar abrir
tablas o directorios, el problema podría ser que no se tienen
asignados suficientes descriptores de fichero para MySQL.
En este caso, hay que intentar iniciar
mysqld_safe como root
con las siguientes opciones:
mysqld_safe --user=mysql --open-files-limit=2048 &
Si se obtiene el siguiente error al compilar con MySQL, es porque el valor de ulimit para la memoria virtual es muy bajo:
item_func.h: In method `Item_func_ge::Item_func_ge(const Item_func_ge &)': item_func.h:28: virtual memory exhausted make[2]: *** [item_func.o] Error 1
Debe intentarse emplear ulimit -v 80000 y ejecutar make nuevamente. Si esto no funciona y se está utilizando bash, cambiar a csh o sh; algunos usuarios de BSDI han informado problemas con bash y el comando ulimit.
Si se está empleando gcc, también se
tendrá que utilizar el flag
--with-low-memory
para
configure para poder compilar
sql_yacc.cc
.
Si se tienen problemas con la fecha actual en MySQL, podría
ser de ayuda establecer al valor de la variable
TZ
. Consulte
Apéndice E, Variables de entorno.
Se debe actualizar a BSD/OS Versión 3.1. Si no es posible, instalar el parche BSDI M300-038.
Utilizar el siguiente comando al configurar MySQL:
env CXX=shlicc++ CC=shlicc2 \ ./configure \ --prefix=/usr/local/mysql \ --localstatedir=/var/mysql \ --without-perl \ --with-unix-socket-path=/var/mysql/mysql.sock
También la siguiente manera funciona:
env CC=gcc CXX=gcc CXXFLAGS=-O3 \ ./configure \ --prefix=/usr/local/mysql \ --with-unix-socket-path=/var/mysql/mysql.sock
Si se desea se puede cambiar la ubicación de los directorios, o no especificar ninguna opción para que se usen los valores predeterminados.
Si se tienen problemas de rendimiento bajo un uso intensivo,
inténtese usar la opción
--skip-thread-priority
con
mysqld. Esto ejecuta todos los subprocesos
con la misma prioridad. En BSDI Versión 3.1, esto dará mejor
rendimiento al menos hasta que BSDI mejore su programador de
subprocesos.
Si se obtiene el error virtual memory
exhausted
al compilar, se debería intentar con
ulimit -v 80000 y ejecutar
make nuevamente. Si esto no funciona y se
está utilizando bash, cambiar a
csh o sh; algunos
usuarios de BSDI han informado problemas con
bash y el comando
ulimit.
BSDI versión 4.x tiene algunos errores relacionados con los subprocesos. Si se desea usar MySQL en esta versión, se debería instalar todos los parches relacionados con subprocesos. Al menos se debería instalar el parche M400-023.
En algunos sistemas BSDI versión 4.x, se pueden tener
problemas con las bibliotecas compartidas. El síntoma es que
no se pueden ejecutar programas cliente, por ejemplo,
mysqladmin. En este caso, se necesitará
reconfigurar con la opción
--disable-shared
para que no se usen
bibliotecas compartidas.
Algunos clientes han tenido problemas con BSDI 4.0.1 donde el binario mysqld no puede abrir tablas pasado un tiempo. Es debido a algunos errores relacionados con el sistema y las bibliotecas que provocan que mysqld cambie el directorio actual sin habérselo solicitado.
La solución puede ser actualizar MySQL a la versión 3.23.34
o posterior o bien, después de ejecutar
configure, quitar la línea
#define HAVE_REALPATH
del fichero
config.h
antes de ejecutar
make.
Nótese que esto significa que en BSDI no se puede enlazar simbólicamente los directorios de una base de datos a otra base de datos o una tabla a otra base de datos. (Sí es posible establecer un vínculo simbólico a otro disco).
Hay un par de pequeños problemas al compilar MySQL en HP-UX. Se recomienda que se utilice gcc en lugar del compilador nativo de HP-UX, ya que gcc produce mejor código.
Se recomienda utilizar gcc 2.95 en HP-UX.
No hay que utilizar flags de optimización intensiva (como
-O6
) porque pueden no ser seguros en HP-UX.
La siguiente línea de configure debería funcionar con gcc 2.95:
CFLAGS="-I/opt/dce/include -fpic" \ CXXFLAGS="-I/opt/dce/include -felide-constructors -fno-exceptions \ -fno-rtti" \ CXX=gcc \ ./configure --with-pthread \ --with-named-thread-libs='-ldce' \ --prefix=/usr/local/mysql --disable-shared
La siguiente línea de configure debería funcionar con gcc 3.1:
CFLAGS="-DHPUX -I/opt/dce/include -O3 -fPIC" CXX=gcc \ CXXFLAGS="-DHPUX -I/opt/dce/include -felide-constructors \ -fno-exceptions -fno-rtti -O3 -fPIC" \ ./configure --prefix=/usr/local/mysql \ --with-extra-charsets=complex --enable-thread-safe-client \ --enable-local-infile --with-pthread \ --with-named-thread-libs=-ldce --with-lib-ccflags=-fPIC --disable-shared
Debido a algunos errores críticos en las bibliotecas estándar de HP-UX, se deberían instalar los siguientes parches antes de ejecutar MySQL en HP-UX 11.0:
PHKL_22840 Streams cumulative PHNE_22397 ARPA cumulative
Esto soluciona el problema de obtener
EWOULDBLOCK
EWOULDBLOCK
de recv()
y EBADF
de
accept()
en aplicaciones con subprocesos o
hebradas (threaded).
Si se está empleando gcc 2.95.1 en un sistema HP-UX 11.x sin parches, se podría obtener el siguiente error:
In file included from /usr/include/unistd.h:11, from ../include/global.h:125, from mysql_priv.h:15, from item.cc:19: /usr/include/sys/unistd.h:184: declaration of C function ... /usr/include/sys/pthread.h:440: previous declaration ... In file included from item.h:306, from mysql_priv.h:158, from item.cc:19:
El problema es que HP-UX no define
pthreads_atfork()
en forma consistente.
Tiene prototipos conflictivos en
/usr/include/sys/unistd.h
:184 y
/usr/include/sys/pthread.h
:440.
Una solución es copiar
/usr/include/sys/unistd.h
dentro de
mysql/include
y editar
unistd.h
y cambiarlo para que coincida
con la definición en pthread.h
. Hay que
hallar esta línea:
extern int pthread_atfork(void (*prepare)(), void (*parent)(), void (*child)());
Y cambiarla para que sea así:
extern int pthread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(void));
Después de realizar el cambio, la siguiente línea de configure debería funcionar:
CFLAGS="-fomit-frame-pointer -O3 -fpic" CXX=gcc \ CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti -O3" \ ./configure --prefix=/usr/local/mysql --disable-shared
Si se está empleando el compilador HP-UX, se puede utilizar el siguiente comando (el cual fue probado con cc B.11.11.04):
CC=cc CXX=aCC CFLAGS=+DD64 CXXFLAGS=+DD64 ./configure \ --with-extra-character-set=complex
Se podrá ignorar cualquier error de este tipo:
aCC: warning 901: unknown option: `-3': use +help for online documentation
Si se obtiene el siguiente error desde configure, verificar si no se tiene la ruta al compilador K&R antes que la ruta al compilador HP-UX para C y C++:
checking for cc option to accept ANSI C... no configure: error: MySQL requires an ANSI C compiler (and a C++ compiler). Try gcc. See the Installation chapter in the Reference Manual.
Otra razón que puee impedir la compilación es que no se
hayan definido los flags +DD64
tal como se
ha descripto.
Otra posibilidad para HP-UX 11 es emplear los binarios MySQL provistos en http://dev.mysql.com/downloads, los cuales fueron compilados y probados por MySQL AB. También se han recibido informes de que los binarios de MySQL provistos con HP-UX 10.20 se ejecutan correctamente en HP-UX 11. Si se encuentran problemas, se debería verificar si HP-UX tiene todos los parches necesarios.
La detección automática de xlC
no se
encuentra presente en Autoconf, de modo que habrá que
inicializar una cantidad de variables antes de ejecutar
configure. El siguiente ejemplo utiliza el
compilador de IBM:
export CC="xlc_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192 " export CXX="xlC_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192" export CFLAGS="-I /usr/local/include" export LDFLAGS="-L /usr/local/lib" export CPPFLAGS=$CFLAGS export CXXFLAGS=$CFLAGS ./configure --prefix=/usr/local \ --localstatedir=/var/mysql \ --sbindir='/usr/local/bin' \ --libexecdir='/usr/local/bin' \ --enable-thread-safe-client \ --enable-large-files
Estas opciones se emplean para compilar la distribución MySQL que se encuentra en http://www-frec.bull.com/.
Si se cambia el -O3
por
-O2
en la linea de
configure anterior, también habrá que
quitar la opción -qstrict
. Esto es una
limitación en el compilador de C de IBM.
Si se está empleando gcc o
egcs para compilar MySQL, se
debe utilizar el flag
-fno-exceptions
, porque la gestión de
excepciones en gcc/egcs
no es apta para subprocesos. (Esto se probó con
egcs 1.1.) También hay algunos problemas
conocidos con el ensamblador de IBM, el cual puede generar
código defectuoso cuando se lo usa con
gcc.
Se recomienda usar la siguiente línea de configure con egcs y gcc 2.95 en AIX:
CC="gcc -pipe -mcpu=power -Wa,-many" \ CXX="gcc -pipe -mcpu=power -Wa,-many" \ CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti" \ ./configure --prefix=/usr/local/mysql --with-low-memory
La opción -Wa,-many
se necesita para que
el proceso de compilación tenga éxito. IBM está al tanto de
este problema pero no tiene urgencia por resolverlo porque hay
disponible una solución alternativa. No se sabe si
-fno-exceptions
se requiere con
gcc 2.95, pero como MySQL no utiliza
excepciones y la opción genera código más rápido, se
recomienda usarlo siempre con egcs /
gcc.
Si se obtiene un problema con el código ensamblador, hay que
cambiar la opción
-mcpu=
xxx
para
que concuerde con la CPU del usuario. Generalmente puede
necesitarse power2
,
power
, o powerpc
. O bien
podría necesitarse 604
o
604e
. No está confirmado, pero se sospecha
que power
puede muy bien ser seguro la
mayoría de las veces, incluso en un ordenador de 2
procesadores.
Si se desconoce el tipo de CPU que se posee, ejecutar un
comando uname -m
. Este produce una cadena
con un aspecto similar a 000514676700
, con
el formato xxyyyyyymmss
, donde
xx
y ss
son siempre
00
, yyyyyy
es un
identificador único de sistema, y mm
es el
identificar de la arquitectura de la CPU. La tabla con estos
valores se encuentra en
http://www16.boulder.ibm.com/pseries/en_US/cmds/aixcmds5/uname.htm.
Esto proporciona el tipo y modelo del ordenador que se está usando.
Si se tienen problemas con señales (MySQL termina abruptamente al someterlo a carga intensiva), puede tratarse de un error del SO relacionado con subprocesos y señales. En este caso, hay que indicarle a MySQL que no utilice señales, configurándolo como sigue:
CFLAGS=-DDONT_USE_THR_ALARM CXX=gcc \ CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti \ -DDONT_USE_THR_ALARM" \ ./configure --prefix=/usr/local/mysql --with-debug \ --with-low-memory
Esto no afecta el rendimiento de MySQL, pero tiene el efecto secundario de que no se pueden terminar procesos de clientes que están “durmiendo” (“sleeping”) en una conexión usando mysqladmin kill o mysqladmin shutdown. El cliente terminará cuando emita su siguiente comando.
En algunas versiones de AIX, el enlazado con
libbind.a
provoca que
getservbyname()
haga un volcado de núcleo.
Este es un error en AIX y debería informarse a IBM.
Para AIX 4.2.1 y gcc, se deben hacer los siguientes cambios.
Después de configurar, editar config.h
y
include/my_config.h
y cambiar la línea
que dice:
#define HAVE_SNPRINTF 1
a esto:
#undef HAVE_SNPRINTF
Y, finalmente, en mysqld.cc
, se
necesitará agregar un prototipo para
initgroups()
.
#ifdef _AIX41 extern "C" int initgroups(const char *,int); #endif
Si se necesita asginar mucha memoria para el proceso mysqld, no basta con utilizar ulimit -d unlimited. También habrá que modificar mysqld_safe agregando una línea como la siguiente:
export LDR_CNTRL='MAXDATA=0x80000000'
Se puede encontrar más información acerca de usar grandes cantidades de memoria en http://publib16.boulder.ibm.com/pseries/en_US/aixprggd/genprogc/lrg_prg_support.htm.
En SunOS 4, se necesita MIT-pthreads para compilar MySQL. Esto a su vez significa que que se necesitará GNU make.
Algunos sistemas SunOS 4 tienen problemas con las bibliotecas dinámicas y libtool. Se puede usar la siguiente línea en configure para evitar este problema:
./configure --disable-shared --with-mysqld-ldflags=-all-static
Al compilar readline
, se pueden obtener
advertencias sobre definiciones duplicadas. Estas pueden
ignorarse.
Al compilar mysqld, se producen algunas
advertencias del tipo implicit declaration of
function
que pueden ignorarse.
Si se está utilizando egcs 1.1.2 en Unix Digital, se debería actualizar a gcc 2.95.2, porque egcs tiene algunos errores serios en DEC.
Al compilar programas hebrados (threaded) en Unix Digital, la
documentación recomienda utilizar la opción
-pthread
con cc y
cxx y las bibliotecas -lmach
-lexc
(adicionalmente a
-lpthread
). Se debería ejecutar
configure de una forma parecida a esta:
CC="cc -pthread" CXX="cxx -pthread -O" \ ./configure --with-named-thread-libs="-lpthread -lmach -lexc -lc"
Cuando se compila mysqld, se podrían ver un par de advertencias similares a estas:
mysqld.cc: In function void handle_connections()': mysqld.cc:626: passing long unsigned int *' as argument 3 of accept(int,sockadddr *, int *)'
Pueden ser ignoradas sin problemas. Ocurren porque configure sólo puede detectar errores y no advertencias.
Si se inicia el servidor directamente desde la línea de
comandos, se podría tener el problema de que finalice al
terminar la sesión de usuario en el SO. (Cuando se termina la
sesión, los procesos pendientes reciben una señal
SIGHUP
). Si eso sucede, debe intentarse
iniciar el servidor de esta manera:
nohup mysqld [options
] &
nohup
provoca que el comando a
continuación ignore cualquier señal
SIGHUP
enviada desde la terminal.
Alternativamente, se puede iniciar el servidor ejecutando
mysqld_safe, lo cual invoca a
mysqld usando nohup.
Consulte Sección 5.1.3, “El script de arranque del servidor mysqld_safe”.
Si se tiene un problema al compilar
mysys/get_opt.c
, quítese la linea
#define _NO_PROTO
del comienzo de dicho
fichero.
Si se está empleando el compilador CC de Compaq, la siguiente línea de configure debería funcionar:
CC="cc -pthread" CFLAGS="-O4 -ansi_alias -ansi_args -fast -inline speed all -arch host" CXX="cxx -pthread" CXXFLAGS="-O4 -ansi_alias -ansi_args -fast -inline speed all \ -arch host -noexceptions -nortti" export CC CFLAGS CXX CXXFLAGS ./configure \ --prefix=/usr/local/mysql \ --with-low-memory \ --enable-large-files \ --enable-shared=yes \ --with-named-thread-libs="-lpthread -lmach -lexc -lc" gnumake
Si al compilar mysql se tienen problemas con libtool usando bibliotecas compartidas como se indicó, se puede evitar el problema empleando estos comandos:
cd mysql /bin/sh ../libtool --mode=link cxx -pthread -O3 -DDBUG_OFF \ -O4 -ansi_alias -ansi_args -fast -inline speed \ -speculate all \ -arch host -DUNDEF_HAVE_GETHOSTBYNAME_R \ -o mysql mysql.o readline.o sql_string.o completion_hash.o \ ../readline/libreadline.a -lcurses \ ../libmysql/.libs/libmysqlclient.so -lm cd .. gnumake gnumake install scripts/mysql_install_db
Si ocurren problemas al compilar y se tienen instalados DEC CC y gcc, se debe intentar ejecutar configure de este modo:
CC=cc CFLAGS=-O CXX=gcc CXXFLAGS=-O3 \ ./configure --prefix=/usr/local/mysql
Si ocurren problemas con el fichero
c_asm.h
, se puede crear y utilizar un
fichero c_asm.h
"silencioso" con:
touch include/c_asm.h CC=gcc CFLAGS=-I./include \ CXX=gcc CXXFLAGS=-O3 \ ./configure --prefix=/usr/local/mysql
Tener en cuenta que los siguientes problemas con el programa ld pueden ser corregidos descargando el último conjunto de parches para DEC (Compaq) desde: http://ftp.support.compaq.com/public/unix/.
En OSF/1 V4.0D y el compilador "DEC C V5.6-071 on Digital Unix
V4.0 (Rev. 878)", el compilador tiene algún comportamiento
extraño (símbolos asm
indefinidos)
/bin/ld
también parece estar defectuoso
(durante el enlazado de mysqld ocurren
errores del tipo _exit undefined
). En estos
sistemas se optó por compilar MySQL con la siguiente línea
de configure, reemplazando
/bin/ld
con la versión para OSF 4.OC.
CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql
Con el compilador Digital "C++ V6.1-029", se debería hacer lo siguiente:
CC=cc -pthread CFLAGS=-O4 -ansi_alias -ansi_args -fast -inline speed \ -speculate all -arch host CXX=cxx -pthread CXXFLAGS=-O4 -ansi_alias -ansi_args -fast -inline speed \ -speculate all -arch host -noexceptions -nortti export CC CFLAGS CXX CXXFLAGS ./configure --prefix=/usr/mysql/mysql \ --with-mysqld-ldflags=-all-static --disable-shared \ --with-named-thread-libs="-lmach -lexc -lc"
En algunas versiones OSF/1, la función
alloca()
está defectuosa. Esto se
soluciona quitando la línea de config.h
que define 'HAVE_ALLOCA'
.
La función alloca()
puede tener también
un prototipo incorrecto en
/usr/include/alloca.h
. Esta advertencia
resultante de esa situación puede ignorarse.
configure utiliza automáticamente la
siguiente libreria de subprocesos:
--with-named-thread-libs="-lpthread -lmach -lexc
-lc"
.
Al utilizar gcc, se debería ejecutar configure de este modo:
CFLAGS=-D_PTHREAD_USE_D4 CXX=gcc CXXFLAGS=-O3 ./configure ...
Si se tienen problemas con señales (MySQL termina abruptamente al someterlo a carga intensiva), puede tratarse de un error del SO relacionado con subprocesos y señales. En este caso, hay que indicarle a MySQL que no utilice señales, configurándolo como sigue:
CFLAGS=-DDONT_USE_THR_ALARM \ CXXFLAGS=-DDONT_USE_THR_ALARM \ ./configure ...
Esto no afecta el rendimiento de MySQL, pero tiene el efecto secundario de que no se pueden terminar procesos de clientes que están “durmiendo” (“sleeping”) en una conexión usando mysqladmin kill o mysqladmin shutdown. El cliente terminará cuando emita su siguiente comando.
Con gcc 2.95.2, se puede encontrar el siguiente error de compilación:
sql_acl.cc:1456: Internal compiler error in `scan_region', at except.c:2566 Please submit a full bug report.
Para solucionar esto, habría que posicionarse en el
directorio sql
, y cortar y pegar la última
línea de gcc, pero cambiando
-O3
por -O0
(o agregando
-O0
inmediatamente después de
gcc si no se tiene ninguna opción
-O
en la línea de compilación). Luego de
hacer esto, se puede volver al directorio principal
(top-level) y ejecutar nuevamente make.
Si se está utilizando Irix Versión 6.5.3 o posterior,
mysqld será capaz de crear procesos
únicamente si se lo ejecutó como un usuario con privilegios
CAP_SCHED_MGT
(como el usuario
root
) o bien darle este privilegio al
servidor mysqld con el siguiente comando
del shell:
chcap "CAP_SCHED_MGT+epi" /opt/mysql/libexec/mysqld
Es posible que haya que quitar la definición de algunos
símbolos en config.h
luego de ejecutar
configure y antes de compilar.
En algunas implementaciones de Irix, la función
alloca()
está defectuosa. Si el servidor
mysqld termina abruptamente en algunas
sentencias SELECT
, deberán quitarse de
config.h
las líneas que definen
HAVE_ALLOC
y
HAVE_ALLOCA_H
. Si mysqladmin
create no funciona, habrá que quitar de
config.h
la línea que define
HAVE_READDIR_R
. También es posible que
haya que quitar la línea HAVE_TERM_H
.
SGI recomienda que se instalen en conjunto todos los parches de esta página: http://support.sgi.com/surfzone/patches/patchset/6.2_indigo.rps.html
Como mínimo, se deberían instalar las últimas versiones del
kernel, de rld
, y de
libc
.
Definitivamente serán necesarios todos los parches POSIX de esta página, para dar soporte a pthreads:
http://support.sgi.com/surfzone/patches/patchset/6.2_posix.rps.html
Si se obtiene el siguiente error al compilar
mysql.cc
:
"/usr/include/curses.h", line 82: error(1084): invalid combination of type
Habrá que tipear lo siguiente en el directorio principal del árbol de código fuente de MySQL:
extra/replace bool curses_bool < /usr/include/curses.h > include/curses.h make
También se informaron problemas de sincronización (scheduling). Si sólo se está ejecutando un proceso, el rendimiento es bajo. Esto se evita iniciando otro cliente. Esto puede conducir a un incremento en la velocidad de dos a diez veces de ese momento en adelante para el otro hilo. Es este un problema difícil de entender con los suprocesos de Irix; habrá que improvisar para hallar soluciones hasta que sea arreglado.
Si se está compilando con gcc, se puede usar el siguiente comando de configure:
CC=gcc CXX=gcc CXXFLAGS=-O3 \ ./configure --prefix=/usr/local/mysql --enable-thread-safe-client \ --with-named-thread-libs=-lpthread
Lo siguiente funciona en Irix 6.5.11 con compiladores nativos Irix C y C++ versión 7.3.1.2.
CC=cc CXX=CC CFLAGS='-O3 -n32 -TARG:platform=IP22 -I/usr/local/include \ -L/usr/local/lib' CXXFLAGS='-O3 -n32 -TARG:platform=IP22 \ -I/usr/local/include -L/usr/local/lib' \ ./configure --prefix=/usr/local/mysql --with-innodb --with-berkeley-db \ --with-libwrap=/usr/local \ --with-named-curses-libs=/usr/local/lib/libncurses.a
El port actual se probó solamente en sistemas sco3.2V5.0.5, sco3.2v5.0.6, y sco3.2v5.0.7. También está en desarrollo un port para sco3.2v4.2. Open Server 5.0.8 (Legend) tiene soporte nativo para subprocesos y permite ficheros de más de 2GB. Actualmente el máximo tamaño de fichero permitido es 2GB.
En MySQL AB se pudo compilar MySQL con el siguiente comando de configure en OpenServer con gcc 2.95.3.
CC=gcc CXX=gcc ./configure --prefix=/usr/local/mysql \ --enable-thread-safe-client --with-innodb \ --with-openssl --with-vio --with-extra-charsets=complex
gcc puede descargarse de ftp://ftp.sco.com/pub/openserver5/opensrc/gnutools-5.0.7Kj.
Este sistema de desarrollo requiere el Suplemento del Entorno
de Ejecución de OpenServer (OpenServer Execution Environment
Supplement) oss646B en OpenServer 5.0.6 y oss656B y las
bibliotecas OpenSource halladas en gwxlibs. Todas las
herramientas OpenSource están en el directorio
opensrc
, en
ftp://ftp.sco.com/pub/openserver5/opensrc/.
MySQL AB recomienda utilizar el último release en producción de MySQL.
SCO proporciona parches del sistema operativo en ftp://ftp.sco.com/pub/openserver5 para OpenServer 5.0.[0-6] y ftp://ftp.sco.com/pub/openserverv5/507 para OpenServer 5.0.7.
SCO proporciona información sobre problemas de seguridad solucionados en ftp://ftp.sco.com/pub/security/OpenServer para OpenServer 5.0.x.
El máximo tamaño de fichero en un sistema OpenServer 5.0.x es 2GB.
La memoria total que puede direccionarse para buffers de streams, clists, y bloqueo de registros, no puede exceder de 60MB en OpenServer 5.0.x.
Los buffers de streams son direccionados en páginas de 4096 bytes, los clists en páginas de 70 bytes, y los bloqueos de registros en páginas de 64 bytes, de modo que:
(NSTRPAGES * 4096) + (NCLIST * 70) + (MAX_FLCKREC * 64) <= 62914560
Seguir este procedimiento para configurar la opción Servicios de Base de Datos (Database Services). Si no se está seguro si una aplicación requiere esto, ver la documentación de la aplicación.
-
Iniciar sesión como
root
. -
Habilitar el driver SUDS mediante la edición del fichero
/etc/conf/sdevice.d/suds
. Cambiar laN
del segundo párrafo por unaY
. -
Utilizar
mkdev aio
o el Gestor de Hardware/Kernel (Hardware/Kernel Manager) para habilitar el soporte de entrada/salida asincrónica, y enlazar nuevamente el kernel. Para permitir a los usuarios reservar memoria para usar con este tipo de E/S, actualizar el fichero aiomemlock(F). Este fichero debería actualizarse para que incluya los nombre de los usuarios que pueden utilizar ESA (Entrada Salida Asincrónica, o AIO, Asynchronoys I/O) y las máximas cantidades de memoria que pueden reservar. -
Muchas aplicaciones usan binarios setuid de forma que solamente se necesita especificar un único usuario. Ver la documentación provista con la aplicación para ver si este es su caso.
Después de completar este proceso, reiniciar el sistema para crear un nuevo kernel que incorpore estos cambios.
Por defecto, las entradas en
/etc/conf/cf.d/mtune
están configuradas
así:
Value Default Min Max ----- ------- --- --- NBUF 0 24 450000 NHBUF 0 32 524288 NMPBUF 0 12 512 MAX_INODE 0 100 64000 MAX_FILE 0 100 64000 CTBUFSIZE 128 0 256 MAX_PROC 0 50 16000 MAX_REGION 0 500 160000 NCLIST 170 120 16640 MAXUP 100 15 16000 NOFILES 110 60 11000 NHINODE 128 64 8192 NAUTOUP 10 0 60 NGROUPS 8 0 128 BDFLUSHR 30 1 300 MAX_FLCKREC 0 50 16000 PUTBUFSZ 8000 2000 20000 MAXSLICE 100 25 100 ULIMIT 4194303 2048 4194303 * Streams Parameters NSTREAM 64 1 32768 NSTRPUSH 9 9 9 NMUXLINK 192 1 4096 STRMSGSZ 16384 4096 524288 STRCTLSZ 1024 1024 1024 STRMAXBLK 524288 4096 524288 NSTRPAGES 500 0 8000 STRSPLITFRAC 80 50 100 NLOG 3 3 3 NUMSP 64 1 256 NUMTIM 16 1 8192 NUMTRW 16 1 8192 * Semaphore Parameters SEMMAP 10 10 8192 SEMMNI 10 10 8192 SEMMNS 60 60 8192 SEMMNU 30 10 8192 SEMMSL 25 25 150 SEMOPM 10 10 1024 SEMUME 10 10 25 SEMVMX 32767 32767 32767 SEMAEM 16384 16384 16384 * Shared Memory Parameters SHMMAX 524288 131072 2147483647 SHMMIN 1 1 1 SHMMNI 100 100 2000 FILE 0 100 64000 NMOUNT 0 4 256 NPROC 0 50 16000 NREGION 0 500 160000
Se recomienda establecer estos valores de la siguiente manera:
NOFILES
debería ser 4096 o 2048.
MAXUP
debería ser 2048.
Para hacer cambios al kernel, posicionarse con
cd
en el directorio
/etc/conf/bin
y utilizar
./idtune nombre
parámetro
para realizar los cambios. Por
ejemplo, para cambiar SEMMS
a un valor de
200
, ejecutar estos comandos como usuario
root
:
# cd /etc/conf/bin # ./idtune SEMMNS 200
Se recomienda optimizar el sistema, pero los valores a
utilizar dependerán del número de usuarios que acceden a la
aplicación o base de datos y el tamaño de la base de datos
(esto es, el pool de buffer utilizado). Lo siguiente modifica
los parámetros de kernel definidos en
/etc/conf/cf.d/stune
:
SHMMAX
(valor recomendado: 128MB) and
SHMSEG
(valor recomendado: 15). Estos
parámetros inciden en el motor de base de datos MySQL para la
creación de pools de buffers de usuario).
NOFILES
y MAXUP
deberían establecerse en por lo menos 2048.
MAXPROC
debería establecerse al menos en
3000/4000 (dependiendo del número de usuarios) o más.
También se recomienda el empleo de la siguiente fórmula para
calcular el valor para SEMMSL
,
SEMMNS
y SEMMNU
:
SEMMSL = 13
El 13 es lo que se halló como el mejor valor para Progress y MySQL.
SEMMNS
= SEMMSL
*
cantidad de servidores de bases de datos a ejecutarse en el
sistema.
Establecer SEMMNS
al valor de
SEMMSL
multiplicado por la cantidad de
servidores de bases de datos (máximo) que se ejecutan en el
sistema al mismo tiempo.
SEMMNU = SEMMNS
Establecer el valor de SEMMNU
al mismo
valor que tiene SEMMNS
. Posiblemente se
pueda establecer a un 75% del valor de
SEMMNS
, pero esta es una estimación
conservadora.
Se necesitará instalar al menos las "Bibliotecas de Desarrollo de Aplicaciones y Enlazador OpenServer de SCO" ("SCO OpenServer Linker and Application Development Libraries") o el Sistema de Desarrollo de OpenServer (OpenServer Development System) para ejecutar gcc. No se puede simplemente emplear el sistema de desarrollo GCC sin instalar alguno de los mencionados.
Antes se deberá obtener el paquete FSU Pthreads e instalarlo. Puede descargarse de http://moss.csc.ncsu.edu/~mueller/ftp/pub/PART/pthreads.tar.gz. También puede descargarse un paquete precompilado en ftp://ftp.zenez.com/pub/zenez/prgms/FSU-threads-3.14.tar.gz.
FSU Pthreads puede compilarse con SCO Unix 4.2 con tcpip, o
utilizando OpenServer 3.0 u OpenDesktop 3.0 (OS 3.0 ODT 3.0)
con el SCO Development System instalado utilizando un buen
port de GCC 2.5.x. Hay muchos problemas que ocurren sin un
buen port. El port para este producto necesita el SCO Unix
Development System. Sin él, no se tendrán las bibliotecas y
el enlazador que se necesitan. También se requiere el fichero
SCO-3.2v4.2-includes.tar.gz
. Este fichero
contiene los cambios a los ficheros de inclusión de SCO
Development que se necesitan para lograr compilar MySQL.
Habrá que reemplazar los ficheros de inclusión existentes en
el sistema con estos ficheros de cabecera modificados. Pueden
descargarse de
ftp://ftp.zenez.com/pub/zenez/prgms/SCO-3.2v4.2-includes.tar.gz.
Todo lo que se debería necesitar para compilar FSU Pthreads
es ejecutar GNU make. El
Makefile
en FSU-threads-3.14.tar.gz está
configurado para crear FSU-threads.
Se puede ejecutar ./configure en el
directorio threads/src
y seleccionar la
opción SCO OpenServer. Este comando copia
Makefile.SCO5
a
Makefile
. Luego, se ejecuta
make.
Para instalar en el directorio predeterminado
/usr/include
, iniciar sesión como
root
, luego posicionarse con
cd
en el directorio
thread/src
y ejecutar make
install.
Recordar que debe usarse GNU make para crear MySQL.
Nota: Si no se inicia
mysqld_safe como usuario
root
, se deberían obtener solamente por
defecto los 110 ficheros abiertos por proceso.
mysqld deja constancia de esto en el
fichero de registro (log).
Con SCO 3.2V4.2, se debería usar FSU Pthreads versión 3.14 o posterior. El siguiente comando configure debería funcionar:
CFLAGS="-D_XOPEN_XPG4" CXX=gcc CXXFLAGS="-D_XOPEN_XPG4" \ ./configure \ --prefix=/usr/local/mysql \ --with-named-thread-libs="-lgthreads -lsocket -lgen -lgthreads" \ --with-named-curses-libs="-lcurses"
Se pueden tener problemas con algunos ficheros de inclusión. En este caso, pueden hallarse nuevos ficheros de inclusión específicos para SCO en ftp://ftp.zenez.com/pub/zenez/prgms/SCO-3.2v4.2-includes.tar.gz.
Se debería descompactar este fichero en el directorio
include
del árbol de código fuente de
MySQL.
Notas relativas a SCO development:
-
MySQL debería detectar automáticamente FSU Pthreads y enlazar mysqld con
-lgthreads -lsocket -lgthreads
. -
Las bibliotecas de desarrollo SCO son reentrantes (compartidas por varios usuarios o procesos, una condición indispensable en la programación de multitarea) en FSU Pthreads. SCO afirma que sus bibliotecas de funciones son reentrantes, por lo tanto deben ser reentrantes con FSU Pthreads. FSU Pthreads en OpenServer intenta utilizar el esquema de SCO para hacer bibliotecas reentrantes.
-
FSU Pthreads (al menos la versión en ftp::/ftp.zenez.com) viene enlazada con GNU
malloc
. Si ocurren problemas con el uso de memoria, asegurarse de quegmalloc.o
está incluido enlibgthreads.a
ylibgthreads.so
. -
En FSU Pthreads, las siguientes llamadas de sistema son compatibles con pthreads:
read()
,write()
,getmsg()
,connect()
,accept(),
select()
, ywait()
. -
El parche CSSA-2001-SCO.35.2 (habitualmente listado como erg711905-dscr_remap security patch (version 2.0.0)) interrumpe los subprocesos FSU y deja inestable a mysqld. Hay que removerlo si se desea ejecutar mysqld en un ordenador con OpenServer 5.0.6.
-
SCO proporciona parches del sistema operativo OpenServer 5.0.x en ftp://ftp.sco.com/pub/openserver5.
-
Las soluciones a problemas de seguridad y
libsocket.so.2
para OpenServer 5.0.x están en ftp://ftp.sco.com/pub/security/OpenServer y ftp://ftp.sco.com/pub/security/sse. -
Soluciones de seguridad para Pre-OSR506. También, la solución para
telnetd
en ftp://stage.caldera.com/pub/security/openserver/ o ftp://stage.caldera.com/pub/security/openserver/CSSA-2001-SCO.10/ así comolibsocket.so.2
ylibresolv.so.1
con instrucciones para instalar en sistemas pre-OSR506.Probablemente sea una buena idea instalar estos parches antes de compilar o utilizar MySQL.
A partir de Legend/OpenServer 6.0.0 se dispone de subprocesos nativos y se eliminó el límite de 2GB para el tamaño de los ficheros.
Se recomienda utilizar el último release de producción de MySQL.
Se ha logrado compilar MySQL con el siguiente comando configure en UnixWare versión 7.1.x:
CC="cc" CFLAGS="-I/usr/local/include" \ CXX="CC" CXXFLAGS="-I/usr/local/include" \ ./configure --prefix=/usr/local/mysql \ --enable-thread-safe-client --with-berkeley-db=./bdb \ --with-innodb --with-openssl --with-extra-charsets=complex
Si se desea utilizar gcc, debe ser la versión 2.95.3 o posterior.
CC=gcc CXX=g++ ./configure --prefix=/usr/local/mysql
La versión de Berkeley DB que viene con UnixWare 7.1.4 u
OpenServer 6.0.0 no se utiliza cuando se compila MySQL. En su
lugar, MySQL utiliza su propia versión de Berkeley DB. El
comando configure necesita compilar tanto
una biblioteca estática como una dinámica en
src_directory
/bdb/build_unix/,
pero no utiliza la versión de Berkeley DB que MySQL necesita.
La solución es la siguiente.
-
Configurar para MySQL como de costumbre.
-
cd bdb/build_unix/
-
cp -p Makefile to Makefile.sav
-
Emplear las mismas opciones y ejecutar ../dist/configure.
-
Ejecutar gmake.
-
cp -p Makefile.sav Makefile
-
Posicionarse en el directorio principal o raíz de código fuente y ejecutar gmake.
Esto posibilita que tanto la biblioteca dinámica como la estática sean creadas y funcionen.
SCO proporciona parches de sistema operativo en ftp://ftp.sco.com/pub/unixware7 para UnixWare 7.1.1, ftp://ftp.sco.com/pub/unixware7/713/ para UnixWare 7.1.3, ftp://ftp.sco.com/pub/unixware7/714/ para UnixWare 7.1.4, y ftp://ftp.sco.com/pub/openunix8 para OpenUNIX 8.0.0.
SCO proporciona información sobre soluciones a problemas de seguridad en ftp://ftp.sco.com/pub/security/OpenUNIX para OpenUNIX y ftp://ftp.sco.com/pub/security/UnixWare para UnixWare.
En forma predeterminada, el máximo tamaño de fichero en un sistema UnixWare 7.1.1 es de 1GB, pero en UnixWare 7.1.4 es de 1TB con VXFS. Algunas utilidades del Sistema Operativo tienen una limitación de 2GB. El máximo tamaño posible para ficheros de UnixWare 7 es 1TB con VXFS.
En UnixWare 7.1.4 no se necesita ninguna acción en especial
para que soporte ficheros de gran tamaño, pero para
habilitarlo en versiones anteriores de UnixWare 7.1.x, hay que
ejecutar fsadm
.
# fsadm -Fvxfs -o largefiles / # fsadm / * Nota # ulimit unlimited # cd /etc/conf/bin # ./idtune SFSZLIM 0x7FFFFFFF ** Nota # ./idtune HFSZLIM 0x7FFFFFFF ** Nota # ./idbuild -B * Este comando debería informar "largefiles". ** El valor 0x7FFFFFFF representa "infinito" (sin límite) para esos valores.
Reiniciar el sistema empleando shutdown
.
por defecto, las entradas en
/etc/conf/cf.d/mtune
están establecidas
en:
Value Default Min Max ----- ------- --- --- SVMMLIM 0x9000000 0x1000000 0x7FFFFFFF HVMMLIM 0x9000000 0x1000000 0x7FFFFFFF SSTKLIM 0x1000000 0x2000 0x7FFFFFFF HSTKLIM 0x1000000 0x2000 0x7FFFFFFF
Se recomienda establecer estos valores como sigue:
SDATLIM 0x7FFFFFFF HDATLIM 0x7FFFFFFF SSTKLIM 0x7FFFFFFF HSTKLIM 0x7FFFFFFF SVMMLIM 0x7FFFFFFF HVMMLIM 0x7FFFFFFF SFNOLIM 2048 HFNOLIM 2048
Se recomienda ajustar el sistema, pero los valores de los
parámetros a emplear dependen del número de usuarios que
accederán a la aplicación o la base de datos y el tamaño de
la base de datos (es decir, el uso que se hará del buffer
pool -un caché de tablas y páginas-). Lo que sigue modifica
los parámetros del kernel definidos en
/etc/conf/cf.d/stune
:
SHMMAX
(valor recomendado: 128MB) y
SHMSEG
(valor recomendado: 15). Estos
parámetros influyen en la forma en que el motor de bases de
datos crea los buffer pools.
SFNOLIM
y HFNOLIM
deberían ser como máximo 2048.
NPROC
debería establecerse a por lo menos
3000/4000 (dependiendo del número de usuarios).
También se recomienda emplear la siguiente fórmula para
calcular los valores de SEMMSL
,
SEMMNS
, y SEMMNU
:
SEMMSL = 13
13 es el valor que se halló como el mejor para Progress y MySQL.
SEMMNS
= SEMMSL
*
cantidad de servidores de bases de datos a ejecutar en el
sistema.
Establecer SEMMNS
al valor de
SEMMSL
multiplicado por el número máximo
de servidores que se ejecutarán en el sistema al mismo
tiempo.
SEMMNU
= SEMMNS
Establecer el valor de SEMMNU
al mismo
valor que tiene SEMMNS
. Posiblemente se
pueda establecer a un 75% del valor de
SEMMNS
, pero esta es una estimación
conservadora.
Las mejoras clave en OpenServer 6 incluyen:
-
Soporte para ficheros más grandes, hasta 1 TB
-
Soporte para multiprocesadores incrementado de 4 a 32 procesadores.
-
Incremento del soporte de memoria hasta 64 GB.
-
Se extendió la potencia de UnixWare dentro de OpenServer 6.
-
Mejora dramática del rendimiento.
OpenServer 6.0.0 tiene las siguientes particularidades:
-
/bin
es para comandos que se comportan exactamente del mismo modo que OpenServer 5.0.x. -
/u95/bin
es para comandos que están más en conformidad con los estándares, por ejemplo el soporte para el Sistema de Ficheros Grandes o LFS (Large File System). -
/udk/bin
es para comandos que se comportan igual que en UnixWare 7.1.4. por defecto, el soporte para LFS.
La siguiente es una guía para configurar PATH en OpenServer
6. Si el usuario desea el OpenServer 5.0.x tradicional
entonces PATH
debería ser en primer lugar
/bin
. Si el usuario desea soporte para
LFS entonces el PATH debería ser
/u95/bin:/bin
. Si desea primariamente
soporte para UnixWare 7, debería ser
/udk/bin:/u95/bin:/bin:
.
Se recomienda utilizar el último release de producción de MySQL
En OpenServer Versión 6.0.x se ha logrado compilar MySQL con el siguiente comando configure:
CC="cc" CFLAGS="-I/usr/local/include" \ CXX="CC" CXXFLAGS="-I/usr/local/include" \ ./configure --prefix=/usr/local/mysql \ --enable-thread-safe-client --with-berkeley-db=./bdb \ --with-innodb --with-openssl --with-extra-charsets=complex \ --enable-readline
Si se desea emplear gcc, debe ser gcc 2.95.3 o posterior.
CC=gcc CXX=g++ ./configure --prefix=/usr/local/mysql
La versión de Berkeley DB que viene con UnixWare 7.1.4 u
OpenServer 6.0.0 no se utiliza cuando se compila MySQL. En su
lugar, MySQL utiliza su propia versión de Berkeley DB. El
comando configure necesita compilar tanto
una biblioteca estática como una dinámica en
src_directory
/bdb/build_unix/,
pero no utiliza la versión de Berkeley DB que MySQL necesita.
La solución es la siguiente.
-
Configurar para MySQL como de costumbre.
-
cd bdb/build_unix/
-
cp -p Makefile to Makefile.sav
-
Emplear las mismas opciones y ejecutar ../dist/configure.
-
Ejecutar gmake.
-
cp -p Makefile.sav Makefile
-
Posicionarse en el directorio principal o raíz de código fuente y ejecutar gmake.
Esto posibilita que tanto la biblioteca dinámica como la
estática sean creadas y funcionen. OpenServer 6.0.0 también
necesita parches para el árbol de código fuente MySQL y el
parche para config.guess
aplicado sobre
bdb/dist/config.guess
. Los parches pueden
descargarse de
ftp://ftp.zenez.com/pub/zenez/prgms/mysql-4.1.12-osr6-patches.tar.gz
y de
ftp://ftp.zenez.com/pub/zenez/prgms/mysql-4.x.x-osr6-patches.
Hay un fichero README
para obtener ayuda.
Los parches del sistema operativo OpenServer 6 son proporcionados por SCO en ftp://ftp.sco.com/pub/openserver6.
SCO proporciona información sobre soluciones a problemas de seguridad en ftp://ftp.sco.com/pub/security/OpenServer.
En forma predeterminada, el máximo tamaño de fichero en un sistema OpenServer 6.0.0 es de 1TB. Algunas utilidades del Sistema Operativo tienen una limitación de 2GB. El máximo tamaño posible para ficheros de UnixWare 7 es 1TB con VXFS o HTFS.
En forma predeterminada, las entradas en
/etc/conf/cf.d/mtune
están establecidas
en:
Value Default Min Max ----- ------- --- --- SVMMLIM 0x9000000 0x1000000 0x7FFFFFFF HVMMLIM 0x9000000 0x1000000 0x7FFFFFFF SSTKLIM 0x1000000 0x2000 0x7FFFFFFF HSTKLIM 0x1000000 0x2000 0x7FFFFFFF
Se recomienda configurar estos valores en la siguiente forma:
SDATLIM 0x7FFFFFFF HDATLIM 0x7FFFFFFF SSTKLIM 0x7FFFFFFF HSTKLIM 0x7FFFFFFF SVMMLIM 0x7FFFFFFF HVMMLIM 0x7FFFFFFF SFNOLIM 2048 HFNOLIM 2048
Se recomienda ajustar el sistema, pero los valores de los
parámetros a emplear dependen del número de usuarios que
accederán a la aplicación o la base de datos y el tamaño de
la base de datos (es decir, el uso que se hará del buffer
pool -un caché de tablas y páginas-). Lo que sigue modifica
los parámetros del kernel definidos en
/etc/conf/cf.d/stune
:
SHMMAX
(Valor recomendado: 128MB) y
SHMSEG
(Valor recomendado: 15). Estos
parámetros influyen en la forma en que el motor de bases de
datos crea los buffer pools.
SFNOLIM
y HFNOLIM
deberían tener un valor máximo de 2048.
NPROC
debería ser por lo menos 3000/4000
(dependiendo de la cantidad de usuarioa).
También se recomienda emplear la siguiente fórmula para
calcular los valores de SEMMSL
,
SEMMNS
, y SEMMNU
:
SEMMSL = 13
13 es el valor que se halló como el mejor para Progress y MySQL.
SEMMNS
= SEMMSL
*
cantidad de servidores de bases de datos a ejecutar en el
sistema.
Establecer SEMMNS
al valor de
SEMMSL
multiplicado por el número máximo
de servidores que se ejecutarán en el sistema al mismo
tiempo.
SEMMNU
= SEMMNS
Establecer el valor de SEMMNU
al mismo
valor que tiene SEMMNS
. Posiblemente se
pueda establecer a un 75% del valor de
SEMMNS
, pero esta es una estimación
conservadora.
MySQL emplea varios ficheros abiertos. Debido a esto, se
debería agregar al fichero CONFIG.SYS
algo
como lo siguiente:
SET EMXOPT=-c -n -h1024
Si no se hace así, se pueden producir los siguientes errores:
File 'xxxx
' not found (Errcode: 24)
Al emplear MySQL en OS/2 Warp 3, se requiere el FixPack 29 o posterior. Con OS/2 Warp 4, se necesita el FixPack 4 o posterior. Este es un requisito de la biblioteca Pthreads. MySQL Debe ser instalado en una partición con un tipo que soporte nombres de fichero largos, tal como HPFS, FAT32, y otros.
El script INSTALL.CMD
debe ejecutarse desde
la línea de comandos de OS/2, CMD.EXE
, y
podría no funcionar con shells de remplazo como
4OS2.EXE
.
El script scripts/mysql-install-db
ha
cambiado su nombre. Se llama install.cmd
y
es un script REXX, el cual establece la configuración de
seguridad por defecto de MySQL y crea en el Workplace Shell
[nombre que recibe el sistema de ventanas de OS/2] los íconos
de MySQL.
El soporte para módulo dinámico se compila pero no está completamente testeado. Los módulos dinámicos se deben compilar empleando la biblioteca de tiempo de ejecución de Pthreads.
gcc -Zdll -Zmt -Zcrtdll=pthrdrtl -I../include -I../regex -I.. \ -o example udf_example.cc -L../lib -lmysqlclient udf_example.def mv example.dll example.udf
Nota: debido a limitaciones en
OS/2, el nombre (sin incluir extensión) de un módulo UDF no
debe exceder de 8 caracteres. Los módulos se almacenan en el
directorio /mysql2/udf
; el script
safe-mysqld.cmd
coloca este directorio en la
variable de entorno BEGINLIBPATH
. Al utilizar
módulos UDF, se ignora cualquier extensión que se especifique.
Se asume .udf
. Por ejemplo, en Unix, el
módulo compartido podría llamarse
example.so
y la carga de una función
contenida en él se haría así:
mysql> CREATE FUNCTION metaphon RETURNS STRING SONAME 'example.so';
En OS/2, el modulo se llamaría
example.udf
, pero la extensión no se
especifica:
mysql> CREATE FUNCTION metaphon RETURNS STRING SONAME 'example';