El servidor Ubuntu 16.04 MySql open_file_limit no será superior a 65536

16

Estoy ejecutando Ubuntu 16.04 Server en XenServer y tengo un problema con el límite de archivos abiertos de MySql.

Esto es lo que he hecho hasta ahora:

sudo nano /etc/security/limits.conf (referencia)

* soft nofile 1024000
* hard nofile 1024000
* soft nproc 102400
* hard nproc 102400
mysql soft nofile 1024000
mysql hard nofile 1024000

sudo nano /etc/init/mysql.conf (referencia)

limit nofile 1024000 1024000
limit nproc 102400 102400

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf (referencia)

[mysqld_safe]
open_files_limit = 1024000


[mysqld]
open_files_limit = 1024000

Cuando lo anterior no funcionó, pasé a lo siguiente:

sudo nano /etc/sysctl.conf

fs.file-max = 1024000

sudo nano /etc/pam.d/common-session

session required pam_limits.so

sudo nano /etc/pam.d/common-session-noninteractive

session required pam_limits.so

sudo nano /lib/systemd/system/mysql.service

LimitNOFILE=infinity
LimitMEMLOCK=infinity

Cuando inicio sesión en mi cuenta de usuario, todo parece estar bien:

ulimit -Hn
1024000
ulimit -Sn
1024000

Si inicio sesión como mysql, también se ve bien:

mysql@server:~$ ulimit -Hn
1024000
mysql@server:~$ ulimit -Sn
1024000

Sin embargo, cuando miro el proceso:

ps -ef | grep mysql
cat /proc/1023/limits | grep open
Max open files  65536 65536 files   

O cuando lo miro en MySql:

mysql> show global variables like 'open%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 65536 |
+------------------+-------+

Desde los registros (/var/log/mysql/error.log):

2016-07-25T05: 44: 35.453668Z 0 [Advertencia] No se pudo aumentar el número de max_open_files a más de 65536 (solicitud: 1024000)

Estoy completamente sin ideas aquí. Al principio comencé con open_files_limit en 1024, y uno de los anteriores debe haberlo cambiado, pero necesito que vaya más alto. Ya estoy llegando a este límite, ya que tengo muchas bases de datos y tablas que a veces tienen muchas particiones.

Incluso he probado números menos agresivos que 1024000, sin suerte.

¿Alguna idea por ahí?

J Pierret
fuente

Respuestas:

24

Esto funcionó para mí en Ubuntu Xenial 16.04:

Crea el directorio /etc/systemd/system/mysql.service.d

Poner en /etc/systemd/system/mysql.service.d/override.conf:

[Service]
LimitNOFILE=1024000

Ahora ejecuta

systemctl daemon-reload
systemctl restart mysql.service

Sí, de hecho, LimitNOFILE=infinityparece establecerlo en 65536.

Puede validar lo anterior después de iniciar MySQL haciendo:

cat /proc/$(pgrep mysql)/limits | grep files
Jeroen Vermeulen - MageHost
fuente
1
Desde que vine aquí por primera vez, pero me sentí un poco descontento con el ajuste de algunos archivos del sistema, encontré otro hilo que explicaba cómo arreglar sin arriesgar el archivo de servicio sobrescrito en la próxima actualización: stackoverflow.com/questions/27849331/…
Thomas Urban
Gracias @cepharum. Actualicé la respuesta. De hecho, ya tuvimos problemas en nuestros servidores porque actualizamos el archivo repositorio /lib/systemd/system/mysql.service. Así que ya pasamos al método al que se refirió. Olvidé actualizar mi respuesta aquí. Gracias de nuevo por el recordatorio.
Jeroen Vermeulen - MageHost
Este comando no funciona: cat / proc / $ (pgrep mysql) / limits | grep files
Basil A
1
@BasilA Este comando solo funciona una vez que MySQL se está ejecutando. Solo lo probé en Ubuntu 16.04.
Jeroen Vermeulen - MageHost