Limite de conexões simultâneas no MySQL
Çap et- 24
Vamos tratar sobre os limites de conexões no MySQL. Apesar de ser algo relativamente fácil, é importante saber o conceito, pois isso influi tanto no ambiente de trabalho ou na prova de certificação que encontrei em alguns dump’s.
Em qualquer aplicação Web ou correlatas, é comum identificar a falha de acesso com esta:
‘User XXX already has more than max_user_connections active connections’
Motivo: O usuário excedeu o limite de conexões estabelecida no servidor.
Como identificar o limite? Abra o seu arquivo my.cnf ou my.ini e procure pelas variáveis:
1
2
3
4
|
[mysqld]
max_connections = 1000
max_user_connections = 200
|
Ou através de uma conexão com o MySQL, execute:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 1000 |
+-----------------+-------+
mysql> show variables like 'max_user_connections';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| max_user_connections | 200 |
+----------------------+-------+
|
Ou seja, com base nos valores acima é possível apontar que o limite de conexões com o servidor ‘max_connections’ é de 1000, enquanto o limite de conexões de um único usuário ‘max_user_connections’ é de 200.
Um cenário que já me gerou dúvidas e é comum nos ambientes:
1
2
3
4
|
[mysqld]
max_connections = 1000
max_user_connections = 0
|
Uma vez que o ‘max_user_connections’ esteja com o valor 0, você passa para a instância que os usuários, independente da quantidade devem respeitar o limite de acessos ao servidor, que neste caso é 1000.
Caso um ou mais usuários alcancem o limite determinado no ‘max_connections’, será retornado o erro de Too many Connections nas próximas tentativas.
Outra forma de definir o limite de conexão a um usuário é através da tabela user do mysql, ou pelo grant, como podemos ver abaixo:
– Utilizando o grant, primeiro crio um usuário de teste e depois adiciono uma permissão qualquer referenciando no final o with max_user_connections 10:
Para consultar o valor do ‘max_user_connections’, basta realizar um select na mysql.user:
É possível alterar este valor direto na tabela user, onde a vantagem é que para o novo valor entrar em vigor, não é necessário reiniciar o servidor MySQL:
Caso você altere a variável max_user_connections no my.cnf ou my.ini, é necessário reiniciar o MySQL para a alteração entrar em vigor, já que ela não é uma variável dinâmica.