มีคำถาม / วิธีแสดงแบบสอบถามล่าสุดที่ดำเนินการบนเซิร์ฟเวอร์ทั้งหมดหรือไม่
มีคำถาม / วิธีแสดงแบบสอบถามล่าสุดที่ดำเนินการบนเซิร์ฟเวอร์ทั้งหมดหรือไม่
คำตอบ:
สำหรับผู้ที่มีความสุขกับ MySQL> = 5.1.12 คุณสามารถควบคุมตัวเลือกนี้ได้ทั่วโลกในขณะใช้งานจริง:
SET GLOBAL log_output = 'TABLE';SET GLOBAL general_log = 'ON';mysql.general_logหากคุณต้องการที่จะส่งออกไปยังไฟล์แทนตาราง:
SET GLOBAL log_output = "FILE";   เริ่มต้นSET GLOBAL general_log_file = "/path/to/your/logfile.log";SET GLOBAL general_log = 'ON';ฉันชอบวิธีนี้ในการแก้ไขไฟล์. cnf เพราะ:
my.cnfไฟล์และอาจเปิดการบันทึกอย่างถาวร/var/log /var/data/log /opt /home/mysql_savior/varสำหรับข้อมูลเพิ่มเติมโปรดดู คู่มือการอ้างอิง MySQL 5.1 - ตัวแปรระบบเซิร์ฟเวอร์ - general_log
คุณสามารถเปิดใช้งานบันทึกแบบสอบถามทั่วไปสำหรับการวินิจฉัยประเภทนั้น โดยทั่วไปคุณจะไม่บันทึกคำสั่ง SELECT ทั้งหมดบนเซิร์ฟเวอร์ที่ใช้งานจริง
แก้ไขการกำหนดค่า MySQL ของคุณเช่น /etc/mysql/my.cnf - ค้นหาหรือเพิ่มบรรทัดเช่นนี้
[mysqld]
log = /var/log/mysql/mysql.logเริ่ม mysql เพื่อรับการเปลี่ยนแปลงใหม่ตอนนี้คุณทำได้แล้ว
tail -f /var/log/mysql/mysql.logสวัสดีคุณสามารถดูข้อความค้นหาที่มา
คุณสามารถทำสิ่งที่ไหลสำหรับการตรวจสอบบันทึกแบบสอบถาม mysql
เปิดไฟล์การกำหนดค่า mysql my.cnf
sudo nano /etc/mysql/my.cnfค้นหาบรรทัดต่อไปนี้ภายใต้[mysqld]หัวเรื่องและยกเลิกหมายเหตุบรรทัดเหล่านี้เพื่อเปิดใช้งานบันทึก
general_log_file        = /var/log/mysql/mysql.log
general_log             = 1รีสตาร์ทเซิร์ฟเวอร์ mysql ของคุณเพื่อสะท้อนการเปลี่ยนแปลง
sudo service mysql startตรวจสอบบันทึกเซิร์ฟเวอร์ mysql ด้วยคำสั่งดังต่อไปนี้ใน terminal
tail -f /var/log/mysql/mysql.logSELECT * FROM  mysql.general_log  WHERE command_type ='Query' LIMIT total;1) หากเปิดใช้งานการบันทึก mysql ทั่วไปเราสามารถตรวจสอบคำสั่งในไฟล์บันทึกหรือตารางตามสิ่งที่เราได้กล่าวถึงในการกำหนดค่า ตรวจสอบสิ่งที่เปิดใช้งานด้วยคำสั่งต่อไปนี้
mysql> show variables like 'general_log%';
mysql> show variables like 'log_output%';ถ้าเราต้องการประวัติแบบสอบถามในตารางแล้ว
Execute SET GLOBAL log_output = 'TABLE';
Execute SET GLOBAL general_log = 'ON';ลองดูตาราง mysql.general_log
หากคุณต้องการส่งออกไปยังไฟล์:
SET GLOBAL log_output = "FILE"; which is set by default.
SET GLOBAL general_log_file = "/path/to/your/logfile.log";
SET GLOBAL general_log = 'ON';2) นอกจากนี้เรายังสามารถตรวจสอบแบบสอบถามในไฟล์. mysql_history cat ~ / .mysql_history
หากเปิดใช้งานmysql binlogคุณสามารถตรวจสอบคำสั่งที่รันโดยผู้ใช้โดยดำเนินการคำสั่งต่อไปนี้ในคอนโซล linux โดยเรียกดูไดเรกทอรี mysql binlog
mysqlbinlog binlog.000001 >  /tmp/statements.sqlการเปิดใช้งาน
[mysqld]
log = /var/log/mysql/mysql.logหรือบันทึกทั่วไปจะมีผลต่อประสิทธิภาพของ mysql
หลังจากอ่านคำตอบของพอลฉันก็ไปขุดหาข้อมูลเพิ่มเติมเกี่ยวกับhttps://dev.mysql.com/doc/refman/5.7/en/query-log.html
ฉันพบรหัสที่มีประโยชน์จริง ๆ โดยบุคคล นี่คือบทสรุปของบริบท
(หมายเหตุ: รหัสต่อไปนี้ไม่ใช่ของฉัน)
สคริปต์นี้เป็นตัวอย่างในการรักษาความสะอาดของตารางซึ่งจะช่วยให้คุณลดขนาดตารางของคุณ หลังจากผ่านไปหนึ่งวันจะมีข้อความค้นหาบันทึกประมาณ 180k (ในไฟล์มันจะเป็น 30MB ต่อวัน)
คุณต้องเพิ่มคอลัมน์เพิ่มเติม (event_unix) จากนั้นคุณสามารถใช้สคริปต์นี้เพื่อรักษาความสะอาดของบันทึก ... มันจะอัปเดตการประทับเวลาเป็น Unix-timestamp ลบบันทึกที่เก่ากว่า 1 วันจากนั้นอัปเดต event_time ลงใน Timestamp จาก event_unix ... ฟังดูสับสนเล็กน้อย แต่มันใช้งานได้ดี
คำสั่งสำหรับคอลัมน์ใหม่:
SET GLOBAL general_log = 'OFF';
RENAME TABLE general_log TO general_log_temp;
ALTER TABLE `general_log_temp`
ADD COLUMN `event_unix` int(10) NOT NULL AFTER `event_time`;
RENAME TABLE general_log_temp TO general_log;
SET GLOBAL general_log = 'ON';สคริปต์การล้างข้อมูล:
SET GLOBAL general_log = 'OFF';
RENAME TABLE general_log TO general_log_temp;
UPDATE general_log_temp SET event_unix = UNIX_TIMESTAMP(event_time);
DELETE FROM `general_log_temp` WHERE `event_unix` < UNIX_TIMESTAMP(NOW()) - 86400;
UPDATE general_log_temp SET event_time = FROM_UNIXTIME(event_unix);
RENAME TABLE general_log_temp TO general_log;
SET GLOBAL general_log = 'ON';เครดิตไปที่ Sebastian Kaiser (ผู้เขียนต้นฉบับของรหัส)
หวังว่าบางคนจะพบว่ามีประโยชน์อย่างที่ฉันทำ
คุณสามารถดูต่อไปนี้ใน linux
cd /root
ls -alvi .mysql_history   อาจช่วยได้