Wenn der MySQL-Server startet, überprüft er seine Befehlszeile auf Vorgänge, um zu sehen, ob er eine Anmeldung durchführen sollte, und öffnet die entsprechende Protokolldatei (falls ja). Sie können den Server zwei Haupttypen von Protokolldateien generieren lassen: Normale Protokolldateien. Es meldet Clientverbindungen, Abfragen und verschiedene andere Ereignisse. Wenn der MySQL-Server startet, überprüft er seine Befehlszeile auf Vorgänge, um zu sehen, ob er eine Anmeldung durchführen sollte, und öffnet die entsprechende Protokolldatei (falls ja). Sie können den Server zwei Haupttypen von Protokolldateien generieren lassen: Normale Protokolldateien. Es meldet Clientverbindungen, Abfragen und verschiedene andere Ereignisse. Es ist nützlich, um die Serveraktivität zu verfolgen: Wer verbindet sich, von wo aus und was macht er?
Änderungsprotokoll
Es meldet Abfragen, die die Datenbank ändern. Der Begriff „Update“ bezieht sich in diesem Zusammenhang nicht nur auf UPDATE-Anweisungen, sondern auf alle Anweisungen, die die Datenbank verändern. Aus diesem Grund enthält es Abfragedatensätze für DELETE, INSERT, REPLACE, CREATE TABLE, DROP TABLE, GRANT und REVOKE. Der Inhalt des Update-Protokolls wird in Form von SQL-Anweisungen geschrieben, die als Eingabe für MySQL verwendet werden. Update-Protokolle und Backups sind nützlich, wenn die Tabelle nach einem Absturz wiederhergestellt werden muss. Sie können die Datenbank aus einer Sicherungsdatei wiederherstellen und dann alle Abfragen, die die Datenbank nach dieser Sicherungsdatei geändert haben, erneut ausführen, indem Sie das Aktualisierungsprotokoll als Eingabe für MySQL verwenden. Dadurch wird der Zustand der Tabelle zum Zeitpunkt des Absturzes wiederhergestellt.
Um die Protokolle wirksam zu machen, verwenden Sie die Option --log, um die regelmäßige Protokollierung zu aktivieren, und die Option --log-update, um die Aktualisierungsprotokollierung zu aktivieren. Diese Optionen können in der Befehlszeile in mysqld.safe_mysqld oder mysql.server oder in der Gruppe [mysqld] einer Option angegeben werden. Wenn die Protokollierung aktiviert ist, werden Protokolldateien standardmäßig in das Datenverzeichnis des Servers geschrieben.
Der Autor empfiehlt, dass bei der ersten Verwendung von MySQL beide Protokolltypen gültig sind. Nachdem Sie etwas Erfahrung mit MySQL gesammelt haben, könnten Sie versucht sein, einfach das Update-Protokoll zu verwenden, um den Speicherplatzbedarf zu reduzieren.
Stellen Sie nach dem Aktivieren der Protokollierung sicher, dass die Festplatte nicht mit einer großen Menge an Protokollinformationen gefüllt wird, insbesondere wenn der Server eine große Anzahl von Abfragen verarbeitet. Durch Rotations- und Ablaufzeiten für Protokolldateien kann verhindert werden, dass Protokolldateien unbegrenzt wachsen, während gleichzeitig die neuesten Protokolle online verfügbar bleiben.
Die Protokolldateirotation funktioniert wie folgt. Gehen Sie davon aus, dass die Protokolldatei den Namen log trägt. In der ersten Schleife wird log in log 0 umbenannt und der Server beginnt mit dem Schreiben einer neuen Protokolldatei. In der zweiten Schleife wird log.0 in log.1 umbenannt, log wird in log.0 umbenannt und der Server beginnt mit dem Schreiben einer weiteren neuen Protokolldatei. Auf diese Weise durchläuft jede Datei die Namen log 0, log 1 usw. Wenn die Datei einen bestimmten Punkt in der Schleife erreicht, kann sie beendet werden.
Protokolle und LOAD DATA-Anweisungen aktualisieren
Wenn der Server normalerweise eine LOAD DATE-Anweisung ausführt, schreibt er nur die Anweisung selbst, nicht den geladenen Zeileninhalt, in das Aktualisierungsprotokoll. Dies bedeutet, dass Wiederherstellungsvorgänge mithilfe des Aktualisierungsprotokolls unvollständig sind, es sei denn, die Datendateien bleiben zugänglich. Um dies zu gewährleisten, sollten Datendateien nicht gelöscht werden, es sei denn, die Datenbank wurde gesichert.
Systemsicherung
Aktualisierungsprotokolle sind nicht immer gut für die Datenbankwiederherstellung. Wenn ein Festplattenabsturz dazu führt, dass Ihre Aktualisierungsprotokolle verloren gehen, stellen Sie sicher, dass Sie regelmäßig Dateisystemsicherungen durchführen. Es ist auch eine gute Idee, das Update-Protokoll auf eine andere Festplatte zu schreiben als die, auf der die Datenbank gespeichert ist.
Wenn Sie beispielsweise jeden Tag Protokolle durchlaufen und die Protokolle eine Woche lang aufbewahren möchten, behalten Sie log.0 bis log.6 bei. In der nächsten Schleife wird log.6 beendet, indem log.5 log.6 überschreiben lässt, um zum neuen log.6 zu werden. Auf diese Weise können Sie viele Protokolle führen, ohne das Festplattenlimit zu überschreiten.
Die Häufigkeit der Protokollrotation und die Anzahl der aufbewahrten alten Protokolle hängen davon ab, wie ausgelastet der Server ist (aktive Server erzeugen mehr Protokollmeldungen) und wie viel Speicherplatz Sie für alte Protokolle reservieren möchten. Wenn Sie reguläre Protokolle rotieren, können Sie den Befehl mysqla d - min flush-logs verwenden, um den Server anzuweisen, die aktuelle Protokolldatei zu schließen und eine neue Protokolldatei zu öffnen.
Ein Skript zum Durchführen einer regelmäßigen Protokollrotation würde etwa so aussehen (dies kann geändert werden, um Ihren Protokollbasisnamen und den Speicherort Ihres Datenverzeichnisses sowie möglicherweise die Anzahl der alten Protokolle, die Sie behalten möchten, widerzuspiegeln):
Führen Sie dieses Skript am besten über das mysqladm-Konto aus, um sicherzustellen, dass die Protokolldateien diesem Benutzer gehören. Wenn Sie die Verbindungsparameter in der Optionsdatei .my.cnf belassen, müssen Sie im Befehl mysqladmin des Skripts keine Parameter angeben. Wenn Sie dies nicht tun, können Sie einen eingeschränkten Benutzer erstellen, der nur Aktualisierungsbefehle ausgibt. Das Passwort dieses Benutzers kann dann mit minimalem Risiko in das Skript eingefügt werden. Wenn Sie dies tun möchten, sollte der Benutzer nur RELOAD-Berechtigungen haben. Um beispielsweise den Benutzer-Flush aufzurufen und ein Passwort, fl us h pass, zuzuweisen, verwenden Sie die folgende GRANT-Anweisung:
GRANT RELOAD ON *.* TO flush@localhost IDENTIFIEDBY „flushpass“
Wenn Sie in einem Skript einen Aktualisierungsvorgang durchführen müssen, können Sie Folgendes tun:
mysqladmin -ufush -pflushpass Flush -logs
Unter Linux ist es besser, Logrotate zu verwenden, um das Skript mysql-log-rotate im MySQL-Distributionspaket zu installieren, als das Skript selbst zu schreiben. Wenn mysql-log-rotate nicht automatisch über eine RPM-Datei installiert wird, sollten Sie das Support-Files-Verzeichnis des MySQL-Distributionspakets überprüfen.
Aufgrund der unterschiedlichen Art und Weise, wie Server Aktualisierungsprotokolldateien verarbeiten, unterscheidet sich die Rotation der Protokolldateien geringfügig zwischen Aktualisierungsprotokollen und regulären Protokollen. Wenn Sie den Server anweisen, einen Aktualisierungsprotokolldateinamen ohne Erweiterung (z. B. Aktualisierungsdatum) zu verwenden, erstellt der Server automatisch Aktualisierungsprotokolldateinamen mit der Reihenfolge Aktualisierungsdatum 0 0 1, Update.002 usw. Beim Starten des Servers und bei der Aktualisierung des Protokolls wird ein neues Aktualisierungsprotokoll erstellt. Wenn Sie die Update-Protokollierung ohne Angabe eines Dateinamens aktivieren, generiert der Server eine Folge von Update-Protokolldateien unter Verwendung des Hostnamens als Basisnamen.
Wenn Sie eine auf diese Weise generierte Folge von Dateien beenden, möchten Sie sie möglicherweise anhand ihres Alters (dem Zeitpunkt ihrer letzten Änderung) und nicht anhand ihres Namens beenden. Der Grund dafür ist, dass Sie nicht damit rechnen können, in einem bestimmten Zeitraum eine feste Anzahl von Aktualisierungsprotokollen zu erstellen, da Sie nicht wissen, wann der Befehl „flush-log“ ausgegeben wird. Wenn Sie beispielsweise eine Tabelle mit mysqldump sichern und die Option --flush-logs verwenden, wird bei jeder Sicherung eine neue Datei in dieser Reihenfolge von Aktualisierungsprotokollnamen erstellt.
Für Aktualisierungsprotokolle mit sequenziellen Dateinamen, die automatisch vom Server generiert werden, sieht das auf dem Protokollalter basierende Beendigungsskript wie folgt aus:
Der Befehl „find“ sucht und löscht Aktualisierungsprotokolldateien, die vor mehr als einer Woche geändert wurden. Es ist wichtig, den Parameter -name zum Testen auf eine numerische Dateierweiterung zu verwenden, um zu vermeiden, dass durch die falsche Aktualisierung angegebene Tabellen gelöscht werden.
Sie können den Server auch anweisen, einen festen Dateinamen für das Aktualisierungsprotokoll zu verwenden (falls gewünscht). Dies ist nützlich, wenn Sie das Aktualisierungsprotokoll auf die gleiche Weise wie ein normales Protokoll durchlaufen lassen möchten. Um einen festen Update-Protokollnamen zu verwenden, geben Sie einen Namen mit einer Erweiterung an. Beispielsweise können Sie den Server mit der Option --log-update=update.log starten, um den Namen up date .log zu verwenden. Der Server fährt immer herunter und öffnet das Protokoll, wenn er den Befehl „flush-logs“ empfängt, aber der Server generiert nicht jedes Mal neue Dateien. In diesem Fall unterscheiden sich das Protokollrotationsskript für das Aktualisierungsprotokoll und das Skript für das reguläre Protokoll nur im Dateibasisnamen der Rotation.
Wenn Sie die Protokollrotation und -beendigung automatisieren möchten, verwenden Sie cron. Es wird davon ausgegangen, dass die Skripte zum Rotieren regulärer Protokolle und Aktualisierungsprotokolle Rotate-Logs und Rotate-Up-Date-Logs sind und im Verzeichnis /usr/user/mysql/bin installiert sind. Registrieren Sie sich als mysqlladm-Benutzer und verwenden Sie dann den folgenden Befehl, um die Crontab-Datei des mysqlladm-Benutzers zu bearbeiten: % crontab -e
Mit diesem Befehl können Sie die Sicherung der aktuellen Crontab-Datei bearbeiten (sie kann leer sein, wenn dies noch nicht geschehen ist). Fügen Sie der Datei wie folgt Zeilen hinzu:
Dieser Eintrag weist cron an, dieses Skript jeden Morgen um 4 Uhr morgens auszuführen. Sie können die Zeit ändern oder nach Bedarf planen. Anweisungen finden Sie auf der Crontab-Handbuchseite.
-