กลไกนั้นแตกต่างจากระบบปฏิบัติการอย่างสิ้นเชิง
การตั้งค่าล็อกเอาท์พุทสามารถตั้งค่าได้ทั้งในตารางไฟล์ (ค่าเริ่มต้น) หรือไม่มี
ถ้าคุณใช้สิ่งนี้
[mysqld]
log-output=TABLE
นี่จะทำให้การบันทึกสำหรับบันทึกทั่วไปและ / หรือบันทึกช้าไปที่ไฟล์ CSV คุณสามารถแปลง CSV เป็น MyISAM ดังต่อไปนี้:
SET @old_log_state = @@global.general_log;
SET GLOBAL general_log = 'OFF';
ALTER TABLE mysql.general_log ENGINE = MyISAM;
ALTER TABLE mysql.general_log ADD INDEX (event_time);
SET GLOBAL general_log = @old_log_state;
จากนั้นคุณสามารถปล่อยให้แฟ้มนี้เติบโตอย่างมากและคุณจะต้องล้างตารางทุก ๆ ครั้ง นี่คือวิธีล้างตาราง general_log และเก็บ 3 วันล่าสุด:
SET @old_log_state = @@global.general_log;
SET GLOBAL general_log = 'OFF';
CREATE TABLE mysql.general_log_new LIKE mysql.general_log;
INSERT INTO mysql.general_log_new
SELECT * FROM mysql.general_log WHERE event_time > NOW() - INTERVAL 3 DAY;
DROP TABLE mysql.general_log;
ALTER TABLE mysql.general_log_new RENAME mysql.general_log;
SET GLOBAL general_log = @old_log_state;
สิ่งที่เกี่ยวกับ syslog (var / log / messages) คุณต้องสคริปต์ด้วยตัวคุณเอง ก่อนอื่นคุณต้องมีสิ่งนี้:
[mysqld]
log
log-ouput=TABLE,FILE
general-log-file=/var/log/mysql-general.log
หากคุณต้องการรวบรวมบันทึกทั่วไปในทั้งสองรูปแบบหรือ
[mysqld]
log
general-log-file=/var/log/mysql-general.log
เพียงแค่รูปแบบไฟล์
ตอนนี้สร้างสคริปต์เพื่อรวบรวมการเปลี่ยนแปลงใน /var/log/general.log สคริปต์ควรมีลักษณะดังนี้:
NEWCOUNT=`wc -l < /var/log/mysql-general.log`
if [ -f /tmp/general-log-lines.txt ]
then
OLDCOUNT=`cat /tmp/general-log-lines.txt`
if [ ${OLDCOUNT} -lt ${NEWCOUNT} ]
then
DIFF=`echo ${NEWCOUNT}-${OLDCOUNT}|bc`
tail -${DIFF} < /var/log/mysql-general.log >> /var/log/messages
echo ${NEWCOUNT} > /tmp/general-log-lines.txt
fi
fi
เรียกใช้สคริปต์นี้ทุกนาที ฉันแนะนำให้ตัดทอนบันทึกทั่วไปทุกเที่ยงคืนเช่นนี้
echo -n > /var/log/mysql-general.log
ให้มันลอง !!!