MySQL

MySQL ist ein Verwaltungssystem für relationale Datenbanken, das als Server ausgeführt wird und den Zugriff mehrerer Nutzer auf eine Reihe von Datenbanken ermöglicht. Weitere Informationen erhalten Sie unter mysql.com.

Vorbereitung

Zum Erfassen von MySQL-Telemetrie müssen Sie Ops Agent ab Version 2.5.0 installieren.

Ops Agent für MySQL konfigurieren

Fügen Sie die erforderlichen Elemente zum Erfassen von Logs aus den MySQL-Instanzen gemäß der Anleitung unter Ops Agent konfigurieren hinzu und starten Sie den Agent neu.

Konfigurationsbeispiel

Der folgende Befehl erstellt eine Konfigurationsdatei, um Logs für MySQL zu erfassen und aufzunehmen und den Ops-Agent unter Linux neu zu starten.

sudo tee /etc/google-cloud-ops-agent/config.yaml > /dev/null << EOF
logging:
  receivers:
    mysql_error:
      type: mysql_error
    mysql_general:
      type: mysql_general
    mysql_slow:
      type: mysql_slow
  service:
    pipelines:
      mysql:
        receivers:
          - mysql_error
          - mysql_general
          - mysql_slow
EOF
sudo service google-cloud-ops-agent restart

Logerfassung konfigurieren

Um Logs von MySQL aufzunehmen, müssen Sie Empfänger für die von MySQL erzeugten Logs erstellen und dann eine Pipeline für die neuen Empfänger erstellen.

Geben Sie die folgenden Felder an, um einen Empfänger für Ihre mysql_error-Logs zu konfigurieren:

