เรื่องมันเกิดจากได้ตั้งให้ Server สำรองข้อมูล MySQL ไว้อัตโนมัติโดยใช้คำสั่งพื้นๆ อย่าง mysqldump เช่น
mysqldump -u root -p password db-name > db-name.sql
และก็ปล่อยให้มันทำงานไปเรื่อยๆ โดยที่ไม่ได้ตรวจสอบเลยว่าการสำรองนั้นมันสมบูรณ์หรือเปล่า และวันดีคืนดีอยากจะดึงข้อมูลกลับมาปรากฎว่าไม่สามารถดึงข้อมูลกลับมาได้สมบูรณ์ บาง tables หายไป…. เท่านั้นหละ โอ้งานเข้า!!!
พอตรวจสอบไปมาปรากฎว่าไอ้คำสั่งที่เราตั้ง cron ให้ทำงานนั้นมันมี error
mysqldump: Got error: 1016: Can’t open file: ‘./table.frm’ (errno: 24) when using LOCK TABLES
จาก error ข้างต้นปัญหาเกิดจากเรามี table ในฐานข้อมูลเยอะไป
มีทางเลือกสำหรับแก้ไขปัญหานี้ได้ 2 ทาง คือ
1. ไปที่ my.cnf แล้วเพิ่มบรรทัดนี้เข้าไป และทำการ restart mysqld ของเราใหม่
open-files-limit=20000
2. เพิ่ม option –lock-tables=false เข้าไปใน mysqldump ดังนี้
mysqldump –lock-tables=false -u root -p password db-name > db-name.sql
เท่านี้ก็แก้ปัญหาได้แล้ว แต่ทั้งนี้ทั้งนั้นเราควรตรวจสอบข้อมูลที่เราสำรองอยู่เสมอว่ามันสามารถนำกลับมาใช้งานได้จริง ไม่ใช่รอให้เกิดปัญหาแล้วค่อยมาดู ถ้าโชคดีก็ดีไป แต่ถ้าเคราะห์ร้ายละก็ ตัวใครตัวมันเด้อ!
อ้างอิงจาก:
http://voidweb.com/2011/05/mysqldump-got-error-1016-cant-open-file-errno-24-when-using-lock-tables/