ฉันพยายามเปิดใช้งานการบันทึกแบบสอบถามช้าบนเซิร์ฟเวอร์ของเราเพื่อระบุแบบสอบถามใด ๆ ที่สามารถใช้การเพิ่มประสิทธิภาพ ฟังดูง่ายพอ แต่ไฟล์ของฉันไม่ได้ถูกเขียนลงไป ฉันไม่ได้รับข้อผิดพลาดหรืออะไรทำนองนั้นมันก็ดูเหมือนจะไม่ได้เข้าสู่การสืบค้นช้า ฉันจำได้ว่าต้องรีสตาร์ท mysql หลังจากเปลี่ยนแปลงการกำหนดค่าของฉัน
ฉันใช้ MySQL Ver 5.1.61 นี่คือสิ่งที่ฉันมีใน my.cnf:
slow-query-log=1
slow-query-log-file=/var/logs/my.slow.log
long_query_time=1
ไฟล์ /var/logs/my.slow.log มี mysql ในฐานะเจ้าของ, นอกจากนี้เพื่อประโยชน์ในการดีบั๊กฉันให้อ่าน / เขียนทั้งหมดบนล็อกไฟล์
ฉันมี long_query_time ตั้งค่าเป็น 1 ในด้านบนเพราะฉันแค่ต้องการดูว่ามันทำงาน ฉันลองตั้งค่าให้ต่ำลง (เช่น 0.3) แต่ฉันยังไม่ได้บันทึกอะไรเลย ฉันรู้ว่าข้อความค้นหาที่แอปของฉันทำงานนั้นใช้เวลานานกว่า 1 วินาทีและฉันได้เรียกใช้ข้อความค้นหาโดยเจตนา ( SELECT sleep(10);
) ในเทอร์มินัลเพื่อทำการทดสอบและบันทึกยังว่างเปล่า
ฉันได้ดูเอกสารจากสิ่งที่ฉันเห็นว่ามันควรจะทำงานได้ ใครมีข้อเสนอแนะเกี่ยวกับสิ่งที่ฉันทำผิด? คำแนะนำใด ๆ ที่จะได้รับการชื่นชมขอบคุณมาก!
แก้ไข: ตามที่ถามในความคิดเห็นที่ฉันวิ่งแบบสอบถาม:
`SELECT variable_value FROM information_schema.global_variables WHERE variable_name IN ('slow_query_log','slow_query_log_file','long_query_time');`
ผลลัพธ์:
10.0000000
/var/run/mysqld/mysqld-slow.log
OFF
เห็นได้ชัดว่าการเปลี่ยนแปลงการกำหนดค่าของฉันไม่ได้ถูกนำมาพิจารณาเนื่องจากฉันเชื่อว่าสิ่งเหล่านี้เป็นค่าเริ่มต้น ฉันค่อนข้างแน่ใจว่าไฟล์ my.cnf ที่ฉันกำลังแก้ไขกำลังถูกแยกวิเคราะห์ราวกับว่าฉันใส่ค่าที่ไม่ถูกต้อง mysql จะเกิดข้อผิดพลาดเมื่อรีสตาร์ท เกิดอะไรขึ้นที่นี่?
การแก้ไขอื่น:
หลังจากปฏิบัติตามคำแนะนำของ @RolandoMySQLDBA แล้วย้ายบรรทัดการ[mysqld]
ตั้งค่าการสืบค้นที่ช้าไปยังการตั้งค่าของฉัน ตอนนี้ผลลัพธ์ของเคียวรี variable_value ด้านบนคือ:
1.0000000
/var/logs/my.slow.log
ON
อย่างไรก็ตามฉันยังไม่เห็นไฟล์ my.slow.log ที่กำลังเขียนอยู่ ฉันไม่คิดว่ามันเป็นปัญหาสิทธิ์เนื่องจากไฟล์เป็นของ mysql และฉันได้เพิ่มการอนุญาตทั้งหมดสำหรับผู้ใช้ทั้งหมดในไฟล์ มีใครคิดบ้างไหมว่าทำไมมันถึงไม่ทำงาน?
แก้ไข: แก้ไขแล้ว! เส้นทางไปยังบันทึกคิวรีช้าไม่ถูกต้องควรเป็น /var/log/my.slow.log แทน / var / log * s * / my.slow.log ขอบคุณทุกคนสำหรับความช่วยเหลือฉันได้เรียนรู้มาก!
SET GLOBAL log_output=FILE
แก้ไขให้ฉัน
SELECT variable_value FROM information_schema.global_variables WHERE variable_name IN ('slow_query_log','slow_query_log_file','long_query_time');
และโพสต์ผลลัพธ์