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

https://support.plesk.com/hc/en-us/articles/213393029-MySQL-values-open-files-limit-and-max-connections-are-not-applied