MySQL günlüklerini syslog'a nasıl gönderirim?


13

Ubuntu (10.04 LTS) üzerinde MySQL (5.1.41) oturum açmak için syslog kullanmak istiyorum. Syslog hata günlüğü çıktı bilgi bulundu.

[mysqld_safe]
syslog

Ancak syslog'u günlük ve yavaş sorgu günlüklerini kaydetmek için kullanmak istiyorum. Lütfen bana nasıl config dosyası yazacağımı bildir.

Bunun nasıl yapılacağını referans kılavuzunda bulamadım.

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


Eminim birçok kişi bu soruyu sordu. Bu nedenle, bu sorunu herkese açık olarak gösterdiğiniz için +1 kazanırsınız.
RolandoMySQLDBA

DİKKAT : 5.7.5 yazımı olarak değiştiriyor olabilir log_syslog.
Rick James

Yanıtlar:


12

Bu çok daha basit bir şekilde şu şekilde yapılır:

cd - mysql klasörleri:

mkfifo mysql-general.log

my.cnf içinde söyle:

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

Ardından, sistem günlüğünüzü / sistem günlüğünüzü FIFO borusunu okuyacak ve onunla olduğu gibi yapacak şekilde yapılandırın.

Benim durumumda, ancak sadece hata günlükleri ve yavaş sorgu günlükleri ile merkezi bir sunucuya net boru.

Yerel kopyayı da saklamak istediğiniz durumlarda, yalnızca yukarıda açıklandığı gibi tablo ve dosyaya çıktı olarak ayarlayın.


Bu yöntem kulağa ilginç geliyor. Ağlarını trafik selleri için hazırlamalıdır, çünkü her şey ve büyükannesi genel kütükte yer alır. Bu, her komutu ve oturum açan her kullanıcı kimliğini sıkı bir şekilde kontrol eden kesin kurulum kurumsal yüklemeleri olacaktır. Bu bir +1 !!!
RolandoMySQLDBA

3
fifo'nun da yazılmadığı takdirde dinleme programlarını dondurmak gibi talihsiz bir eğilimi vardır. Bu nedenle, MySQL bu fifoya yazmayı bırakırsa, syslog da durabilir.
Stefan Lasiewski

4

Bu mekanizma işletim sistemi sistem günlüğünden tamamen farklıdır.

Günlük çıktısının ayarlanması TABLO, DOSYA (varsayılan) veya YOK olarak ayarlanabilir

bunu kullanırsan

[mysqld]
log-output=TABLE

Bu, genel günlük ve / veya yavaş günlük günlüğünün CSV dosyasına gitmesine neden olur. Bu CSV'yi MyISAM'a aşağıdaki gibi dönüştürebilirsiniz:

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;

Daha sonra bu dosyanın muazzam bir şekilde büyümesine izin verebilirsiniz ve tabloyu sık sık temizlemeniz gerekir. General_log tablosunu nasıl temizleyeceğiniz ve son 3 günü nasıl tutacağınız aşağıda açıklanmıştır:

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;

Sistem günlüğü (var / log / messages) ne olacak? Bunu kendiniz yazmalısınız. İlk olarak, şunlara ihtiyacınız vardır:

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

Genel günlüğü her iki biçimde de toplamak istiyorsanız veya

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

sadece dosya biçimi için.

Şimdi /var/log/general.log 'daki değişiklikleri toplamak için bir komut dosyası oluşturun. Komut dosyası şöyle görünmelidir:

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

Bu komut dosyasını her dakika çalıştırın. Genel günlüğün her gece yarısı bu şekilde kesilmesini öneriyorum

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

Bir şans ver !!!


4

/Etc/my.cnf dosyasında ayarlayın.

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

Düzenleme /etc/rsyslog.conf (RHEL / CentOS) dosyası ve modül etkinleştirmek imfile okumak için /path/to/mysql/dir/mysql-general.log sonra ve, yapılandırılmış bir aralık saygı uzaktan günlüğü sunucusu göndermek PollingInterval parametresi.

Bu bölüm aşağıdaki gibi görünmelidir:

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")

Çizgiyi WorkDirectory ile ayırın

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

Ve tüm günlükleri uzaktan gönderecek şekilde yapılandırın

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

Veya

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

2
/Etc/rsyslog.conf dosyasının kendisini düzenlemekten kaçınmak ve özel ayarlarınızı denetlemek için /etc/rsyslog.d dosyasında oluşturulan bir dosyayı kullanmak isteyebilirsiniz. Açılır dosyalar, yükseltmelerle ilgili dağıtım yapılandırmalarının kontrollerini korur ve paketlenmesi ve diğer ana bilgisayarlarla senkronize edilmesi kolaydır. /Etc/php.d, /etc/sysctl.d ve /etc/security/limits.d değerlerini karşılaştırın.
user2066657
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.