Frage

Ich habe erst kürzlich auf MySQL 5.1.6 aktualisiert, um die Fähigkeit zu nutzen, das allgemeine Protokoll in einer Tabelle zu speichern -> IE mysql.General_log. Als ich dies tat, war ich sofort überrascht, wie viele Fragen unser System tatsächlich treffen. Ich habe ungefähr 40.000 Zeilen in dieser allgemeinen Protokolltabelle aus der ersten Stunde. Ich habe es nicht in den MySQL -Dokumenten darüber geschrieben, ob es eine allgemeine Log -Tabellengrößenbeschränkung gibt.

Gibt es ein Problem, dieses allgemeine Protokoll mit dieser Geschwindigkeit wachsen zu lassen?

Wenn es ein Größenproblem gibt, wie kann man damit umgehen?

Gibt es einige akzeptierte Praktiken, wie sie mit einem Größenproblem umgehen können, wenn es eines gibt?

Sollte ich ein Ereignis machen, um die Tabelle zu löschen und die Daten von Zeit zu Zeit in einer Datei zu speichern?

Vielen Dank für die Hilfe!

War es hilfreich?

Lösung

Die Tabelle General_log standardmäßig verwendet die CSV-Engine, die buchstäblich nur eine ausgewachsene CSV-Datei auf Ihrem Laufwerk ist, aber über SQL zugegriffen werden kann. Dies bedeutet, dass die Größengrenze die Größengrenze von Dateien in Ihrem Dateisystem ist.

Andere Tipps

Ich mache so etwas für meine Protokolldatei. Ich bin nur daran interessiert, die letzten 24 Stunden zu behalten, aber Sie könnten das Ereignis an die Erstellung von Archivtischen usw. optimieren. Sie werden die wenigen Sekunden, die das Ereignis benötigt, nicht protokolliert, aber es macht mir nichts aus.

CREATE EVENT `prune_general_log` ON SCHEDULE
EVERY 1 DAY STARTS '2013-10-18'
ON COMPLETION NOT PRESERVE
ENABLE
COMMENT 'This will trim the general_log table to contain only the past 24 hours of logs.'
DO BEGIN
  SET GLOBAL general_log = 'OFF';
  RENAME TABLE mysql.general_log TO mysql.general_log2;
  DELETE FROM mysql.general_log2 WHERE event_time <= NOW()-INTERVAL 24 HOUR;
  OPTIMIZE TABLE general_log2;
  RENAME TABLE mysql.general_log2 TO mysql.general_log;
  SET GLOBAL general_log = 'ON';
END

Sie sollten ein Dienstprogramm wie ein Gebrauch verwenden wie mysql-log-rotate http://dev.mysql.com/doc/refman/5.0/en/log-file-maining.html Für rotierende Protokolldatei.

Ich bin mir nicht sicher, ob dies Best Practice ist, aber dies war meine Lösung:

DATE=$(date +"%Y%m%d%H%M")
mv general_log.CSV general_log.${DATE}.csv  # move the log table file
sudo -u mysql -g mysql touch general_log.CSV  # create a new log table file with correct owner and group
mysql -u root -e "FLUSH TABLE mysql.general_log"  # flush the log table
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top