Una forma de limitar los recursos de los servidores MySQL es
asignar a la variable de sistema
max_user_connections
un valor distinto de
cero. Sin embargo,este método es estrictamente global, y no
está permitido para la administración de cuentas individuales.
Además, limita sólo el número de conexiones simultáneas
hechas usando una sóla cuenta, y no lo que un cliente puede
hacer una vez conectado. Ambos tipos de control son interesantes
para muchos administradores de MySQL, particularmente aquéllos
que trabajan en ISPs.
En MySQL 5.0, puede limitar los siguientes recursos de servidor para cuentas individuales:
El número de consultas que una cuenta puede realizar por hora
El número de actualizaciones que una cuenta puede hacer por hora
El número de veces que una cuenta puede conectar con el servidor por hora
Cualquier comando que un cliente puede realizar cuenta en el límite de consultas. Sólo los comandos que modifiquen la base de datos o las tablas cuentan en el límite de actualizaciones.
Desde MySQL 5.0.3, es posible limitar el número de conexiones simultáneas al servidor por cuenta.
Una cuenta en este contexto es un registro en la tabla
user
. Cada cuenta se identifica
unívocamente por los valores de las columnas
User
y Host
.
Como prerrequisito para usar esta característica, la tabla
user
en la base de datos
mysql
debe contener las columnas relacionadas
con el recurso. Los límites de recursos se guardan en las
columnas max_questions
,
max_updates
,
max_connections
, y
max_user_connections
. Si su tabla
user
no tiene estas columnas, debe
actualizarla; consulte Sección 2.10.2, “Aumentar la versión de las tablas de privilegios”.
Para cambiar el límite de recursos con un comando
GRANT
use la cláusula
WITH
que nombra cada recurso a ser limitado y
un contador por hora indicando el valor límite. Por ejemplo,
para crear una nueva cuenta que pueda acceder a la base de datos
customer
, pero sólo de forma limitada,
utilice este comando:
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;
No todos los tipos de límites necesitan nombrarse en la
cláusula WITH
, pero los nombrados pueden
presentarse en cualquier orden. El valor para cada límite por
hora debe ser un entero representando el contador por hora. Si
el comando GRANT
no tiene cláusula
WITH
, los límites se inicializan con el
valor por defecto de cero (o sea, sin límite). Para
MAX_USER_CONNECTIONS
, el límite es un entero
indicando el máximo número de conexiones simultáneas que la
cuenta puede hacer en cualquier momento. Si el límite asignado
es el valor por defecto de cero, la variable de sistema
max_user_connections
determina el número de
conexiones simultáneas para la cuenta.
Para inicializar o cambiar los límites de una cuenta existente,
use un comando GRANT USAGE
a nivel global
(ON *.*
). El siguiente comando cambia el
límite de consultas para francis
a 100:
mysql> GRANT USAGE ON *.* TO 'francis'@'localhost' -> WITH MAX_QUERIES_PER_HOUR 100;
Este comando deja los permisos existentes de la cuenta inalterados y modifica sólo los valores cuyo límite se especifica.
Para eliminar un límite existente, ponga su valor a cero. Por
ejemplo, para eliminar el límite de cuántas veces por hora
puede conectar francis
, use este comando:
mysql> GRANT USAGE ON *.* TO 'francis'@'localhost' -> WITH MAX_CONNECTIONS_PER_HOUR 0;
El conteo del uso de recursos toma lugar cuando una cuenta tiene un límite distinto a cero para el uso de cualquier recurso.
Mientras el servidor está en ejecución, cuenta el número de veces que cada cuenta usa los recursos. Si una cuenta llega a su límite en el número de conexiones en la última hora, se rechazan cualquier intento de conexión mientras dure la hora. De forma similar, si la cuenta llega a su límite de consultas o actualizaciones, consultas o actualizaciones adicionales se rechazan mientras dure la hora. En cualquier caso, se muestra el mensaje de error apropiado
El conteo de recursos se hace por cuenta, no por cliente. Por ejemplo, si una cuenta tiene un límite de 50 consultas, no puede incrementar el límite a 100 haciendo dos conexiones simultáneas al servidor. Las consultas de ambas conexiones se cuentan juntas.
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 comando FLUSH
USER_RESOURCES
. Los contadores también pueden
reiniciarse recargando las tablas de permisos (por ejemplo,k
con un comando FLUSH 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.
É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.