MySQL Tunning
C:\ProgramData\MySQL\MySQL Server 5.6
Dentro de [mysqld]
innodb_buffer_pool_size=1024M
wait_timeout = 350
Por defecto mysql cierra una conexión después de 8 horas sin recibir ninguna petición del cliente y sin que el cliente sea notificado de las mismas. En una aplicación web puede ser normal abrir un pool de conexiones desde un servidor (Tomcat p.ej) de forma que siempre haya conexiones de sobra sin usar. Esto en la práctica se traduce en que debemos hacer una de dos: - bien reconfigurar mysql (/etc/mysql/my.cnf) para aumentar el wait_timeout - o bien "refrescar" periodicamente las conexiones del pool para resetear el contador interno de timeout de mysql.
Los servidores de aplicaciones suelen tener también parámetros de configuración que nos ayudan: P.ej, Tomcat incluye también un sistema automático de pool de conexiones que en principio soluciona el problema. En la práctica lo minimiza pero aleatoriamente cada 2 o 3 semanas, por experiencia del que escribe estas líneas, vuelve a fallar (Tomcat versión 5).
Por tanto puede ser una buena opción el desabilitar el wait_timeout editando /etc/mysql/my.conf añadiendo la linea wait_timeout=0.
max_allowed_packet = 20M
En algunos casos se desea grabar archivos en MySQL. Por defecto el motor esta configurado para almacenar archivos con un tamaño máximo de 1MB, este valor se encuentra almacenado en la variable max_allowed_packets la cual determina el tamaño máximo de un paquete. El buffer de paquete se inicializa en net_buffer_lenght , pero puede crecer hasta max_allowed_packet cuando se necesita. Por defecto tiene un valor pequeño de 1MB. A partir de la versión 4 de MySQL, se puede incrementar el valor hasta 1 GB. El valor debe ser múltiplo de 1024. Para cambiar el valor solo se debe ejecutar un comando, es algo muy simple. En este caso se asigna un valor de 100MB
mysql>
SET
GLOBAL
max_allowed_packet=100*1024*1024;
Query OK, 0
rows
affected (0.00 sec)
Después de ejecutar el comando si deseas verificar el valor de la variable max_allowed_packet se debe ejecutar el siguiente comando:
mysql> show variables
like
'max_allowed_packet'
;
+
--------------------+---------+
| Variable_name | Value |
+
--------------------+---------+
| max_allowed_packet | 1048576 |
+
--------------------+---------+
1 row
in
set
(0.00 sec)
Se debe reiniciar el servicio de MySQL y listo ya puedes almacenar archivos con tamaño máximo de 100MB.
skip-name-resolve
deshabilita la resolución de nombres, por lo que veremos al iniciar MySQL Warnings como los siguientes:
101202 15:43:44 [Warning] 'user' entry '@penny.systemadmin.es' ignored in --skip-name-resolve mode.
Nos esta indicando que no podrá aplicar los GRANTs relacionados con nombres al no poder resolver las IPs de los clientes: deberemos usar la IP en lugar del nombre en los GRANTs.
Al conectarse un cliente, primero va a buscar la inversa de la IP que se ha conectado al resolver, esperará al timeout y luego dejará seguir. En el caso de una aplicación web un tráfico moderado, veremos que se empezarán a colapsar tanto MySQL como Apache ya que se acumularán conexiones esperando el timeout del resolver.
Desactivación de validación de agrupamiento ONLY_FULL_GROUP_BY verificar que exista en el archivo de configuracion la siguiente linea activa:
sql-mode = "STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"