Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Tutorial – Verwalten von MySQL-Serverprotokollen:Rotieren, Komprimieren, Beibehalten und Löschen

MySQL Server generiert mehrere Protokolle, die Ihnen helfen können, die Aktivitäten des Servers zu überwachen. Sobald diese Protokolle jedoch aktiviert sind, können sie an Größe zunehmen und zu viel Speicherplatz beanspruchen. Aus diesem Grund ist es wichtig, MySQL-Protokolldateien für eine bestimmte Dauer automatisiert zu archivieren und aufzubewahren sowie die alten zu löschen. In diesem Blogbeitrag beschreiben wir einige Best Practices für die Einrichtung und Verwaltung von MySQL-Fehlerprotokollen, allgemeinen Protokollen und langsamen Abfrageprotokollen für Ihre MySQL-Bereitstellungen.

Einrichten der MySQL Server-Protokollierung

Sehen wir uns an, wie die folgenden 3 Arten von Protokollen eingerichtet werden:

Fehlerprotokoll

Protokolliert alle Probleme, die beim Starten, Ausführen oder Beenden von mysqld aufgetreten sind. Dieses Protokoll kann durch die folgende Option in der Datei /etc/my.cnf aktiviert werden:

  • log_error=/var/log/mysql/mysqld.log

Allgemeines Abfrageprotokoll

Protokolliert hergestellte Clientverbindungen und von Clients empfangene Anweisungen. Dieses Protokoll kann durch die folgende Option in der Datei /etc/my.cnf aktiviert werden:

  • general_log=EIN
  • general_log_file=/var/log/mysql/general.log

Protokoll für langsame Abfragen

Protokolliert Abfragen, deren Ausführung länger als long_query_time Sekunden dauerte. Dieses Protokoll kann durch die folgende Option in der Datei /etc/my.cnf aktiviert werden:

  • slow_query_log=EIN
  • slow_query_log_file=/var/log/mysql/mysql-slowquery.log

Kriterien für die Protokollrotation einrichten

Nehmen wir als Beispiel einige Kriterien für die Verwaltung allgemeiner MySQL-Abfrageprotokolle. Anhand der folgenden Fragen können wir geeignete Kriterien für die Protokollverwaltung finden:

F:Wie groß darf die Protokolldatei maximal werden?

A:Nehmen wir an, es kann auf bis zu 300 MB anwachsen, danach muss es gedreht und komprimiert werden.

F:Wie oft soll die Protokolldatei rotiert werden?

A:Wir können sagen, dass wir möchten, dass Protokolle täglich rotiert werden.

F:Wie viele alte Protokolldateien möchten Sie behalten?

A:Wir möchten die letzten 30 Protokolldateien behalten.

Basierend auf den oben genannten Kriterien beträgt der für die allgemeine Abfrageprotokollverwaltung erforderliche Gesamtspeicherplatz etwa 1,2 GB. Unter der Annahme einer Komprimierungsrate von 90 % haben wir 30 komprimierte Protokolldateien mit einer Größe von jeweils 30 MB und eine Live-Protokolldatei von etwa 300 MB.

Verwalten von MySQL-Serverprotokollen:Rotieren, Komprimieren, Aufbewahren und LöschenClick To Tweet

Verwalten der Protokolle mit dem Linux-Hilfsprogramm logrotate

logrotate ist ein Linux-Dienstprogramm, das bei der effizienten Verwaltung von Protokolldateien hilft und Optionen für die automatische Rotation, Komprimierung und Entfernung von Protokolldateien bietet. Die oben festgelegten Kriterien können für das Dienstprogramm logrotate konfiguriert werden, indem eine Konfigurationsdatei im Ordner /etc/logrotate.d erstellt wird.

Nennen wir diese Konfigurationsdatei mysqlgeneral und der Inhalt der Datei lautet:

/var/log/mysql/general.log{
        compress
        dateext
        maxsize 300M
        copytruncate
        maxage 365
        dateformat -%Y%m%d%s
        daily
        rotate 30
        notifempty
}

Mit den obigen Optionen für logrotate werden die allgemeinen Abfrageprotokolle entweder täglich rotiert oder wenn die Größe der Protokolldatei 300 MB überschreitet. Die alten Protokolle werden komprimiert und 30 solcher Dateien bleiben erhalten. Die Protokollrotation wird übersprungen, wenn die Protokolldatei aufgrund der Einstellung „notifempty“ leer ist.

Die Option „copytruncate“ soll sicherstellen, dass die aktuelle Protokolldatei während der Rotation niemals gelöscht wird und nur ihr Inhalt abgeschnitten wird. Dies ist wichtig, da einige Anwendungen erwarten, dass die Protokolldatei immer verfügbar ist, und es nicht möglich ist, das Protokoll zu löschen, ohne die Anwendung zuerst zu stoppen.

Da nun die Logrotationskonfiguration für das allgemeine Abfragelog eingestellt ist, muss das Dienstprogramm logrotate ausgeführt werden, damit die obige Konfiguration ausgeführt wird. Dies geschieht normalerweise über einen Cron-Job. Wir können dies so einstellen, dass es stündlich ausgeführt wird, indem wir das Skript logrotate im Verzeichnis /etc/cron.hourly platzieren:

#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

Also haben wir mit ein paar einfachen Schritten die Protokollrotation für allgemeine MySQL-Protokolle basierend auf unseren Kriterien eingerichtet. Derselbe Ansatz kann auch für MySQL-Fehlerprotokolle und langsame Abfrageprotokolle verfolgt werden. Sehen Sie sich diese anderen Beiträge an, um mehr über die Optimierung Ihrer MySQL-Bereitstellungen zu erfahren:

  • Berechnung der InnoDB-Pufferpoolgröße für Ihren MySQL-Server
  • MySQL-Tutorial – Konfigurieren und Verwalten von SSL auf Ihrem MySQL-Server
  • MySQL High Availability Framework erklärt – Teil I:Einführung