มีคำถาม / วิธีแสดงแบบสอบถามล่าสุดที่ดำเนินการบนเซิร์ฟเวอร์ทั้งหมดหรือไม่
มีคำถาม / วิธีแสดงแบบสอบถามล่าสุดที่ดำเนินการบนเซิร์ฟเวอร์ทั้งหมดหรือไม่
คำตอบ:
สำหรับผู้ที่มีความสุขกับ 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.log
SELECT * 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 -al
vi .mysql_history
อาจช่วยได้