Ubuntu 16.04 Server MySql open_file_limit wird nicht höher als 65536 sein


16

Ich führe Ubuntu 16.04 Server auf XenServer aus und habe ein Problem mit dem Open File Limit von MySql.

Folgendes habe ich bisher getan:

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

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

limit nofile 1024000 1024000
limit nproc 102400 102400

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

[mysqld_safe]
open_files_limit = 1024000


[mysqld]
open_files_limit = 1024000

Als das oben genannte nicht funktionierte, fuhr ich mit folgendem fort:

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

Wenn ich mich in meinem Benutzerkonto anmelde, scheint alles in Ordnung zu sein:

ulimit -Hn
1024000
ulimit -Sn
1024000

Wenn ich mich als mysql anmelde, sieht es auch gut aus:

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

Wenn ich mir jedoch den Prozess anschaue:

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

Oder wenn ich es mir in MySql ansehe:

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

Aus den Protokollen (/var/log/mysql/error.log):

2016-07-25T05: 44: 35.453668Z 0 [Warnung] Die Anzahl der max_open_files konnte nicht auf mehr als 65536 erhöht werden (Anforderung: 1024000).

Mir fehlen hier die Ideen. Am Anfang habe ich mit open_files_limit um 1024 angefangen, und einer der oben genannten muss es geändert haben, aber ich brauche es, um höher zu gehen. Ich überschreite diese Grenze bereits, da ich viele Datenbanken und Tabellen habe, die manchmal viele Partitionen haben.

Ich habe sogar versucht, Zahlen weniger aggressiv als 1024000, ohne Glück.

Irgendwelche Ideen da draußen?

Antworten:


24

Das hat bei mir mit Ubuntu Xenial 16.04 geklappt:

Erstellen Sie das Verzeichnis /etc/systemd/system/mysql.service.d

Setzen in /etc/systemd/system/mysql.service.d/override.conf:

[Service]
LimitNOFILE=1024000

Jetzt ausführen

systemctl daemon-reload
systemctl restart mysql.service

Ja, LimitNOFILE=infinitytatsächlich scheint es auf 65536 zu setzen.

Sie können das Obige nach dem Start von MySQL überprüfen, indem Sie Folgendes tun:

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

1
Da ich zuerst hierher kam, aber ein bisschen unzufrieden mit dem Anpassen einer Systemdatei war, fand ich einen anderen Thread, in dem erklärt wurde, wie das Problem behoben werden kann, ohne
Thomas Urban

Danke @cepharum. Ich habe die Antwort aktualisiert. Tatsächlich hatten wir bereits Probleme auf unseren Servern, weil wir die Repo-Datei aktualisiert haben /lib/systemd/system/mysql.service. Wir sind also bereits zu der Methode übergegangen, auf die Sie sich bezogen haben. Ich habe vergessen, meine Antwort hier zu aktualisieren. Nochmals vielen Dank für die Erinnerung.
Jeroen Vermeulen - MageHost

Dieser Befehl funktioniert nicht: cat / proc / $ (pgrep mysql) / limits | grep files
Basil A

1
@BasilA Dieser Befehl funktioniert nur, wenn MySQL ausgeführt wird. Habe es gerade auf Ubuntu 16.04 getestet.
Jeroen Vermeulen - MageHost
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.