Domanda

Di recente sono stato aggiornato a MySQL 5.1.6 per sfruttare la possibilità di salvare il registro generale su una tabella -> cioè mysql.general_log. Una volta che l'ho fatto sono stato immediatamente sorpreso di quante domande stanno effettivamente colpendo il nostro sistema. Ho circa 40.000 righe in questa tabella di registro generale della prima ora. Non l'ho trovato scritto sui documenti MySQL se esiste un limite di dimensione della tabella di registro generale.

C'è un problema per lasciare che questo registro generale cresca a questo ritmo?

Se c'è un problema di dimensioni, come affrontarlo?

Ci sono alcune pratiche accettate come affrontare un problema di dimensioni se ce n'è uno?

Devo fare un evento per eliminare la tabella e salvare i dati in un file ogni tanto?

Grazie mille per l'aiuto!

È stato utile?

Soluzione

La tabella General_Log per impostazione predefinita utilizza il motore CSV, che è letteralmente solo un file CSV in piena regola sull'unità, ma è possibile accedere tramite SQL. Ciò significa che il suo limite di dimensioni è il limite di dimensioni dei file sul file system.

Altri suggerimenti

Faccio qualcosa del genere per il mio file di registro. Sono interessato solo a mantenere le ultime 24 ore, ma potresti modificare l'evento per creare tavoli di archivio, ecc. Non registrerà per i pochi secondi che ci vorrà l'evento per eseguire, ma non mi dispiace.

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

Dovresti usare un po 'di utilità come mysql-log-rotate http://dev.mysql.com/doc/refman/5.0/en/log-file-maintenance.html per il file di registro rotante.

Non sono sicuro se questa è la migliore pratica, ma questa era la mia soluzione:

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top