Wie werden Protokolldateien in MySQL angezeigt?

176

Ich habe gelesen, dass der MySQL-Server eine Protokolldatei erstellt, in der alle Aktivitäten aufgezeichnet werden - beispielsweise wann und welche Abfragen ausgeführt werden.

Kann mir jemand sagen, wo es in meinem System existiert? Wie kann ich es lesen?

Grundsätzlich muss ich die Datenbank mit unterschiedlichen Eingaben sichern [Sicherung zwischen zwei Daten], daher denke ich, dass ich hier eine Protokolldatei verwenden muss. Deshalb möchte ich dies tun ...

Ich denke, dieses Protokoll muss irgendwie gesichert werden, da vertrauliche Informationen wie Benutzernamen und Passwort protokolliert werden können [wenn eine Abfrage dies erfordert]; Kann es also gesichert werden, nicht leicht zu sehen?

Ich habe Root-Zugriff auf das System. Wie kann ich das Protokoll anzeigen?

Wenn ich versuche, /var/log/mysql.log zu öffnen, ist es leer.

Dies ist meine Konfigurationsdatei:

[client]
port        = 3306
socket      = /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket      = /var/run/mysqld/mysqld.sock
nice        = 0

[mysqld]
log = /var/log/mysql/mysql.log 
binlog-do-db=zero



user        = mysql
socket      = /var/run/mysqld/mysqld.sock
port        = 3306
basedir     = /usr
datadir     = /var/lib/mysql
tmpdir      = /tmp
skip-external-locking

bind-address        = 127.0.0.1
#
# * Fine Tuning
#
key_buffer      = 16M
max_allowed_packet  = 16M
thread_stack        = 192K
thread_cache_size       = 8

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1
Arjun
quelle

Antworten:

164

Hier ist eine einfache Möglichkeit, sie zu aktivieren. In MySQL müssen wir oft 3 Protokolle sehen, die meistens während einer Projektentwicklung benötigt werden.

  • The Error Log. Es enthält Informationen zu Fehlern, die während der Ausführung des Servers auftreten (auch Server starten und stoppen).

  • The General Query Log. Dies ist eine allgemeine Aufzeichnung dessen, was mysqld tut (verbinden, trennen, abfragen)

  • The Slow Query Log. Es besteht aus "langsamen" SQL-Anweisungen (wie durch den Namen angegeben).

Standardmäßig sind in MYSQL keine Protokolldateien aktiviert. Alle Fehler werden im syslog ( /var/log/syslog) angezeigt .

Um sie zu aktivieren, gehen Sie einfach wie folgt vor:

Schritt 1: Gehen Sie zu dieser Datei ( /etc/mysql/conf.d/mysqld_safe_syslog.cnf ) und entfernen oder kommentieren Sie diese Zeile.

Schritt 2: Gehen Sie zu mysql conf file ( /etc/mysql/my.cnf) und fügen Sie die folgenden Zeilen hinzu

Um das Fehlerprotokoll zu aktivieren, fügen Sie Folgendes hinzu

[mysqld_safe]
log_error=/var/log/mysql/mysql_error.log

[mysqld]
log_error=/var/log/mysql/mysql_error.log

Um das allgemeine Abfrageprotokoll zu aktivieren, fügen Sie Folgendes hinzu

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

Fügen Sie Folgendes hinzu, um das langsame Abfrageprotokoll zu aktivieren

log_slow_queries       = /var/log/mysql/mysql-slow.log
long_query_time = 2
log-queries-not-using-indexes

Schritt 3: Speichern Sie die Datei und starten Sie MySQL mit den folgenden Befehlen neu

service mysql restart

Um Protokolle zur Laufzeit zu aktivieren, melden Sie sich bei mysql client ( mysql -u root -p) an und geben Sie Folgendes an :

SET GLOBAL general_log = 'ON';
SET GLOBAL slow_query_log = 'ON';

Zum Schluss möchte ich hier noch erwähnen, dass ich dies aus einem Blog gelesen habe . Vielen Dank. Für mich geht das.

