Lo primero que debes hacer es ejecutar esta consulta:
SELECT user,host FROM mysql.user
WHERE super_priv='Y' AND
CONCAT(user,'@',host) <> 'root@localhost';
Esto mostrará una lista de todos los usuarios que tienen el privilegio SUPER . La mayoría de los usuarios que realizan procesamiento de DB relacionado con la aplicación no requieren este privilegio. De acuerdo con la documentación de MySQL , las personas con privilegios SUPER pueden hacer lo siguiente:
- Ejecute CHANGE MASTER TO para controlar las coordenadas de replicación
- MATAR o
mysqladmin kill
matar hilos pertenecientes a otras cuentas
- PURGAR REGISTROS BINARIOS para eliminar sistemáticamente registros binarios
- Realizar cambios de configuración usando SET GLOBAL para modificar las variables globales del sistema
- comando de depuración de mysqladmin
- habilitar o deshabilitar el registro
- realizar actualizaciones incluso si la variable del sistema * read_only * está habilitada
- iniciar y detener la replicación en servidores esclavos
- especificación de cualquier cuenta en el atributo DEFINER de programas almacenados y vistas
- AQUÍ ES 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 del sistema max_connections .
Deberá iniciar sesión como root @ localhost y revocar el privilegio SUPER de la siguiente manera:
UPDATE mysql.user SET super_priv='N'
WHERE super_priv='Y' AND
CONCAT(user,'@',host) <> 'root@localhost';
FLUSH PRIVILEGES;
Una vez que haga esto, siempre que todos los usuarios inunden las conexiones mysql, solo root@localhost
pueden iniciar sesión. Después de todo, si todos y su abuela tuvieran el privilegio SUPER, esto impediría root@localhost
conectarse antes que todos los demás. Si max_ connections está en 200 y necesita elevarlo a 300 sin tener que reiniciar mysqld, puede aumentar dinámicamente max_ connections con este comando:
mysql> SET GLOBAL max_connections = 300;
Eso permitirá que haya más conexiones efectivas de inmediato, pero no solo aumente arbitrariamente el número por capricho. Debe asegurarse de que mysql tenga suficiente RAM para acomodar el aumento.
PRECAUCIÓN: si cambia max_ connections dinámicamente a 300, colóquelo en /etc/my.cnf
[mysqld]
max_connections=300
Puede ejecutar mysqltuner.pl en su servidor de base de datos MySQL. Si no lo tiene, ejecute lo siguiente:
cd
wget mysqltuner.pl
perl mysqltuner.pl
La tercera línea debajo de 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)
Ver los 5.4M por hilo? Eso se multiplica por max_ connections. En este ejemplo, eso sería un máximo de aproximadamente 10.8G 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 le da a dichos usuarios la oportunidad de mitigar la inundación mysqld con DB Connections.
wget mysqltuner.pl
descargó index.html, pero era un archivo perl, así que lo renombré a mysqltuner.pl y el siguiente cmdperl mysqltuner.pl
funcionó.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 intente reiniciar MySQL después de esta configuración.También ejecute el
Flush status;
comando en el servidor MySQl para reducir este valor.Espero que estas sugerencias ayuden.
fuente
Compruebe si su disco está lleno, esto puede causar el mismo error:
le mostrará el espacio restante en cada partición, probablemente tenga que verificar la partición raíz
/
(o / var / en caso de que tenga una partición adicional para esto):fuente