2016-06-15 4 views
1

Ich habe mehrere Leute, die einige Datenbankabfragen direkt in einige Systeme machen.Interaktive Abfragen von MySQL protokollieren

Ich möchte auf einem sicheren Syslog-Server alle Abfragen interaktiv/manuell ablegen, oder andernfalls alle Abfragen mit dem mysql binären Client.

ich Debian Jessie benutze und Oracle MySQL 5.6.31

Wie kann ich das erreichen?

+1

Warten wir ab, aber ich denke, Sie können nicht nach Client-Software filtern und Ihre einzigen Optionen sind alle Abfragen oder nur langsame Abfragen zu protokollieren. (Wenn der Server eine Verbindung erhält, hat er natürlich keine Möglichkeit zu wissen, ob Sie eine Tastatur eingeben oder ob zuvor SQL generiert wurde.) –

+0

Danke @ ÁlvaroGonzález; Ich habe tatsächlich vergessen, dass ich in der Vergangenheit eine mögliche Lösung gesehen habe, aber zu der Zeit war MySQL 5.7 noch in der Betaversion. Ich habe es zur Antwort gemacht. –

Antwort

0

Wie Sie aus MySQL 5.7 richtig erkannt haben, gibt es nun die Möglichkeit, sich auf syslog zu loggen.

Statt einen Alias ​​auf den Befehl zu schaffen, wie Sie oben haben, könnten Sie stattdessen syslog von zu einem [mysql] Abschnitt hinzufügen entweder Ihre /etc/mysql/my.cnf oder eine Datei in /etc/mysql/conf.d/

Wie in

[mysql] 
syslog 

Dies auch ermöglicht die praktische Integration in logwatch.

2

Ab MySQL 5.7 akzeptiert der Befehl mysql die Option --syslog. Also habe ich ein Testsystem auf MySQL 5.7 aufgerüstet, und es funktioniert. Ich werde einen Alias ​​mysql-mysql --syslog

Von MySQL 5.7 Reference Manual - mysql Logging

Syslog Logging Eigenschaften

machen Wenn die --syslog Option gegeben ist, mysql schreibt interaktive Anweisungen an die Systemprotokollfunktion. Die Nachrichtenprotokollierung hat folgende Eigenschaften: .

Die Protokollierung erfolgt auf der Ebene "Information". Dies entspricht der LOG_INFO-Priorität für Syslog unter Unix/Linux Syslog-Fähigkeit und EVENTLOG_INFORMATION_TYPE für das Windows-Ereignisprotokoll. Informationen zur Konfiguration Ihrer Protokollierungsfunktion finden Sie in der Systemdokumentation .

Die Nachrichtengröße ist auf 1024 Byte begrenzt.

Nachrichten bestehen aus der Kennung mysqlclient durch diese Werte gefolgt:

SYSTEM_USER

Das System Benutzernamen (Login-Namen) oder - wenn der Benutzer nicht bekannt ist.

MYSQL_USER

Die MySQL-Benutzername (mit der Option --user angegeben) oder - wenn die Benutzer sind nicht bekannt.

CONNECTION_ID:

Der Client-Verbindungskennung. Dies entspricht dem CONNECTION_ID() - Funktionswert in der Sitzung.

db_server

Der Server-Host oder - wenn der Host unbekannt ist.

DB

Die Standarddatenbank oder - falls keine Datenbank ausgewählt wurde.

QUERY

Der Text der protokollierten Anweisung.

Hier ist ein Beispiel für eine Ausgabe, die unter Linux mit --syslog erstellt wurde.Diese Ausgabe ist für die Lesbarkeit formatiert; jede geloggte Nachricht tatsächlich dauert eine einzelne Zeile.

Mar 7 12.39.25 myhost mysqlclient [20824]: SYSTEM_USER: 'Oscar', MYSQL_USER: 'my_oscar', CONNECTION_ID: 23, db_server: '127.0.0.1', DB: '-', Frage: 'Test verwenden'; Mar 7 12:39:28 myhost MysqlClient [20824]: SYSTEM_USER: 'oscar', MYSQL_USER: 'my_oscar', CONNECTION_ID: 23,
DB_SERVER: '127.0.0.1', DB: 'test', QUERY: 'ZEIGEN Tische; '

+1

Anstatt einen Alias ​​zu erstellen, können Sie 'syslog' zu einem' [mysql] '- Abschnitt entweder Ihrer'/etc/mysql/my.cnf' hinzufügen oder eine Datei in '/ etc/mysql/conf.d /' – Alasdair

+0

@ Alasdair Bitte fügen Sie eine Antwort hinzu und ich werde es akzeptieren. –