MySQL ไม่สามารถเปิดไฟล์หลังจากอัพเดทเซิร์ฟเวอร์: errno: 24


16

Ubuntu: 12.04 LTS (Linux mysql02 3.2.0-40-generic # 64-Ubuntu SMP จ. 25 มี.ค. 25 21:22:10 UTC 2013 x86_64 x86_64 x86_64 GNU / Linux)

MySQL: Ubuntu distro 5.5.31

Apparmor: ถูกลบ!

เซิร์ฟเวอร์ใช้งานหนักแน่นมานานกว่าหนึ่งปี จากนั้น MySQL วันจันทร์นี้ก็เริ่มล้มเหลว การอัปเดตทำให้เกิดปัญหาและเราไม่สามารถเข้าใจได้ว่ามันคืออะไร เราได้ลองย้อนกลับไปที่ MySQL 5.5.30 แต่ก็ไม่มีโชค เรากลับมาที่ 5.5.31

รายการบันทึกข้อผิดพลาด MySQL:

130430  7:55:46 [ERROR] Error in accept: Too many open files
130430  7:55:46 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/fclvod.frm' (errno: 24)
130430  7:55:46 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/fcnote.frm' (errno: 24)
130430  7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/ffcont.frm' (errno: 24)
130430  7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/ffcontv.frm' (errno: 24)
130430  7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/ffnote.frm' (errno: 24)
130430  7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/frcfcl.frm' (errno: 24)

ดูเหมือนว่าเรากำลังประสบปัญหา ulimit เราได้ลบ APPARMOR ออกอย่างสมบูรณ์ เราได้เพิ่ม/etc/security/limits.confและยังไม่มีโชค:

# Out of desperation....
* soft  nofile  49152
* hard  nofile  65536

# No effect!?!!?
#mysql  soft  nofile  49152
#mysql  hard  nofile  65536

และเพื่อแสดงให้เห็นถึงข้อ จำกัดconfigทำงาน:

root@mysql02:/etc/security# ulimit -Sa | grep "open files"
open files                      (-n) 49152

root@mysql02:/etc/security# ulimit -Ha | grep "open files"
open files                      (-n) 65536

และนี่คือรายการที่สำคัญในmy.cnf

[mysqld_safe]
open_files_limit = 16384

[mysqld]
open_files_limit = 16384

อย่างไรก็ตาม:

root@mysql02:/etc/mysql# mysqladmin -u root -pThePassword variables| grep open_files_limit
open_files_limit                                  | 1024

เรานิ่งงันและลงทั้งหมด ความช่วยเหลือใด ๆ จะได้รับการชื่นชมอย่างมาก


1
ข้อความแสดงข้อผิดพลาดใดในบันทึกก่อนที่จะมีเกี่ยวกับไฟล์ที่เปิดมากเกินไป คุณรีสตาร์ท mysqld ตั้งแต่เปลี่ยน open_files_limit จริงไหม?
Bert

ใช่เราเริ่ม MySQL ใหม่ทุกครั้งที่มีการเปลี่ยนแปลง เรามีหนึ่งตารางที่กำลังรายงานว่าหายไป (และเป็นเพราะเหตุผลบางอย่าง): 30430 8:36:39 InnoDB: ข้อผิดพลาด: พยายามเปิดตาราง แต่ไม่สามารถ InnoDB: เปิดไฟล์ tablespace './oti_lw_prod/apinvoice_charges .ibd '!
Van

FYI เราย้ายผู้ใช้ของเราไปที่ต้นแบบอื่นของเรา (การตั้งค่าหลักการต่อสู้) (01) และตอนนี้ก็แสดงอาการแบบเดียวกัน มัน (01) มีการกำหนดค่าที่แน่นอนเช่นเดียวกับเซิร์ฟเวอร์ที่ล้มเหลวนี้ (02) และเป็นความล้มเหลวของเราที่จะโทถ้าหนึ่ง (02) นี้ตาย ดีมากสำหรับแผนนั้น เราค่อนข้างมั่นใจว่านี่เป็นปัญหาของระบบปฏิบัติการ
รถตู้

ฉันแน่ใจว่านี่ใช้ไม่ได้กับ Original Poster แต่สำหรับฉันแล้วสิ่งนี้เกิดขึ้นหลังจากการอัพเดทความปลอดภัยและการรีสตาร์ท mysql ก็เพียงพอแล้ว
Kzqai

คำตอบ:


19

ระบบปฏิบัติการ:การปรับใช้ Ubuntu (Debian)

ตัวเลือกเซิร์ฟเวอร์ MySQL: open-files-limit

ดูเหมือนว่า Debian upstartไม่ได้ใช้พารามิเตอร์ที่กำหนดไว้ใน/etc/security/limits.confดังนั้นเมื่อคุณเรียกใช้ mysql ผ่านคำสั่งบริการ (และภายใต้การพุ่งพรวด) มันจะแทนที่ขีด จำกัด ที่กำหนดไว้และใช้ 1024 เริ่มต้น .

การแก้ปัญหาคือการปรับเปลี่ยนmysql.confไฟล์ที่กำหนดบริการพุ่งพรวดก็ตั้งอยู่ใน/etc/init/mysql.confและเพิ่มบรรทัดต่อไปนี้ก่อนที่จะก่อนเริ่มต้นบล็อก:

# NB: Upstart scripts do not respect
# /etc/security/limits.conf, so the open-file limits
# settings need to be applied here.
limit nofile 32000 32000
limit nproc 32000 32000

อ้างอิง:


ความผิดหวังนี้ไม่ได้มีการบันทึกไว้อย่างชัดเจน :( เราเพิ่งเกิดขึ้นกับโพสต์ของ David บนเซิร์ฟเวอร์ผิดพลาด
Van

และนี่ไม่ใช่ข้อผิดพลาดตามนี้: bugs.launchpad.net/mysql-server/+bug/938669
Van

สิ่งนี้สามารถเกิดขึ้นได้ทันทีและน่าตื่นตระหนกหลังจากเพิ่มพาร์ติชั่นไปยังตารางซึ่งอาจทำให้ไฟล์ที่เปิดเพิ่มขึ้น
markdwhite

สิ่งนี้ใช้ได้กับฉันใน Ubuntu 15.10 หลังจากอัปเกรดแพ็คเกจได้รับข้อความแสดงข้อผิดพลาด 'ไม่สามารถเปิดไฟล์' ซึ่งทำให้ไซต์ของฉันทั้งหมดเสียหาย: (... ขอบคุณหนึ่งล้านที่ช่วยให้ฉันปวดหัวและเวลามาก
Emmanuel

ใครสามารถอธิบายได้ว่าบล็อก "ก่อนเริ่มต้น" คืออะไร ฉันกำลังใช้งาน Ubuntu 16 และมีปัญหานี้ แต่ไฟล์ปรับแต่งดูเหมือนแตกต่างจากที่เคยทำมาก่อน
billynoah

4

มีปัญหาเดียวกันบน Ubuntu 15.10

https://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1434758 - นำวิธีแก้ปัญหา:

  1. ตรวจสอบว่า /lib/systemd/system/mysql.service หรือ /lib/systemd/system/mysqld.service มีอยู่
  2. (ในกรณีของฉัน) ถ้าไม่สร้าง /lib/systemd/system/mysql.service และคัดลอกเนื้อหาไปยังไฟล์นี้https://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1434758/ ความคิดเห็น / 11และเพิ่มสองบรรทัดบางแห่งในไฟล์

    LimitNOFILE=infinity
    LimitMEMLOCK=infinity
    
  3. หากไฟล์หนึ่งหรือทั้งสองไฟล์มีอยู่ให้ตรวจสอบว่ามีสองบรรทัดนี้หรือไม่:

    LimitNOFILE=infinity
    LimitMEMLOCK=infinity
    
  4. ปฏิบัติ systemctl daemon-reload

... และทุกอย่างควรจะดี


1

เนื่องจากไม่มีสิ่งใดในข้างต้นที่แก้ไขปัญหาให้ฉันได้ (นำไปสู่ระบบหน่วยความจำไม่เพียงพอ) นี่เป็นวิธีแก้ปัญหาที่ฉันพบ:

ใน/etc/mysql/my.confคุณต้องเพิ่ม MySQL ภายใน open_files_limit ดังนั้นเพิ่มชั่วคราวไปยังการกำหนดค่าและรีสตาร์ท MySQL

[mysqld]
open_files_limit = 100000

sudo /etc/init.d/mysql restart

หลังจากเรียกใช้การดำเนินการที่ทำให้เกิดข้อผิดพลาดในการเปิดไฟล์มากเกินไปคุณสามารถเปลี่ยนการกำหนดค่าของคุณกลับไปเป็นค่าเริ่มต้นและเริ่ม MySQL ใหม่อีกครั้ง


นี้ทำงานให้ฉันบน Ubuntu 16.04 ขอบคุณ :)
ริชาร์ดแฟรงก์

0

ขอบคุณสำหรับการแก้ปัญหา แต่สำหรับฉันแล้วปัญหาได้ถูกบดบังด้วยข้อเท็จจริงอีกสองข้อ

  1. ไดเรกทอรีข้อมูลของฉันแตกต่างจากการติดตั้งเริ่มต้น ด้วยเหตุผลหลายประการทั้งในอดีตและทางเทคนิค
  2. ฉันกำลังอัปเกรดจากการติดตั้งที่เก่ามากซึ่งผ่านจำนวนพอร์ตด้านหลังและพอร์ตไปข้างหน้า ในการเริ่มต้นครั้งแรกของ MySQL 5.5 ที่ติดตั้งใหม่เครื่องยนต์ InnoDB ไม่ได้เปิดใช้งาน (การใช้งานภายในถูกปิดใช้งานในไฟล์กำหนดค่า แต่ปลั๊กอินที่มีในเวอร์ชันก่อนหน้านี้ไม่มีอยู่ใน 5.5) และเครื่องหมายอัปเกรดถูกสร้างขึ้น ตารางใด ๆ

หลังจากแก้ไขปัญหา InnoDB มันยังคงคาย

mysql> SHOW DATABASES;
ERROR 1018 (HY000): Can't read dir of '.' (errno: 24)

ฉันต้องเริ่ม mysqld ในรูทคอนโซลและรีสตาร์ทด้วยตนเอง

/usr/bin/mysql_upgrade --defaults-extra-file=/etc/mysql/debian.cnf --force

จากนั้นเซิร์ฟเวอร์เริ่มแสดงฐานข้อมูล แต่ไม่สามารถเข้าถึงบางตารางได้ วิธีแก้ปัญหาของคุณด้วยขีด จำกัด ที่เพิ่มขึ้นช่วยแก้ไขปัญหาที่เหลือขอขอบคุณ!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.