Saltar a contenido

Incrementar el número de archivos abiertos por la base de datos

1. Descripción del error

No se pueden crear nuevas instancias y en los archivos de log del nodo de cómputo aparece el siguiente mensaje de error:

Can't connect to MySQL server on ... ([Errno 24] Too many open files)

Para solucionar el problema es necesario reviar y ajustar el valor de los parámetros:

  • open_files_limit
  • innodb_open_files

En la documentación oficial de MariaDB obtenemos la siguiente información sobre el parámetro open_files_limit:

  • Description: The number of file descriptors available to MariaDB. If you are getting the Too many open files error, then you should increase this limit. If set to 0, then MariaDB will calculate a limit based on the following:

    MAX(max_connections5, max_connections +table_open_cache2)

    MariaDB sets the limit with setrlimit. MariaDB cannot set this to exceed the hard limit imposed by the operating system. Therefore, you may also need to change the hard limit. There are a few ways to do so.

  • If you are using mysqld_safe to start mariadbd, then see the instructions at mysqld_safe: Configuring the Open Files Limit.

  • If you are using systemd to start mysqld, then see the instructions at systemd: Configuring the Open Files Limit.
  • Otherwise, you can change the hard limit for the mysql user account by modifying /etc/security/limits.conf. See Configuring Linux for MariaDB: Configuring the Open Files Limit for more details.
  • Commandline: --open-files-limit=count
  • Scope: Global
  • Dynamic: No
  • Data Type: numeric
  • Default Value: Autosized (see description)
  • Range: 0 to 4294967295

En la documentación oficial de MariaDB obtenemos la siguiente información sobre el parámetro innodb_open_files:

  • Description: Maximum .ibd files MariaDB can have open at the same time. Only applies to systems with multiple XtraDB/InnoDB tablespaces, and is separate to the table cache and open_files_limit. The default, if innodb_file_per_table is disabled, is 300 or the value of table_open_cache, whichever is higher. It will also auto-size up to the default value if it is set to a value less than 10.
  • Commandline: --innodb-open-files=#
  • Scope: Global
  • Dynamic: No
  • Data Type: numeric
  • Default Value: autosized
  • Range: 10 to 4294967295

2. Solución

Nos conectamos al contenedor de galera.

lxc-attach infra1_galera_container-053c7592 

Hay que incrementar el valor del parámetro LimitNOFILE siguiendo los pasos de la documentación oficial.

Editamos el archivo de configuración del servicio de mariadb:

sudo systemctl edit mariadb.service

Modificamos el valor del parámetro LimitNOFILE:

[Service]
LimitNOFILE= 9999999
...

Reiniciamos el servicio de mariadb para que se apliquen los cambios:

systemctl restart mariadb

Editamos el archivo de configuración de MariaDB.

nano /etc/mysql/mariadb.cnf 

En la configuración de MariaDB, el valor de open-files-limit es 9999999 por defecto.

open-files-limit = 9999999

Buscamos el valor de innodb-open-files y si no existe lo añadimos con el valor 9999999.

innodb-open-files = 9999999

Una vez modificados los valores, reiniciamos el servicio de MariaDB.

systemctl restart mariadb

Podemos comprobar el estado de las variables acciendo a MariaDB y consultado su valor con las siguientes consultas.

SHOW GLOBAL VARIABLES LIKE 'open_files_limit';
SHOW GLOBAL VARIABLES LIKE 'innodb_open_files';

3. Referencias