Klicken Sie hier , um den Blog zu besuchen

Loyola
quelle
2
Ich denke, dann hast du 'vergessen', einige Dinge zu schreiben. Schritt 1 ist unvollständig und der Satz, den der '
Blog'
Hallo, @Athafoud, bitte finde den Link jetzt.
Loyola
3
Der verlinkte Blog-Artikel erwähnt Änderungen /etc/mysql/conf.d/mysqld_safe_syslog.cnfnur, wenn das Fehlerprotokoll aktiviert werden soll. Diese Antwort, wie sie derzeit geschrieben wird, scheint sie jedoch für jedes Protokoll vorzuschlagen.
Melebius
2
Meine Serverversion ist 5.6.35. Die Antwort von Ross Smith II hier funktioniert für mich. Ich muss Set slow_query_log = 1;, slow_query_log_file = /var/log/mysql/mysql-slow-query.logund long_query_time = 60unter [mysqld]. Wenn ich versuche, mit Ihrer Konfiguration zu beginnen, startet der Server, aber langsam und mit Fehlern. Ich denke wirklich, dass die Versionen unterschiedlich sind und in späteren Versionen wollte oracle die Variablennamen vereinheitlichen. Auch: IMHO 2 Sekunden ist nicht so lang.
JackLeEmmerdeur
1
Was ist mit der Berechtigung für diese Dateien? Ich habe in vielen Fällen gesehen, dass keine Protokolldateien erstellt werden.
MagePsycho
42

Sie müssen die Abfrageprotokollierung in MySQL aktivieren.

  1. edit /etc/my.cnf

    [mysqld]
    log = / tmp / mysql.log
    
  2. Starten Sie den Computer oder den mysqld-Dienst neu

    Service mysqld Neustart
    
  3. Öffnen Sie phpmyadmin / jede Anwendung, die die MySQL- / MySQL-Konsole verwendet, und führen Sie eine Abfrage aus

  4. cat /tmp/mysql.log (Sie sollten die Abfrage sehen)

Danidacar
quelle
spielt keine Rolle, stellen Sie einfach sicher, dass eine Abfrage über die Datenbank ausgeführt wird
danidacar
6
ungültigen Pfad. Sie haben /etc/my.cnf sollte /etc/mysql/my.cnf sein
mystic cola
39

Die MySQL-Protokolle werden durch die globalen Variablen bestimmt, wie z.

  • log_error für das Fehlermeldungsprotokoll;
  • general_log_filefür die allgemeine Abfrageprotokolldatei (falls aktiviert durch general_log);
  • slow_query_log_filefür die Protokolldatei für langsame Abfragen (falls aktiviert von slow_query_log);

Führen Sie den folgenden Shell-Befehl aus, um die Einstellungen und ihren Speicherort anzuzeigen:

mysql -se "SHOW VARIABLES" | grep -e log_error -e general_log -e slow_query_log

Führen Sie diesen Befehl im Terminal aus, um den Wert des Fehlerprotokolls zu drucken:

mysql -e "SELECT @@GLOBAL.log_error"

Führen Sie Folgendes aus, um den Inhalt der Fehlerprotokolldatei in Echtzeit zu lesen:

sudo tail -f $(mysql -Nse "SELECT @@GLOBAL.log_error")

Hinweis: Treffer Control- Cwenn Sie fertig sind

Wenn das allgemeine Protokoll aktiviert ist, versuchen Sie:

sudo tail -f $(mysql -Nse "SELECT CONCAT(@@datadir, @@general_log_file)")

Fügen Sie zur Verwendung mysqlmit dem Kennwortzugriff -poder -pMYPASSParameter hinzu. Um es in Erinnerung zu behalten, können Sie es in Ihrem ~/.my.cnfz

[client]
user=root
password=root

So wird es für das nächste Mal in Erinnerung bleiben.

Kenorb
quelle
1
Oder wenn Sie ein Passwort eingeben müssen, versuchen Sie Folgendes: mysql -p -se "SHOW VARIABLES" | grep -e log_error -e general_log -e slow_query_log
Paul Chernoch
9

