En ocasiones nos encontramos con el problema de uso escesivo de conexiones en nuestros servidor mysql, la primera idea es aumentar el numero maximo de estas. Sin embargo cuando el problema es un bug o un DoS esto no nos conduce a ninguan parte ya que por muchas ocnexiones que habilitemos siempre serán consumidas en su totalidad.
Para poder delimitar el origen del mal, lo mejor es limitar los recursos que le permitimos utilizar a cada uno de los usuarios de nuestra base de datos, generalmente csda usuario se corresponde con una aplicación.
mysql> GRANT ALL ON customer.* TO 'francis'@'localhost' -> IDENTIFIED BY 'frank' -> WITH MAX_QUERIES_PER_HOUR 20 -> MAX_UPDATES_PER_HOUR 10 -> MAX_CONNECTIONS_PER_HOUR 5 -> MAX_USER_CONNECTIONS 2;
Creo que una vez se ve el comando no requiere mas comentarios.
El contador actual por hora de uso de recursos puede reiniciarse
globalmente para todas las cuentas, o individualmente para una
cuenta dada:
- Para reiniciar los contadores actuales a cero para todas las
cuentas, ejecute el comandoFLUSH
. Los contadores también pueden
USER_RESOURCES
reiniciarse recargando las tablas de permisos (por ejemplo,k
con un comandoFLUSH PRIVILEGES
o
mysqladmin reload). - Los contadores para una cuenta individual pueden ponerse a
cero cambiando cualquiera de sus límites. Para hacerlo, use
GRANT USAGE
como se ha descrito
anteriormente y especifique un valor límtite igual al valor
que tiene la cuenta en ese momento.
Los reinicios de contadores no afectan el límite
MAX_USER_CONNECTIONS
.
Todos los contadores empiezan a cero cuando el servidor arranca;
los contadores no se guardan al reiniciar.
El manual completo lo tenemos en: http://dev.mysql.com/doc/refman/5.0/es/user-resources.html