ข้อความค้นหาช้าไม่ได้บันทึก


13

ฉันพยายามเปิดใช้งานการบันทึกแบบสอบถามช้าบนเซิร์ฟเวอร์ของเราเพื่อระบุแบบสอบถามใด ๆ ที่สามารถใช้การเพิ่มประสิทธิภาพ ฟังดูง่ายพอ แต่ไฟล์ของฉันไม่ได้ถูกเขียนลงไป ฉันไม่ได้รับข้อผิดพลาดหรืออะไรทำนองนั้นมันก็ดูเหมือนจะไม่ได้เข้าสู่การสืบค้นช้า ฉันจำได้ว่าต้องรีสตาร์ท 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 ขอบคุณทุกคนสำหรับความช่วยเหลือฉันได้เรียนรู้มาก!


1
โปรดเรียกใช้SELECT variable_value FROM information_schema.global_variables WHERE variable_name IN ('slow_query_log','slow_query_log_file','long_query_time');และโพสต์ผลลัพธ์
RolandoMySQLDBA

1
หากใครยังมีปัญหาหลังจากอ่านสิ่งนี้ให้ตรวจสอบตัวแปร log_output SET GLOBAL log_output=FILEแก้ไขให้ฉัน
molholm

คำตอบ:


21

ฉันคิดว่าฉันได้คำตอบ:

คุณต้องใส่ตัวเลือกเหล่านั้นใน[mysqld]ส่วน

[mysqld]
slow-query-log=1
slow-query-log-file=/var/logs/my.slow.log
long_query_time=1

และเริ่ม mysql ใหม่

อัพเดท 2013-03-05 16:36 น

ฉันไม่รู้ว่าทำไมสิ่งนี้ยังคงเกิดขึ้น แต่โปรดลอง:

service mysql stop
rm -f /var/logs/my.slow.log
touch /var/logs/my.slow.log
chown mysql:mysql /var/logs/my.slow.log
service mysql start

จากนั้นเรียกใช้SELECT SLEEP(10);และดูว่ามันตกลงมาหรือไม่/var/logs/my.slow.log


ขอบคุณ! สิ่งที่คุณแนะนำช่วยดูเหมือนว่าการตั้งค่ากำลังบันทึกอย่างถูกต้องอย่างไรก็ตามฉันยังไม่ได้รับสิ่งที่เขียน ฉันได้แก้ไขคำถามเพื่อสะท้อนสิ่งนี้
TheMethod

เฮ้อยากรู้อยากเห็นฉันใช้ระบบ Debian ภายใต้ VM เส้นทางที่ถูกต้องในการตอบของคุณ? /var/logs/แทน/var/log
Silviu-Marian

เพียงแค่ข้อมูล "touch & chown" จำเป็นสำหรับ CentOS 6.6 mysql 5.1.73 ในสภาพแวดล้อมเช่นกัน
Fumisky Wells

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