Máy chủ Ubuntu 16.04 MySql open_file_limit sẽ không cao hơn 65536


16

Tôi đang chạy Ubuntu 16.04 Server trên XenServer và tôi đang gặp vấn đề với giới hạn tệp mở của MySql.

Đây là những gì tôi đã làm cho đến nay:

sudo nano /etc/security/limits.conf (tham khảo)

* 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 (tham khảo)

limit nofile 1024000 1024000
limit nproc 102400 102400

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf (tham khảo)

[mysqld_safe]
open_files_limit = 1024000


[mysqld]
open_files_limit = 1024000

Khi những điều trên không hoạt động, tôi tiếp tục như sau:

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

Khi tôi đăng nhập vào tài khoản người dùng của mình, mọi thứ có vẻ ổn:

ulimit -Hn
1024000
ulimit -Sn
1024000

Nếu tôi đăng nhập như mysql thì cũng có vẻ tốt:

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

Tuy nhiên, khi tôi nhìn vào Proc:

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

Hoặc khi tôi nhìn vào nó trong MySql:

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

Từ nhật ký (/var/log/mysql/error.log):

2016-07-25T05: 44: 35.453668Z 0 [Cảnh báo] Không thể tăng số lượng max_open_files lên hơn 65536 (yêu cầu: 1024000)

Tôi hoàn toàn không có ý tưởng ở đây. Lúc đầu, tôi đã bắt đầu với open_files_limit ở 1024 và một trong những điều trên phải thay đổi nó, nhưng tôi cần nó để tăng cao hơn. Tôi đã đạt đến giới hạn này vì tôi có rất nhiều cơ sở dữ liệu và bảng đôi khi có rất nhiều phân vùng.

Tôi thậm chí đã thử những con số ít tích cực hơn 1024000, nhưng không có may mắn.

Có ý tưởng nào ngoài đó không?

Câu trả lời:


24

Điều này làm việc cho tôi trên Ubuntu Xenial 16.04:

Tạo thư mục /etc/systemd/system/mysql.service.d

Đưa vào /etc/systemd/system/mysql.service.d/override.conf:

[Service]
LimitNOFILE=1024000

Bây giờ thực hiện

systemctl daemon-reload
systemctl restart mysql.service

Có thực sự, LimitNOFILE=infinitydường như thực sự đặt nó thành 65536.

Bạn có thể xác nhận những điều trên sau khi bắt đầu MySQL bằng cách thực hiện:

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

1
Vì tôi đến đây trước nhưng cảm thấy hơi không hài lòng với việc điều chỉnh một số tệp hệ thống, tôi đã tìm thấy một chủ đề khác giải thích cách khắc phục tệp dịch vụ rủi ro bị ghi đè trong lần nâng cấp tiếp theo: stackoverflow.com/questions/27849331/
Thomas Urban

Cảm ơn @cepharum. Tôi cập nhật câu trả lời. Thật vậy, chúng tôi đã gặp sự cố trên máy chủ của mình vì chúng tôi đã cập nhật tệp repo /lib/systemd/system/mysql.service. Vì vậy, chúng tôi đã chuyển sang phương pháp mà bạn đã giới thiệu. Tôi đã quên cập nhật câu trả lời của tôi ở đây. Cảm ơn một lần nữa cho lời nhắc nhở.
Jeroen Vermeulen - Magehost

Lệnh này không hoạt động: cat / Proc / $ (pgrep mysql) / giới hạn | tập tin grep
Basil A

1
@BasilA Lệnh này chỉ hoạt động khi MySQL đang chạy. Chỉ cần thử nghiệm nó trên Ubuntu 16.04.
Jeroen Vermeulen - Magehost
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.