이 메커니즘은 OS syslog와 완전히 다릅니다.
로그 출력 설정은 TABLE, FILE (기본값) 또는 NONE으로 설정 될 수 있습니다.
이것을 사용하면
[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
이 스크립트를 1 분마다 실행하십시오. 이런 식으로 자정마다 일반 로그를 자르는 것이 좋습니다.
echo -n > /var/log/mysql-general.log
시도 해봐 !!!