Límite de conexiones en MySQL
MySQL tiene un límite de conexiones simultáneas que acepta, que por defecto en las versiones actuales está en 150. En realidad, 151, puesto que esta 1 está reservada para el administrador poder conectar en local y ver qué está pasando, y el limite por defecto de los archivos abiertos es de 1024.
Ingresamos a mysql:
mysql -u root -p
Podemos consultar el límite de conexiones y de archivos abiertos, tal y como se muestra en el siguiente ejemplo:
mysql> show variables like “max_connections”;
+——————+——-+
| Variable_name | Value |
+——————+——-+
| max_connections | 151 |
+——————+——-+
1 row in set (0.00 sec)
mysql> show variables like ‘%open_files_limit%’;
+——————+——-+
| Variable_name | Value |
+——————+——-+
| open_files_limit | 1024 |
+——————+——-+
1 row in set (0,00 sec)
Si tenemos muchas consultas a nuestra base de datos es probable que el limite por defecto sea poco y como consecuencia la base de datos comenzara a rechazar las conexiones.
Para aumentarlo debemos colocarle las variables max_connections y max_user_connections en el archivo /etc/my.cnf en la sección [mysqld] si no existe esa sección la agregamos, en este caso se las colocamos en 500:
# vim /etc/my.cnf
[mysqld]
port=3306
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
max_connections = 500
max_user_connections = 500
También debemos editar el archivo /etc/security/limits.conf y agregar las siguientes lineas:
vim /etc/security/limits.conf
* hard nofile 8192
* soft nofile 4096
Creamos la carpeta mysqld.service.d y dentro de esta el archivo limits.conf:
# mkdir /etc/systemd/system/mysqld.service.d/
#vim /etc/systemd/system/mysqld.service.d/lmits.conf
Agregamos el siguiente contenido al archivo /etc/systemd/system/mysqld.service.d/lmits.conf :
[Service]
LimitNOFILE=infinity
LimitMEMLOCK=infinity
Luego reiniciamos mysql:
#systemctl restart mysqld
Ingresamos de nuevo a mysql:
mysql -u root -p
Consultamos el límite de conexiones y de archivos abiertos nuevamente :
mysql> show variables like ‘%open_files_limit%’;
+——————+——-+
| Variable_name | Value |
+——————+——-+
| open_files_limit | 65536 |
+——————+——-+
1 row in set (0,00 sec)
mysql> show variables like ‘%max_connecti%’;
+—————–+——-+
| Variable_name | Value |
+—————–+——-+
| max_connections | 500 |
+—————–+——-+
1 row in set (0,00 sec)
Ahora podemos verificar que la variable max_connections acepta hasta 500 conexiones, y open_files_limit acepta hasta 65536 archivos abiertos.
Adicionalmente tenemos un par de opciones para ver el número de conexiones actuales:
mysql> SHOW STATUS WHERE variable_name = ‘Threads_connected’;
O directamente,
mysql> SHOW PROCESSLIST;
mysql> SHOW STATUS WHERE variable_name = ‘Threads_connected’;
+——————-+——-+
| Variable_name | Value |
+——————-+——-+
| Threads_connected | 1 |
+——————-+——-+
1 row in set (0,01 sec)
mysql> SHOW PROCESSLIST;
+—-+——+———–+——+———+——+——-+——————+
| Id | User | Host | db | Command | Time | State | Info |
+—-+——+———–+——+———+——+——-+——————+
| 2 | root | localhost | NULL | Query | 0 | init | SHOW PROCESSLIST |
+—-+——+———–+——+———+——+——-+——————+
1 row in set (0,00 sec)
http://helloit.es/2011/07/limite-de-conexiones-en-mysql/
https://codepoets.co.uk/2015/mysql-max_connections-stuck-on-214/
https://www.electrictoolbox.com/update-max-connections-mysql/
https://dba.stackexchange.com/questions/86987/mysql-open-files-limit-cannot-change-this-variable
Responder