Ubuntu 16.04 เซิร์ฟเวอร์ MySql open_file_limit จะไม่สูงกว่า 65536


16

ฉันใช้เซิร์ฟเวอร์ Ubuntu 16.04 บน XenServer และฉันพบปัญหากับการ จำกัด ไฟล์เปิดของ MySql

นี่คือสิ่งที่ฉันทำไปแล้ว:

sudo nano /etc/security/limits.conf (ข้อมูลอ้างอิง)

* 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 (ข้อมูลอ้างอิง)

limit nofile 1024000 1024000
limit nproc 102400 102400

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf (อ้างอิง)

[mysqld_safe]
open_files_limit = 1024000


[mysqld]
open_files_limit = 1024000

เมื่อสิ่งที่กล่าวมาไม่ได้ผลฉันได้ทำสิ่งต่อไปนี้:

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

เมื่อฉันเข้าสู่บัญชีผู้ใช้ของฉันทุกอย่างดูเหมือนจะดี:

ulimit -Hn
1024000
ulimit -Sn
1024000

ถ้าฉันเข้าสู่ระบบในฐานะ mysql มันก็ดูดีเช่นกัน:

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

อย่างไรก็ตามเมื่อฉันดู proc:

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

หรือเมื่อฉันดูใน MySql:

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

จากบันทึก (/var/log/mysql/error.log):

2016-07-25T05: 44: 35.453668Z 0 [คำเตือน] ไม่สามารถเพิ่มจำนวน max_open_files เป็น 65536 มากกว่า (คำขอ: 1024000)

ฉันหมดความคิดที่นี่ ในการเริ่มต้นฉันเริ่มต้นด้วย open_files_limit ที่ 1024 และอย่างใดอย่างหนึ่งข้างต้นต้องมีการเปลี่ยนแปลง แต่ฉันต้องการมันให้สูงขึ้น ฉันกดขีด จำกัด นี้แล้วเนื่องจากมีฐานข้อมูลและตารางจำนวนมากที่บางครั้งมีพาร์ติชันจำนวนมาก

ฉันได้ลองใช้ตัวเลขน้อยกว่า 1024000 โดยไม่มีโชค

มีความคิดอะไรบ้าง?

คำตอบ:


24

สิ่งนี้ใช้ได้กับฉันใน Ubuntu Xenial 16.04:

สร้าง dir /etc/systemd/system/mysql.service.d

ใส่ใน/etc/systemd/system/mysql.service.d/override.conf:

[Service]
LimitNOFILE=1024000

ตอนนี้รัน

systemctl daemon-reload
systemctl restart mysql.service

ใช่จริงLimitNOFILE=infinityๆ แล้วดูเหมือนว่าจะตั้งไว้ที่ 65536

คุณสามารถตรวจสอบข้างต้นหลังจากเริ่ม MySQL โดยทำ:

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

1
ตั้งแต่ฉันมาที่นี่เป็นครั้งแรก แต่รู้สึกไม่พึงพอใจเล็กน้อยกับการปรับไฟล์ระบบฉันพบเธรดอื่นที่อธิบายถึงวิธีการแก้ไขไฟล์เซอร์วิสที่ไม่มีความเสี่ยงที่เขียนทับในการอัปเกรดครั้งต่อไป: stackoverflow.com/questions/27849331/ …
Thomas Urban

ขอบคุณ @cepharum ฉันอัพเดตคำตอบแล้ว /lib/systemd/system/mysql.serviceอันที่จริงเรามีประสบการณ์แล้วปัญหาในเซิร์ฟเวอร์ของเราเพราะเรามีการปรับปรุงไฟล์ซื้อคืน ดังนั้นเราจึงย้ายไปยังวิธีที่คุณอ้างถึง ฉันลืมปรับปรุงคำตอบของฉันที่นี่ ขอขอบคุณอีกครั้งสำหรับคำเตือน
Jeroen Vermeulen - MageHost

คำสั่งนี้ไม่ทำงาน: cat / proc / $ (pgrep mysql) / limit | ไฟล์ grep
Basil

1
@BasilA คำสั่งนี้ใช้ได้เฉพาะเมื่อ MySQL ทำงานอยู่ เพิ่งทดสอบบน Ubuntu 16.04
Jeroen Vermeulen - ผู้วิเศษ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.