Feld Standard Beschreibung
type Dieser Wert muss mysql_error sein.
include_paths [/var/log/mysqld.log, /var/log/mysql/mysqld.log, /var/log/mysql/error.log] Eine Liste mit Dateisystempfaden, die durch Tailing jeder Datei gelesen werden sollen. In den Pfaden kann ein Platzhalter (*) verwendet werden. Beispiel: /var/log/mysql/*.log.
exclude_paths [] Eine Liste von Dateisystempfadmustern, die aus dem mit include_paths übereinstimmenden Satz ausgeschlossen werden sollen.


Geben Sie die folgenden Felder an, um einen Empfänger für Ihre mysql_general-Logs zu konfigurieren:

Feld Standard Beschreibung
type Dieser Wert muss mysql_general sein.
include_paths [/var/lib/mysql/${HOSTNAME}.log] Die zu lesenden Logdateien.
exclude_paths [] Eine Liste von Dateisystempfadmustern, die aus dem mit include_paths übereinstimmenden Satz ausgeschlossen werden sollen.


Geben Sie die folgenden Felder an, um einen Empfänger für Ihre mysql_slow-Logs zu konfigurieren:

Feld Standard Beschreibung
type Dieser Wert muss mysql_slow sein.
include_paths [/var/lib/mysql/${HOSTNAME}-slow.log] Die zu lesenden Logdateien.
exclude_paths [] Eine Liste von Dateisystempfadmustern, die aus dem mit include_paths übereinstimmenden Satz ausgeschlossen werden sollen.

Was wird protokolliert?

Der logName der Logs mysql_error, mysql_general und mysql_slow werden von den Empfänger-IDs abgeleitet, die in der Konfiguration angegeben sind.

Je nach MySQL-Version können mysql_error-Logs die folgenden Felder im LogEntry enthalten:

Feld Typ Beschreibung
jsonPayload.level String Logeintragsebene
jsonPayload.tid Zahl Thread-ID, von der das Log stammt
jsonPayload.errorCode String Mit dem Log verknüpfter MySQL-Fehlercode
jsonPayload.subsystem String MySQL-Subsystem, von dem das Log stammt
jsonPayload.message String Log-Nachricht
severity String (LogSeverity) Ebene des Logeintrags (übersetzt)
timestamp String (Timestamp) Zeitpunkt des Eingangs der Anfrage

Leere oder fehlende Felder werden nicht im Logeintrag angezeigt.


mysql_general-Logs enthalten die folgenden Felder in LogEntry:

Feld Typ Beschreibung
jsonPayload.tid Zahl Thread-ID, von der das Log stammt
jsonPayload.command String Typ der zu protokollierenden Datenbankaktion
jsonPayload.message String Log der Datenbankaktion
timestamp String (Timestamp) Zeitpunkt, zu dem der Eintrag protokolliert wurde


mysql_slow-Logs enthalten die folgenden Felder in LogEntry:

Feld Typ Beschreibung
jsonPayload.user String Nutzer, der die Abfrage ausgeführt hat
jsonPayload.database String Datenbank, in der die Abfrage ausgeführt wurde
jsonPayload.host String Host der Datenbankinstanz
jsonPayload.ipAddress String Adresse der Datenbankinstanz
jsonPayload.tid Zahl Thread-ID, unter der die Abfrage protokolliert wurde
jsonPayload.queryTime Zahl Die Ausführungszeit der Anweisung in Sekunden
jsonPayload.lockTime Zahl Die Zeit in Sekunden, die zum Abrufen von Sperren benötigt wurde
jsonPayload.rowsSent Zahl Die Anzahl der an den Client gesendeten Zeilen
jsonPayload.rowsExamined Zahl Die Anzahl der von der Serverebene untersuchten Zeilen
jsonPayload.errorNumber Zahl Die Fehlernummer der Anweisung oder 0, wenn kein Fehler aufgetreten ist
jsonPayload.killed Zahl Wenn die Anweisung beendet wurde, gibt die Fehlernummer den Grund an oder 0, wenn die Anweisung normal beendet wurde
jsonPayload.bytesReceived Zahl Die Anzahl der von allen Clients empfangenen Byte
jsonPayload.bytesSent Zahl Die Anzahl der Byte, die an alle Clients gesendet wurden
jsonPayload.readFirst Zahl Die Häufigkeit, mit der der erste Eintrag in einem Index gelesen wurde
jsonPayload.readLast Zahl Die Anzahl der Anfragen zum Lesen des letzten Schlüssels in einem Index
jsonPayload.readKey Zahl Die Anzahl der Anfragen zum Lesen einer Zeile basierend auf einem Schlüssel
jsonPayload.readNext Zahl Die Anzahl der Anfragen zum Lesen der nächsten Zeile in der Schlüsselreihenfolge
jsonPayload.readPrev Zahl Anzahl der Anfragen zum Lesen der vorherigen Zeile in der Schlüsselreihenfolge
jsonPayload.readRnd Zahl Die Anzahl der Anfragen zum Lesen einer Zeile basierend auf einer festen Position
jsonPayload.readRndNext Zahl Die Anzahl der Anfragen zum Lesen der nächsten Zeile in der Datendatei
jsonPayload.sortMergePasses Zahl Anzahl der Zusammenführungen, die der Sortieralgorithmus ausführen musste
jsonPayload.sortRangeCount Zahl Die Anzahl der Sortierungen, die mithilfe von Bereichen durchgeführt wurden
jsonPayload.sortRows Zahl Die Anzahl der sortierten Zeilen
jsonPayload.sortScanCount Zahl Die Anzahl der Sortierungen, die durch Scannen der Tabelle durchgeführt wurden
jsonPayload.createdTmpDiskTables Zahl Die Anzahl der internen temporären Tabellen auf dem Laufwerk, die vom Server erstellt wurden
jsonPayload.createdTmpTables Zahl Die Anzahl der internen temporären Tabellen, die vom Server erstellt werden
jsonPayload.startTime String Beginn der Anweisungsausführung
jsonPayload.endTime String Ende der Anweisungsausführung
jsonPayload.message String Vollständiger Text der Abfrage
timestamp String (Timestamp) Zeitpunkt, zu dem der Eintrag protokolliert wurde

  Diese Felder werden nur bereitgestellt, wenn die Systemvariable log_slow_extra auf 'ON' gesetzt ist. Diese Variable ist ab MySQL 8.0.14 verfügbar.

Informationen zu diesen Feldern finden Sie in der MySQL-Dokumentation.

Konfiguration prüfen

Mit dem Log-Explorer können Sie prüfen, ob Sie den MySQL-Empfänger korrekt konfiguriert haben. Es kann ein bis zwei Minuten dauern, bis der Ops-Agent Logs erfasst.

Um zu prüfen, ob die Logs aufgenommen wurden, rufen Sie den Log-Explorer auf. Führen Sie dann die folgende Abfrage aus, um die MySQL-Logs aufzurufen:

resource.type="gce_instance"
logName=("projects/PROJECT_ID/logs/mysql_error" OR "projects/PROJECT_ID/logs/mysql_general" OR "projects/PROJECT_ID/logs/mysql_slow")