ฉันจะเปิดใช้งานฟังก์ชั่น MySQL ที่บันทึกคำสั่งการสืบค้น SQL แต่ละคำสั่งที่ได้รับจากลูกค้าและเวลาที่คำสั่งการสอบถามส่งมาได้อย่างไร ฉันสามารถทำสิ่งนั้นใน phpmyadmin หรือ NaviCat ได้หรือไม่ ฉันจะวิเคราะห์บันทึกได้อย่างไร
ฉันจะเปิดใช้งานฟังก์ชั่น MySQL ที่บันทึกคำสั่งการสืบค้น SQL แต่ละคำสั่งที่ได้รับจากลูกค้าและเวลาที่คำสั่งการสอบถามส่งมาได้อย่างไร ฉันสามารถทำสิ่งนั้นใน phpmyadmin หรือ NaviCat ได้หรือไม่ ฉันจะวิเคราะห์บันทึกได้อย่างไร
คำตอบ:
อันดับแรกโปรดจำไว้ว่าไฟล์บันทึกการทำงานนี้สามารถเติบโตได้มากบนเซิร์ฟเวอร์ไม่ว่าง
สำหรับ mysql <5.1.29:
หากต้องการเปิดใช้งานบันทึกแบบสอบถามให้ใส่สิ่งนี้ลง/etc/my.cnf
ใน[mysqld]
ส่วน
log = /path/to/query.log #works for mysql < 5.1.29
นอกจากนี้เพื่อเปิดใช้งานจากคอนโซล MySQL
SET general_log = 1;
ดูhttp://dev.mysql.com/doc/refman/5.1/en/query-log.html
สำหรับ mysql 5.1.29+
ด้วย mysql 5.1.29+ log
ตัวเลือกจะถูกคัดค้าน ในการระบุ logfile และเปิดใช้งานการบันทึกให้ใช้สิ่งนี้ใน my.cnf ใน[mysqld]
ส่วน:
general_log_file = /path/to/query.log
general_log = 1
อีกวิธีหนึ่งในการเปิดการบันทึกจากคอนโซล MySQL (ต้องระบุตำแหน่งไฟล์บันทึกอย่างใดหรือหาตำแหน่งเริ่มต้น):
SET global general_log = 1;
นอกจากนี้โปรดทราบว่ามีตัวเลือกเพิ่มเติมในการเข้าสู่ระบบเฉพาะแบบสอบถามที่ช้าหรือผู้ที่ไม่ได้ใช้ดัชนี
SET global general_log_file='c:/Temp/mysql.log';
SET global general_log = on;
SET global log_output = 'file';
ดูคำตอบของคำถามอื่นที่เกี่ยวข้อง มันแสดงให้เห็นถึงวิธีการเปิดใช้งานปิดการใช้งานและเพื่อดูบันทึกบนเซิร์ฟเวอร์สดโดยไม่ต้องเริ่มต้นใหม่
บันทึกการสืบค้นทั้งหมดใน mysql
นี่คือบทสรุป:
หากคุณไม่ต้องการหรือไม่สามารถรีสตาร์ทเซิร์ฟเวอร์ MySQL คุณสามารถดำเนินการเช่นนี้บนเซิร์ฟเวอร์ที่ใช้งานของคุณ:
สร้างตารางบันทึกของคุณ (ดูคำตอบ )
เปิดใช้งานการบันทึกการสืบค้นในฐานข้อมูล (โปรดทราบว่าสตริง 'ตาราง' ควรใส่อย่างแท้จริงและไม่ถูกแทนที่ด้วยชื่อตารางใด ๆ ขอบคุณNicholas Pickering )
SET global general_log = 1;
SET global log_output = 'table';
select * from mysql.general_log;
SET global general_log = 0;
ฉันใช้วิธีนี้ในการบันทึกเมื่อฉันต้องการเพิ่มประสิทธิภาพการโหลดหน้าเว็บที่แตกต่างกันอย่างรวดเร็ว มันเป็นเคล็ดลับเล็กน้อย ...
เข้าสู่ตาราง
SET global general_log = 1;
SET global log_output = 'table';
จากนั้นคุณสามารถเลือกจากของฉัน mysql.general_log
ตารางเพื่อเรียกค้นคิวรีล่าสุด
ฉันสามารถทำสิ่งที่คล้ายกับtail -f
ใน mysql.log แต่มีการปรับแต่งเพิ่มเติม ...
select * from mysql.general_log
where event_time > (now() - INTERVAL 8 SECOND) and thread_id not in(9 , 628)
and argument <> "SELECT 1" and argument <> ""
and argument <> "SET NAMES 'UTF8'" and argument <> "SHOW STATUS"
and command_type = "Query" and argument <> "SET PROFILING=1"
สิ่งนี้ทำให้ง่ายต่อการดูข้อความค้นหาของฉันที่ฉันสามารถลองและตัดทอน ฉันใช้ช่วงเวลา 8 วินาทีเพื่อดึงข้อมูลคำค้นหาที่ดำเนินการภายใน 8 วินาทีที่ผ่านมาเท่านั้น
นี่เป็นความเห็นอยู่แล้ว แต่สมควรได้รับคำตอบของตัวเอง: โดยไม่ต้องแก้ไขไฟล์ config: ใน mysql, เป็น root, ให้ทำ
SET global general_log_file='/tmp/mysql.log';
SET global log_output = 'file';
SET global general_log = on;
อย่าลืมปิดหลังจากนั้น:
SET global general_log = off;
/tmp/
มันอาจจะอยู่ที่ไหนสักแห่งเช่น/tmp/systemd-private-...-mariadb.service-.../tmp/
คุณสามารถปิดการใช้งานหรือเปิดใช้งานบันทึกการสืบค้นทั่วไป (ซึ่งบันทึกการสืบค้นทั้งหมด) ด้วย
SET GLOBAL general_log = 1 # (or 0 to disable)
ฉันต้องการเปิดใช้งานล็อกไฟล์ MySQL เพื่อดูข้อความค้นหาและฉันได้แก้ไขปัญหานี้ด้วยคำแนะนำด้านล่าง
/etc/mysql/mysql.conf.d
และเปิดใช้งานบรรทัดด้านล่าง
general_log_file = /var/log/mysql/mysql.log
general_log = 1
/etc/init.d/mysql restart
/var/log/mysql/
และตรวจสอบบันทึก// To see global variable is enabled or not and location of query log
SHOW VARIABLES like 'general%';
// Set query log on
SET GLOBAL general_log = ON;
บน Windows คุณสามารถไปที่
C:\wamp\bin\mysql\mysql5.1.53\my.ini
แทรกบรรทัดนี้ในmy.ini
general_log_file = c:/wamp/logs/mysql_query_log.log
my.iniไฟล์ในที่สุดก็มีลักษณะเช่นนี้
...
...
...
socket = /tmp/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
basedir=c:/wamp/bin/mysql/mysql5.1.53
log = c:/wamp/logs/mysql_query_log.log #dump query logs in this file
log-error=c:/wamp/logs/mysql.log
datadir=c:/wamp/bin/mysql/mysql5.1.53/data
...
...
...
...
มีข้อผิดพลาดในรุ่น MySQL 5.6 แม้ mysqld แสดงเป็น:
Default options are read from the following files in the given order:
C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf
การตั้งค่าจริงๆกำลังอ่านตามลำดับต่อไปนี้:
Default options are read from the following files in the given order:
C:\ProgramData\MySQL\MySQL Server 5.6\my.ini C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf
ตรวจสอบไฟล์: "เซิร์ฟเวอร์ C: \ ProgramData \ MySQL \ MySQL 5.6 \ my.ini"
หวังว่าจะช่วยใครซักคน
สำหรับmysql> = 5.5เฉพาะสำหรับการสืบค้นที่ช้า (1 วินาทีขึ้นไป) my.cfg
[mysqld]
slow-query-log = 1
slow-query-log-file = /var/log/mysql/mysql-slow.log
long_query_time = 1
log-queries-not-using-indexes
วิธีเปิดใช้งานบันทึกคิวรีในเครื่อง MAC:
เปิดไฟล์ต่อไปนี้:
vi /private/etc/my.cnf
ตั้งค่า url บันทึกการสืบค้นภายใต้ส่วน 'mysqld' ดังต่อไปนี้:
[mysqld]
general_log_file=/Users/kumanan/Documents/mysql_query.log
มีเครื่องไม่กี่เครื่องที่ไม่ได้บันทึกการสืบค้นอย่างเหมาะสมดังนั้นในกรณีนี้คุณสามารถเปิดใช้งานได้จากคอนโซลของ MySQL
mysql> SET global general_log = 1;
ไม่ใช่คำตอบที่แน่นอนสำหรับคำถามเพราะคำถามมีคำตอบที่ดีอยู่แล้ว นี่คือข้อมูลด้านข้าง การเปิดใช้งาน general_log ทำให้ประสิทธิภาพของ MySQL ลดลง ฉันออกไปgeneral_log =1
โดยไม่ตั้งใจบนเซิร์ฟเวอร์ที่ใช้งานจริงและใช้เวลาเป็นชั่วโมงในการหาสาเหตุที่ทำให้ประสิทธิภาพไม่เทียบเท่ากับการตั้งค่าที่คล้ายกันในเซิร์ฟเวอร์อื่น ๆ จากนั้นฉันพบสิ่งนี้ซึ่งอธิบายถึงผลกระทบของการเปิดใช้งานบันทึกทั่วไป http://www.fromdual.com/general_query_log_vs_mysql_performancehttp://www.fromdual.com/general_query_log_vs_mysql_performance
สรุปเรื่องราวไม่ต้องใส่general_log=1
ใน.cnf
ไฟล์ แทนที่จะใช้set global general_log =1
เวลาสั้น ๆ เพียงเพื่อเข้าสู่ระบบมากพอที่จะหาสิ่งที่คุณพยายามที่จะหาแล้วปิด
ใน phpMyAdmin 4.0 คุณไปที่สถานะ> การตรวจสอบ ในนั้นคุณสามารถเปิดใช้งานบันทึกแบบสอบถามช้าและบันทึกทั่วไปดูการตรวจสอบสดเลือกส่วนของกราฟดูแบบสอบถามที่เกี่ยวข้องและวิเคราะห์พวกเขา
ฉันต้องดรอปและสร้างบันทึกทั่วไปใหม่ ณ จุดหนึ่ง ในช่วงนันทนาการชุดตัวละครสับสนและฉันลงเอยด้วยข้อผิดพลาดนี้ในบันทึก:
[ERROR] Incorrect definition of table mysql.general_log: expected the type of column 'user_host' at position 1 to have character set 'utf8' but found character set 'latin1'
ดังนั้นหากคำตอบมาตรฐานของ "ตรวจสอบเพื่อให้แน่ใจว่าการบันทึกเปิดอยู่" ไม่ได้ผลสำหรับคุณตรวจสอบเพื่อให้แน่ใจว่าเขตข้อมูลของคุณมีชุดอักขระที่ถูกต้อง