Ubuntu 16.04 Server MySql open_file_limit tidak akan lebih tinggi dari 65536

16

Saya menjalankan Ubuntu 16.04 Server di XenServer dan saya mengalami masalah dengan batas file terbuka MySql.

Inilah yang telah saya lakukan sejauh ini:

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

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

limit nofile 1024000 1024000
limit nproc 102400 102400

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

[mysqld_safe]
open_files_limit = 1024000


[mysqld]
open_files_limit = 1024000

Ketika hal di atas tidak berhasil, saya melanjutkan ke yang berikut:

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

Ketika saya masuk ke akun pengguna saya, semuanya tampak baik-baik saja:

ulimit -Hn
1024000
ulimit -Sn
1024000

Jika saya login sebagai mysql juga terlihat bagus:

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

Namun, ketika saya melihat proc:

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

Atau ketika saya melihatnya di MySql:

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

Dari log (/var/log/mysql/error.log):

2016-07-25T05: 44: 35.453668Z 0 [Peringatan] Tidak dapat meningkatkan jumlah max_open_files hingga lebih dari 65536 (permintaan: 1024000)

Saya benar-benar kehabisan ide di sini. Pada awalnya saya memang mulai dengan open_files_limit di 1024, dan salah satu di atas pasti telah mengubahnya, tetapi saya membutuhkannya untuk lebih tinggi. Saya sudah mencapai batas ini karena saya memiliki banyak basis data dan tabel yang terkadang memiliki banyak partisi.

Saya bahkan sudah mencoba angka yang kurang agresif daripada 1024000, tanpa hasil.

Ada ide di luar sana?

J Pierret
sumber

Jawaban:

24

Ini bekerja untuk saya di Ubuntu Xenial 16.04:

Buat dir /etc/systemd/system/mysql.service.d

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

[Service]
LimitNOFILE=1024000

Sekarang jalankan

systemctl daemon-reload
systemctl restart mysql.service

Ya memang, LimitNOFILE=infinitysebenarnya tampaknya mengaturnya ke 65536.

Anda dapat memvalidasi di atas setelah memulai MySQL dengan melakukan:

cat /proc/$(pgrep mysql)/limits | grep files
Jeroen Vermeulen - MageHost
sumber
1
Sejak saya pertama kali datang ke sini tetapi merasa sedikit tidak senang dengan menyesuaikan beberapa file sistem, saya menemukan utas lain yang menjelaskan bagaimana cara memperbaiki file layanan yang beresiko ditimpa pada peningkatan selanjutnya: stackoverflow.com/questions/27849331/…
Thomas Urban
Terima kasih @cepharum. Saya memperbarui jawabannya. Memang kami sudah mengalami masalah di server kami karena kami memperbarui file repo /lib/systemd/system/mysql.service. Jadi kami sudah pindah ke metode yang Anda rujuk. Saya lupa memperbarui jawaban saya di sini. Sekali lagi terima kasih atas pengingatnya.
Jeroen Vermeulen - MageHost
Perintah ini tidak berfungsi: cat / proc / $ (pgrep mysql) / limit | grep files
Basil A
1
@ BasilA Perintah ini hanya berfungsi setelah MySQL berjalan. Baru saja mengujinya di Ubuntu 16.04.
Jeroen Vermeulen - MageHost