Question

Je viens récemment mis à jour MySQL 5.1.6 afin de tirer parti de la possibilité d'enregistrer le journal général à une table -> à savoir mysql.general_log. Une fois que je l'ai fait tout de suite été surpris, je le nombre de requêtes réellement frapper notre système. J'ai environ 40 000 lignes dans ce tableau journal général de la première heure. Je ne l'ai pas trouvé écrit sur la documentation MySQL au sujet s'il y a une limite de taille de la table du journal général.

Y at-il un problème de laisser ce journal général grandir à ce rythme?

S'il y a un problème de taille, comment faire face?

Y a-t-il des pratiques acceptées comment faire face à un problème de taille s'il y a une?

Devrais-je faire un événement pour purger la table et enregistrer les données dans un fichier tous si souvent?

Merci beaucoup pour l'aide!

Était-ce utile?

La solution

Le tableau general_log par défaut utilise le moteur CSV, qui est littéralement juste un fichier CSV complet sur votre disque dur, mais peut être accessible via SQL. Cela signifie que sa limite de taille est la limite de taille des fichiers sur votre système de fichiers.

Autres conseils

Je fais quelque chose comme ça pour mon fichier journal. Je suis seulement intéressé à garder les dernières 24 heures, mais vous pouvez modifier l'événement pour créer des tables d'archives, etc. Il ne sera pas le journal pour les quelques secondes qu'il faut exécuter l'événement, mais je ne me dérange pas.

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

Vous devriez utiliser un utilitaire comme mysql-log-rotate http: / /dev.mysql.com/doc/refman/5.0/en/log-file-maintenance.html pour faire tourner le fichier journal.

Je ne sais pas si cela est la meilleure pratique, mais ce fut ma solution:

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top