ฉันจะเปิดใช้งานบันทึกการสืบค้นช้าของ MySQL โดยไม่ต้องรีสตาร์ท MySQL ได้อย่างไร


88

ฉันทำตามคำแนะนำที่นี่: http://crazytoon.com/2007/07/23/mysql-changing-runtime-variables-with-out-restarting-mysql-server/แต่ดูเหมือนว่าจะตั้งค่าขีด จำกัด เท่านั้น

ฉันต้องทำอะไรอีกไหมเช่น set the filepath?

ตามเอกสารของ MySQL

หากไม่มีการกำหนดค่า file_name สำหรับ --log-slow-queries ชื่อเริ่มต้นคือ 
host_name-slow.log เซิร์ฟเวอร์สร้างไฟล์ในไดเร็กทอรีข้อมูลเว้นแต่
มีการกำหนดชื่อพา ธ สัมบูรณ์เพื่อระบุไดเร็กทอรีอื่น 

วิ่ง

แสดงความหลากหลาย

ไม่ได้ระบุเส้นทางไฟล์บันทึกใด ๆ และฉันไม่เห็นไฟล์บันทึกการสืบค้นที่ช้าบนเซิร์ฟเวอร์ของฉัน ...

แก้ไข

ดูเหมือนว่าฉันใช้เซิร์ฟเวอร์เวอร์ชัน 5.0.77 ดังนั้นฉันต้องทำ:

SET GLOBAL log_slow_queries = 1;

แต่ฉันได้รับ: ERROR 1238 (HY000): ตัวแปร 'log_slow_queries' เป็นตัวแปรอ่านอย่างเดียว

ฉันคิดว่าฉันจะต้องรีสตาร์ทเซิร์ฟเวอร์และตั้งค่า log_slow_queries ใน config ของฉันหรือไม่


5
ทำไมคุณไม่ทดสอบสิ่งนั้นในกล่องพัฒนา
Martin

คำตอบ:


93

ลองSET GLOBAL slow_query_log = 'ON';และบางทีFLUSH LOGS;

ถือว่าคุณกำลังใช้ MySQL 5.1 หรือใหม่กว่า หากคุณใช้เวอร์ชันก่อนหน้าคุณจะต้องรีสตาร์ทเซิร์ฟเวอร์ นี้ถูกบันทึกไว้ในคู่มือการใช้งาน MySQL คุณสามารถกำหนดค่าบันทึกในไฟล์กำหนดค่าหรือในบรรทัดคำสั่ง


8
FLUSH SLOW LOGS มีอยู่ใน 5.5!
Carson Reinke

ทำงานให้ฉันใน 10.0.36-MariaDB ด้วย SET GLOBAL slow_query_log = 'OFF';ทำงานได้ตามที่คาดไว้เช่นกัน FLUSH LOGSไม่จำเป็นในทั้งสองกรณี
rinogo

27

สำหรับการค้นหาที่ช้าในเวอร์ชัน <5.1 การกำหนดค่าต่อไปนี้ใช้ได้กับฉัน:

log_slow_queries=/var/log/mysql/slow-query.log
long_query_time=20
log_queries_not_using_indexes=YES

นอกจากนี้ยังทราบเพื่อวางไว้ภายใต้[mysqld]ส่วนหนึ่งของไฟล์ config mysqldและเริ่มต้นใหม่


2
เป็น log_slow_queries แทนที่จะเป็น log-slow-queries
naomi

6
นอกจากนี้คุณต้องสร้างไฟล์บันทึกด้วยตนเองก่อน:sudo mkdir /var/log/mysql sudo touch /var/log/mysql/slow-query.log sudo chown -R _mysql /var/log/mysql/
Charles

1
log_slow_queriesเลิกใช้งานใน MySQL 5.1.29 โดยslow-query-log. คู่มือการใช้งาน MySQL 5.1 อ้างอิงมีรายละเอียดเพิ่มเติม
Xeoncross


7

คู่มือ MySQL - ไฟล์บันทึกการสืบค้นช้า

สิ่งนี้อ้างว่าคุณสามารถเรียกใช้สิ่งต่อไปนี้เพื่อตั้งค่าไฟล์บันทึกช้า (5.1.6 เป็นต้นไป):

set global slow_query_log_file = 'path';

ตัวแปร slow_query_log เพียงแค่ควบคุมว่าจะเปิดใช้งานหรือไม่


6

งานเหล่านี้

SET GLOBAL LOG_SLOW_TIME = 1;
SET GLOBAL LOG_QUERIES_NOT_USING_INDEXES = ON;

เสียในการตั้งค่าของฉัน 5.1.42

SET GLOBAL LOG_SLOW_QUERIES = ON;
SET GLOBAL SLOW_QUERY_LOG = ON;
set @@global.log_slow_queries=1;

http://bugs.mysql.com/bug.php?id=32565

ดูเหมือนว่าวิธีที่ดีที่สุดคือตั้งค่า log_slow_time ไว้สูงมากดังนั้นจึง "ปิด" บันทึกการสืบค้นแบบช้า log_slow_time ต่ำลงเพื่อเปิดใช้งาน ใช้เคล็ดลับเดียวกัน (ตั้งค่าเป็นปิด) สำหรับ log_queries_not_using_indexes


5

ฉันคิดว่าปัญหาคือการตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์ MySQL มีสิทธิ์ในไฟล์และสามารถแก้ไขได้

หากคุณสามารถทำให้มันเข้าถึงไฟล์ได้คุณสามารถลองตั้งค่า:
SET GLOBAL slow_query_log = 1;

หากไม่เป็นเช่นนั้นคุณสามารถ 'โหลดซ้ำ' เซิร์ฟเวอร์ได้ตลอดเวลาหลังจากเปลี่ยนไฟล์การกำหนดค่า บนลินุกซ์มักจะ/etc/init.d/mysql reload


ฉันได้รับ: ข้อผิดพลาด 1193 (HY000): ตัวแปรระบบที่ไม่รู้จัก 'slow_query_log'
mmattax

คุณใช้ MySQL เวอร์ชันใด
Ian Gregory

3

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

ในการเริ่มล็อกอินตารางแทนไฟล์:

set global log_output = “TABLE”;

ในการเปิดใช้งานบันทึกการสืบค้นทั่วไปและช้า:

set global general_log = 1;
set global slow_query_log = 1;

ในการดูบันทึก:

select * from mysql.slow_log;
select * from mysql.general_log;

ดูรายละเอียดเพิ่มเติมได้ที่ลิงค์นี้

http://easysolutionweb.com/technology/mysql-server-logs/


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