In meiner (ich habe LAMP installiert) / etc / mysql /my.cnf Datei fand ich folgende, kommentierten Zeilen in Abschnitt [mysqld]:

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

Ich musste diese Datei als Superuser mit Terminal öffnen:

sudo geany /etc/mysql/my.cnf

(Ich bevorzuge Geany anstelle von gedit oder VI, es spielt keine Rolle)

Ich habe sie nur auskommentiert und die Datei gespeichert und dann MySQL mit neu gestartet

sudo service mysql restart

Führen Sie mehrere Abfragen aus, öffnen Sie die obige Datei (/var/log/mysql/mysql.log) und das Protokoll war da :)

Linie
quelle
Während es für Sie funktioniert, funktioniert es für mich nicht, selbst wichtige Ausnahmen wie "Index beschädigt" werden nicht protokolliert. Nur Probleme beim Starten und Herunterfahren.
user3338098
8

Aus dem MySQL-Referenzhandbuch:

Standardmäßig werden alle Protokolldateien im Datenverzeichnis erstellt.

Überprüfen Sie /var/lib/mysqlOrdner.

Mark Nenadov
quelle
1
Aber ich kann den MySQL-Ordner nicht öffnen. Ich denke, der Pfad der Protokolldatei ist /var/log/mysql/mysql.log, aber ich kann sie nicht öffnen. Was soll ich tun?
Arjun
2
Wie mache ich mich selbst root, ich denke ich bin Besitzer, ich installiere den Server, ich setze das Passwort, also sollte ich der Besitzer sein, trotzdem ist es für mich gesperrt, wie kann ich es öffnen?
Arjun
1
Ich habe die CD in dieses Verzeichnis gezwungen (ich musste einen Root-Benutzer erstellen, den ich später löschte), aber als ich diese Dateien sah, dachte ich, dass sie verschlüsselt sind :) Ich denke, das ist kein guter Weg.
Linie
Verwenden Sie sudo -sdann versuchen, in den MySQL-Ordner zu wechseln.
Rashedul Islam
Das MySQL-Handbuch ist mit zahlreichen Inkonsistenzen gefüllt, so oder so gibt es unter Windows kein solches Verzeichnis.
user3338098
3

Als Ergänzung zu Loyolas Antwort ist zu erwähnen, dass ab MySQL 5.1 log_slow_queriesveraltet und durch ersetzt wirdslow-query-log

Die Verwendung log_slow_queriesführt dazu, dass Ihr service mysql restartoder service mysql startfehlschlägt

Oussama Romdhane
quelle
1
shell> mysqladmin flush-logs


shell> mv host_name.err-old backup-directory
Prüfung
quelle
7
Willkommen bei stackoverflow. Bitte erläutern Sie ausführlicher, wie der Code in Ihrer Antwort für die Frage des OP relevant ist. Außerdem sollte der Code um 4 Leerzeichen eingerückt werden, um eine ordnungsgemäße Formatierung zu ermöglichen.
Politank-Z
1

Zusätzlich zu den obigen Antworten können Sie Befehlszeilenparameter für die Protokollierungsoptionen an den mysqld-Prozess übergeben, anstatt Ihre conf-Datei manuell zu bearbeiten. So aktivieren Sie beispielsweise die allgemeine Protokollierung und geben eine Datei an:

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

Wenn Sie andere Antworten oben bestätigen, erhalten mysqld --help --verboseSie die Werte aus der conf-Datei (daher ist das Ausführen mit den Befehlszeilenoptionen general-log FALSE). in der Erwägung, dass mysql -se "SHOW VARIABLES" | grep -e log_error -e general_log:

general_log     ON
general_log_file        /var/log/mysql.general.log

Verwenden Sie eine etwas kompaktere Syntax für das Fehlerprotokoll:

mysqld --general-log --general-log-file=/var/log/mysql.general.log --log-error=/var/log/mysql.error.log
br3w5
quelle