El tutorial o código que encontrarás en este post es la resolución más eficiente y válida que encontramos a tu duda o dilema.
Solución:
Lo primero que debe hacer es ejecutar esta consulta:
SELECT user,host FROM mysql.user
WHERE super_priv='Y' AND
CONCAT(user,'@',host) <> '[email protected]';
Esto mostrará una lista de todos los usuarios que tienen SÚPER privilegio. La mayoría de los usuarios que realizan procesamientos de bases de datos relacionados con aplicaciones no requieren este privilegio. De acuerdo con la documentación de MySQL, aquellos con privilegio SUPER pueden hacer lo siguiente:
- Ejecute CHANGE MASTER TO para controlar las coordenadas de replicación
- MATAR o
mysqladmin kill
para matar hilos pertenecientes a otras cuentas - PURGAR REGISTROS BINARIOS para eliminar sistemáticamente registros binarios
- Realice cambios de configuración utilizando SET GLOBAL para modificar las variables del sistema global
- comando de depuración de mysqladmin
- habilitar o deshabilitar el registro
- realizar actualizaciones incluso si la variable de sistema *read_only* está habilitada
- iniciar y detener la replicación en servidores esclavos
- especificación de cualquier cuenta en el DEFINER attribute de programas almacenados y vistas
- AQUÍ ESTÁ EL MÁS IMPORTANTE PARA SU PROBLEMA: : Le permite conectarse (una vez) incluso si se alcanza el límite de conexión controlado por la variable de sistema max_connections.
Deberá iniciar sesión como [email protected] y revocar el privilegio SUPER de la siguiente manera:
UPDATE mysql.user SET super_priv='N'
WHERE super_priv='Y' AND
CONCAT(user,'@',host) <> '[email protected]';
FLUSH PRIVILEGES;
Una vez que haga esto, cada vez que todos los usuarios inunden las conexiones mysql, solo [email protected]
puede iniciar sesión. Después de todo, si todos y su abuela tuvieran SÚPER privilegios, esto impediría [email protected]
de conectarse antes que los demás. Si max_connections está en 200 y necesita aumentarlo a 300 sin tener que reiniciar mysqld, puede aumentar dinámicamente el max_conexiones con este comando:
mysql> SET GLOBAL max_connections = 300;
Eso permitirá más conexiones efectivas de inmediato, pero no aumente arbitrariamente el número por capricho. Debe asegurarse de que mysql tenga suficiente RAM para acomodar el aumento.
ADVERTENCIA: si cambia max_connections dinámicamente a 300, póngalo en /etc/my.cnf
[mysqld]
max_connections=300
Puede ejecutar mysqltuner.pl en su servidor MySQL DB. Si no lo tiene, ejecute lo siguiente:
cd
wget mysqltuner.pl
perl mysqltuner.pl
La tercera línea bajo Performance Metrics tiene esto
-------- Performance Metrics -------------------------------------------------
[--] Up for: 8d 20h 46m 22s (8M q [10.711 qps], 129K conn, TX: 90B, RX: 19B)
[--] Reads / Writes: 4% / 96%
[--] Total buffers: 2.1G global + 5.4M per thread (2000 max threads)
[OK] Maximum possible memory usage: 12.6G (80% of installed RAM)
¿Ves los 5,4 millones por hilo? Eso se multiplica por max_connections. En este ejemplo, sería un máximo de aproximadamente 10,8 G de RAM. Por lo tanto, cada vez que aumente max_connections, debe ejecutar mysqltuner.pl y verificar si está presionando el sistema operativo para obtener demasiada memoria.
En cualquier caso, limitar quién tiene privilegios SUPER brinda a dichos usuarios la oportunidad de mitigar la inundación de mysqld con conexiones DB.
- la variable global
max_connections
determina el número máximo de conexiones simultáneas a MySQL. Asegúrese de tener un valor alto para esta variable. Puede aumentar este valor a 300 o 400 e intentar reiniciar MySQL después de esta configuración. - Diseñe su aplicación de manera que una conexión MySQL se mantenga abierta durante un período de tiempo muy corto.
- También debe verificar que el código del cliente no esté usando conexiones persistentes (como mysql_pconnect()) incorrectamente.
también ejecutar Flush status;
comando en el servidor MySQl para reducir este valor.
Espero que estas sugerencias ayuden.
Te mostramos reseñas y puntuaciones
No se te olvide dar visibilidad a esta reseña si te fue de ayuda.