Ubuntu 16.04 Sunucu MySql open_file_limit 65536'dan daha yüksek olmayacak


16

Ubuntu 16.04 Server'ı XenServer'da çalıştırıyorum ve MySql'in açık dosya sınırıyla ilgili bir sorunla karşılaşıyorum.

Şimdiye kadar yaptığım şey:

sudo nano /etc/security/limits.conf (başvuru)

* 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 (başvuru)

limit nofile 1024000 1024000
limit nproc 102400 102400

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf (başvuru)

[mysqld_safe]
open_files_limit = 1024000


[mysqld]
open_files_limit = 1024000

Yukarıdakiler işe yaramadığında, aşağıdakilere devam ettim:

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

Kullanıcı hesabıma giriş yaptığımda her şey iyi görünüyor:

ulimit -Hn
1024000
ulimit -Sn
1024000

MySQL olarak giriş yaparsanız çok iyi görünüyor:

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

Ancak, proc baktığınızda:

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

Veya MySql'de baktığımda:

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

Günlüklerden (/var/log/mysql/error.log):

2016-07-25T05: 44: 35.453668Z 0 [Uyarı] max_open_files sayısı 65536'dan fazla artırılamadı (istek: 1024000)

Burada tamamen fikirlerim kalmadı. Başlangıçta 1024'te open_files_limit ile başladım ve yukarıdakilerden biri bunu değiştirmiş olmalı, ancak daha yükseğe çıkmam gerekiyor. Bu bölüme zaten vuruyorum, çünkü bazen çok fazla bölüm içeren veritabanları ve tablolarım var.

Hatta hiç şans olmadan 1024000'den daha az agresif olan sayıları denedim.

Orada fikir var mı?

Yanıtlar:


24

Bu benim için Ubuntu Xenial 16.04'te çalıştı:

Dir oluşturun /etc/systemd/system/mysql.service.d

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

[Service]
LimitNOFILE=1024000

Şimdi çalıştır

systemctl daemon-reload
systemctl restart mysql.service

Evet, LimitNOFILE=infinityaslında onu 65536'ya ayarlamış gibi görünüyor.

Aşağıdakileri yaparak MySQL'i başlattıktan sonra yukarıdakileri doğrulayabilirsiniz:

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

1
Buraya ilk geldiğimden, ancak bazı sistem dosyasını ayarlayarak biraz mutsuz hissettiğimden, bir sonraki yükseltmede üzerine yazılan riskli hizmet dosyasının nasıl düzeltileceğini açıklayan başka bir iş parçacığı buldum: stackoverflow.com/questions/27849331/…
Thomas Urban

Teşekkürler @cepharum. Cevabı güncelledim. Aslında repo dosyasını güncellediğimiz için sunucularımızda zaten problemler yaşadık /lib/systemd/system/mysql.service. Bu yüzden bahsettiğiniz yönteme geçtik. Cevabımı burada güncellemeyi unuttum. Hatırlatma için tekrar teşekkürler.
Jeroen Vermeulen - MageHost

Bu komut çalışmıyor: cat / proc / $ (pgrep mysql) / sınırlar | grep dosyaları
Basil A

1
@BasilA Bu komut yalnızca MySQL çalıştığında çalışır. Sadece Ubuntu 16.04'te test etti.
Jeroen Vermeulen - MageHost
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.