Il server Ubuntu 16.04 MySql open_file_limit non supererà 65536


16

Sto eseguendo Ubuntu 16.04 Server su XenServer e sto riscontrando un problema con il limite di file aperti di MySql.

Ecco cosa ho fatto finora:

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

* 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 (riferimento)

limit nofile 1024000 1024000
limit nproc 102400 102400

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

[mysqld_safe]
open_files_limit = 1024000


[mysqld]
open_files_limit = 1024000

Quando quanto sopra non ha funzionato, sono passato a quanto segue:

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

Quando accedo al mio account utente tutto sembra a posto:

ulimit -Hn
1024000
ulimit -Sn
1024000

Se eseguo l'accesso come mysql, sembra anche buono:

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

Tuttavia, quando guardo il proc:

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

O quando lo guardo in MySql:

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

Dai registri (/var/log/mysql/error.log):

25/07/2016 T05: 44: 35.453668Z 0 [Avvertenza] Impossibile aumentare il numero di max_open_files a più di 65536 (richiesta: 1024000)

Sono completamente senza idee qui. All'inizio ho iniziato con open_files_limit a 1024, e uno dei precedenti deve averlo cambiato, ma ho bisogno che vada più in alto. Sto già raggiungendo questo limite poiché ho molti database e tabelle che a volte hanno molte partizioni.

Ho anche provato numeri meno aggressivi di 1024000, senza fortuna.

Qualche idea là fuori?

Risposte:


24

Questo ha funzionato per me su Ubuntu Xenial 16.04:

Crea la dir /etc/systemd/system/mysql.service.d

Inserisci /etc/systemd/system/mysql.service.d/override.conf:

[Service]
LimitNOFILE=1024000

Ora esegui

systemctl daemon-reload
systemctl restart mysql.service

Sì, in LimitNOFILE=infinityrealtà sembra effettivamente impostarlo su 65536.

Puoi convalidare quanto sopra dopo aver avviato MySQL facendo:

cat /proc/$(pgrep mysql)/limits | grep files

1
Da quando sono venuto qui per primo ma mi sono sentito un po 'insoddisfatto della modifica di alcuni file di sistema, ho trovato un altro thread che spiegava come riparare senza rischiare il file di servizio sovrascritto al prossimo aggiornamento: stackoverflow.com/questions/27849331/…
Thomas Urban

Grazie @cepharum. Ho aggiornato la risposta. In effetti abbiamo già riscontrato problemi sui nostri server perché abbiamo aggiornato il file repo /lib/systemd/system/mysql.service. Quindi siamo già passati al metodo a cui ti riferivi. Ho dimenticato di aggiornare la mia risposta qui. Grazie ancora per il promemoria.
Jeroen Vermeulen - MageHost,

Questo comando non funziona: cat / proc / $ (pgrep mysql) / limits | file grep
Basil A

1
@BasilA Questo comando funziona solo quando MySQL è in esecuzione. L'ho appena provato su Ubuntu 16.04.
Jeroen Vermeulen - MageHost
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.