it-swarm.asia

Bagaimana cara mengeluarkan log MySQL ke syslog?

Saya ingin menggunakan syslog untuk mencatat MySQL (5.1.41) di Ubuntu (10.04 LTS). Saya menemukan informasi yang menampilkan log kesalahan ke syslog.

[mysqld_safe]
syslog

Tapi saya ingin menggunakan syslog untuk mencatat log umum dan log permintaan lambat. Tolong beri tahu saya cara menulis file konfigurasi?

Saya tidak dapat menemukan cara melakukannya di manual referensi.

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

13
inohiro

Ini JAUH lebih sederhana dilakukan dengan cara ini:

cd ke folder mysql:

mkfifo mysql-general.log

di my.cnf katakan:

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

Kemudian, konfigurasikan syslog/syslog-ng Anda untuk membaca pipa FIFO dan lakukan sesuai keinginan Anda ..

Dalam kasus saya, saya pipa di net ke server terpusat dengan hanya log kesalahan dan log permintaan lambat.

Dalam situasi di mana Anda ingin menyimpan salinan lokal, cukup atur ke output ke tabel dan file seperti yang dijelaskan di atas.

12
Joel Hanger

Di /etc/my.cnf, atur.

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

Edit / etc/rsyslog.conf (RHEL/CentOS) file, dan aktifkan modul imfile untuk membaca / path/ke/mysql/dir/mysql-general .log dan kemudian, kirimkan ke server syslog jarak jauh, dengan menghormati interval yang dikonfigurasikan dalam parameter PollingInterval.

Bagian ini akan terlihat seperti ini di bawah ini:

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

Batalkan komentar baris dengan WorkDirectory

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

Dan konfigurasikan untuk mengirim semua log dari jarak jauh

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

Atau

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

Mekanisme itu sama sekali berbeda dari OS syslog.

Pengaturan log-output dapat diatur ke TABLE, FILE (default), atau NONE

jika Anda menggunakan ini

[mysqld]
log-output=TABLE

Ini akan menyebabkan logging untuk log umum dan/atau log lambat untuk pergi ke file CSV. Anda dapat mengonversi CSV ke MyISAM sebagai berikut:

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;

Anda kemudian dapat membiarkan file ini tumbuh dengan luar biasa dan Anda harus membersihkan tabel begitu sering. Berikut ini cara membersihkan tabel general_log dan menyimpan 3 hari terakhir:

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;

Bagaimana dengan syslog (var/log/messages)? Anda harus membuat skrip sendiri. Pertama, Anda perlu ini:

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

jika Anda ingin mengumpulkan log umum dalam kedua format atau

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

hanya untuk format file.

Sekarang buat skrip untuk mengumpulkan perubahan ke /var/log/general.log. Script akan terlihat seperti ini:

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

Jalankan skrip ini setiap menit. Saya sarankan memotong log umum setiap tengah malam seperti ini

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

Cobalah !!!

4
RolandoMySQLDBA