Question

Je veux utiliser syslog pour la connexion MySQL (5.1.41) sur Ubuntu (10.04 LTS). J'ai trouvé des informations qui journal syslog d'erreur de sortie.

[mysqld_safe]
syslog

Mais je veux utiliser syslog pour la connexion des journaux généraux et les journaux de requêtes lentes. S'il vous plaît me conseiller comment écrire le fichier de configuration?

Je ne pouvais pas trouver comment faire dans le manuel de référence.

  

http://dev.mysql.com/doc/refman/5.1/en /log-destinations.html

Était-ce utile?

La solution

Cela est beaucoup plus simple fait de cette façon:

cd aux dossiers mysql:

mkfifo mysql-general.log

my.cnf dire il:

[mysqld]
general-log-file = /path/to/mysql/dir/mysql-general.log

Ensuite, configurez votre syslog / syslog-ng pour lire le tube FIFO et faire avec elle comme il le fera ..

Dans mon cas, je le tuyau sur réseau à un serveur centralisé avec seulement les journaux d'erreur et les journaux de requêtes lentes cependant.

Dans les situations où vous souhaitez conserver également une copie locale, il suffit de définir à la sortie de la table et le fichier comme décrit ci-dessus.

Autres conseils

Ce mécanisme est tout à fait différent du syslog OS.

Configuration log-sortie peut être réglée de déposer, LE FICHIER (par défaut), ou NONE

si vous utilisez cette

[mysqld]
log-output=TABLE

Cela entraînera la consignation du journal général et / ou le journal lent à aller dans un fichier CSV. Vous pouvez convertir ce fichier CSV à MyISAM comme suit:

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;

Vous pouvez alors laisser ce fichier croître énormément et vous devrez purger la table tous si souvent. Voici comment purger la table general_log et garder les 3 derniers jours:

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;

Qu'en est-syslog (var / log / messages)? Vous devez script vous-même. Tout d'abord, vous devez soit ceci:

[mysqld]
log
log-ouput=TABLE,FILE
general-log-file=/var/log/mysql-general.log

si vous voulez collecter le journal général dans les deux formats ou

[mysqld]
log
general-log-file=/var/log/mysql-general.log

pour juste le format de fichier.

Maintenant, faire un script pour recueillir des modifications à /var/log/general.log. Le script devrait ressembler beaucoup comme ceci:

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

Exécuter ce script chaque minute. Je recommande tronquer le journal général minuit tous les jours comme celui-ci

echo -n > /var/log/mysql-general.log

Lui donner un essai !!!

Dans /etc/my.cnf, réglez-le.

[mysqld]
general-log-file = /path/to/mysql/dir/mysql-general.log

Modifier /etc/rsyslog.conf fichier (RHEL / CentOS), et activer le module imfile pour lire / chemin / vers / mysql / dir / mysql -general.log et ensuite, l'envoyer au serveur syslog distant, en respectant un intervalle configuré dans le paramètre PollingInterval .

Cette section devrait ressembler à ceci ci-dessous:

module(load="imfile" PollingInterval="1")

input(type="imfile"
    File="/path/to/mysql/dir/mysql-general.log"
    stateFile="statefile-mysql-general"
    Tag="mysql-general"
    Severity="warning"
    Facility="local1")

Uncoment la ligne avec WorkDirectory

$WorkDirectory /var/lib/rsyslog # where to place spool files

et le configurer pour envoyer tous les journaux à distance

*.* @@remote-ip:514 ## For TCP Connection

ou

 *.* @remote-ip:514 ## For UDP Connection
Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top