ไม่มีทรัพยากรสำหรับ mysqldump


21

ฉันพยายามที่จะทำ mysqldump บนเซิร์ฟเวอร์Windowsและฉันได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:

mysqldump: Got error: 23: Out of resources when opening file '.\db\sometable.MYD' (Errcode: 24) when using LOCK TABLES

นี่คือคำสั่งที่ฉันใช้:

mysqldump -u user -p"pass" --lock-tables --default-character-set=latin1 -e --quick databasename > "query.sql"

การเริ่มบริการ mysql ใหม่ไม่ได้ช่วยอะไร

ฉันได้รับข้อความสำหรับตารางเดียวกันเสมอ

ฉันพยายามลดตัวแปรtable_cacheและmax_connectionsจาก 64 เป็น 32 และ 30 เป็น 10 ตามลำดับ แต่ฉันยังคงได้รับข้อผิดพลาดเพียงครั้งนี้สำหรับตารางอื่น (และจากนี้ไปข้อความแสดงข้อผิดพลาดจะกล่าวถึงตารางที่สองเสมอ)

สคริปต์เดียวกันกำลังทำงานบนเซิร์ฟเวอร์Windowsอื่น ๆ ที่มีฐานข้อมูลเดียวกันโดยไม่มีปัญหา

ฐานข้อมูลทั้งหมดมี 85 ตาราง


ระบบปฏิบัติการใดที่คุณใช้ MySQL ทำงานอยู่
เดฟ

Windows ทุกที่
Philippe Carriere

มีกี่ตารางใน DB? ดูเหมือนว่าขีด จำกัด ของตัวอธิบายไฟล์บางชนิด
davey

85 ตารางในฐานข้อมูล
Philippe Carriere

เพิ่มข้อมูลลงในคำอธิบายแล้ว
Philippe Carriere

คำตอบ:


21

ตามที่นี่ - "รหัสข้อผิดพลาด OS 24: มีไฟล์ที่เปิดมากเกินไป" ซึ่งสอดคล้องกับข้อผิดพลาดทั่วไปมากขึ้น 23 "Out of resources"

ดังนั้นดูเหมือนว่าคุณจะหมดการจัดการไฟล์ โดยปกติจะเป็นปัญหาการตั้งค่าเซิร์ฟเวอร์ / สิ้นสุดทั้งใน MySQL หรือในระบบปฏิบัติการเอง

อาจตรวจสอบ / ปรับการ--open-files-limitตั้งค่าใน MySQL เองและดูว่ามีประโยชน์หรือไม่

นอกจากนี้อาจลองเรียกใช้การถ่ายโอนข้อมูลในขณะที่ไม่มีใครใช้ DB ด้วยการ--single-transactionตั้งค่าแทน--Lock-Fileเนื่องจากหลาย ๆ คนแนะนำว่าวิธีนี้จะใช้งานได้ครั้งละหนึ่งตารางแทนที่จะเปิดทั้งหมดในครั้งเดียว

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


2
- เดี่ยวธุรกรรมแทน - ล็อคตารางทำงาน ขอบคุณมาก.
Philippe Carriere

แปลกฉันไม่ได้ใช้ InnoDB แต่มันไม่ทำงานหากไม่มีพารามิเตอร์นี้ ฉันคิดว่า - ธุรกรรมเดี่ยวเกี่ยวข้องกับ innoDB เท่านั้น
Philippe Carriere

ดี :) ดีใจที่มันช่วย
techie007

4
--lock-all-tablesใช้งานได้และไม่มีปัญหาความไม่สอดคล้องกัน--single-transactionเมื่อทำงานบนตารางที่ไม่ใช่ของ InnoDB
freiheit

เพียงชี้แจง: กองกำลัง--single-transaction --lock-tables=offอย่าใช้สิ่งนี้กับตารางที่ไม่ทำธุรกรรม
b2ag

6

คุณอยู่ในฐานะที่จะลอง--single-transactionแทนที่ด้วย--lock-tablesเช่นตารางเป็น InnoDB และคุณไม่ได้ใช้ตารางคลัสเตอร์และตารางแก้ไข, ตาราง DROP, ตาราง RENAME, ตาราง TRUNCATE จะไม่เกิดขึ้นระหว่างการถ่ายโอนข้อมูลหรือไม่ ยืนยันได้ดีที่สุดว่านี่ก็โอเคกับองค์กร MySQL ที่รองรับถ้าคุณมีอยู่

ฉันได้ลองทำสิ่งนี้ในยูนิกซ์ แต่โดยทั่วไปถ้าฉันลองกับ DB ที่มี 2,000 ตารางมันล้มเหลวโดยมีข้อผิดพลาดคล้ายกับคุณเช่นฉันใช้ตัวจัดการไฟล์ที่เปิดอยู่ทั้งหมด


+1 วิธีการแก้ปัญหาของคุณเหมือนกับ techie007 ก็ทำงานเหมือนกัน แต่เขาตอบก่อนดังนั้นฉันจึงตอบรับ สำหรับบันทึกฉันไม่ได้ใช้ innoDB
Philippe Carriere

2

คุณอาจได้รับข้อผิดพลาดนี้:

MySQL: Errcode: 24 เมื่อใช้ LOCK TABLES

... พร้อมกับข้อผิดพลาดอื่น ๆ เมื่อคุณอัพเกรด MySQL 5.5 และคุณกำลังใช้งานสำรองข้อมูลของคุณใน Plesk หรือ OS อื่น ๆ mysqldumpดำเนินการ

เพื่อแก้ไข:

  1. แก้ไข my.cnf
  2. เพิ่ม:

    open_files_limit=2048
    
  3. รีสตาร์ท MySQL

หากคุณได้รับ:

ไม่สามารถโหลดจาก mysql.proc ตารางอาจเสียหาย (1548)

นี่คือผลลัพธ์ของการอัปเกรดเป็น 5.5 ดำเนินการ:

mysql_upgrade --force

ผ่านการทดสอบและทำงานบน CentOS 6.7 และ Plesk 12


0

ฉันมีปัญหาคล้ายกันกับฟิลิป เมื่อฉันเริ่มถ่ายโอนข้อมูลฉันเห็นข้อผิดพลาดเช่นนี้:

mysqldump: Got error: 23: Out of resources when opening file './c1baznarz/timecard.MYD' (Errcode: 24) when using LOCK TABLES

ฉันใช้คำสั่งง่าย ๆ :

mysqldump -uroot -p c1baznarz > c1baznarz.sql

ดังนั้นฉันเพิ่มคำสั่งอื่นใน mysqldump ของฉัน:

--single-transaction

และการถ่ายโอนข้อมูลพร้อม ดังนั้นแบบสอบถาม mysqldump ทั้งหมดของฉันมีลักษณะเช่นนี้:

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