Serwer Ubuntu 16.04 MySql open_file_limit nie przekroczy 65536

16

Używam Ubuntu 16.04 Server na XenServer i mam problem z limitem otwartych plików MySql.

Oto co dotychczas zrobiłem:

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

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

limit nofile 1024000 1024000
limit nproc 102400 102400

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

[mysqld_safe]
open_files_limit = 1024000


[mysqld]
open_files_limit = 1024000

Gdy powyższe nie zadziałało, przystąpiłem do następujących czynności:

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

Po zalogowaniu się na konto użytkownika wszystko wydaje się w porządku:

ulimit -Hn
1024000
ulimit -Sn
1024000

Jeśli loguję się jako mysql, to też wygląda dobrze:

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

Jednak gdy patrzę na proc:

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

Lub kiedy patrzę na to w MySql:

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

Z dzienników (/var/log/mysql/error.log):

2016-07-25T05: 44: 35.453668Z 0 [Ostrzeżenie] Nie można zwiększyć liczby max_open_files do więcej niż 65536 (żądanie: 1024000)

Nie mam tutaj pomysłów. Na początku zacząłem od open_files_limit przy 1024 i jeden z powyższych musiał go zmienić, ale potrzebuję go, aby przejść wyżej. Osiągam już ten limit, ponieważ mam wiele baz danych i tabel, które czasem mają wiele partycji.

Próbowałem nawet liczb mniej agresywnych niż 1024000, ale bez powodzenia.

Jakieś pomysły?

J Pierret
źródło

Odpowiedzi:

24

Działa to dla mnie na Ubuntu Xenial 16.04:

Utwórz katalog /etc/systemd/system/mysql.service.d

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

[Service]
LimitNOFILE=1024000

Teraz wykonaj

systemctl daemon-reload
systemctl restart mysql.service

Tak, LimitNOFILE=infinitytak naprawdę wydaje się, że ustawia go na 65536.

Możesz zweryfikować powyższe po uruchomieniu MySQL, wykonując:

cat /proc/$(pgrep mysql)/limits | grep files
Jeroen Vermeulen - MageHost
źródło
1
Odkąd przybyłem tu pierwszy, ale czułem się trochę niezadowolony z dostosowywania jakiegoś pliku systemowego, znalazłem inny wątek wyjaśniający, jak naprawić w / o ryzykujący plik usługi zastąpiony przy następnej aktualizacji: stackoverflow.com/questions/27849331/...
Thomas Urban
Dzięki @cepharum. Zaktualizowałem odpowiedź. Rzeczywiście mieliśmy już problemy na naszych serwerach, ponieważ zaktualizowaliśmy plik repo /lib/systemd/system/mysql.service. Więc już przeszliśmy do metody, o której mówiłeś. Zapomniałem zaktualizować swoją odpowiedź tutaj. Jeszcze raz dziękuję za przypomnienie.
Jeroen Vermeulen - MageHost
To polecenie nie działa: cat / proc / $ (pgrep mysql) / limit | pliki grep
Basil A
1
@BasilA To polecenie działa tylko po uruchomieniu MySQL. Właśnie przetestowałem to na Ubuntu 16.04.
Jeroen Vermeulen - MageHost