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
          <benchmarks@mysql.com> 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”.
        
É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.

