Logrotate kann falsch genutzt werden um eine lokale MySQL Sicherung zu erstellen.
“logrotate” ist ein sehr weit verbreitetes Linux Werkzeug welches mit den meisten Linux Distribuntionen vorkonfiguriert ausgeliefert wird.
Im Verzeichnis /var/log sind die Dateien nach dem folgenden Schema angeordnet.:
/var/log/auth.log
/var/log/auth.log.0
/var/log/auth.log.1.gz
/var/log/auth.log.2.gz
/var/log/auth.log.3.gz
Das ist wofür “logrotate” geschrieben wurde. Die Logdatei wird von /var/log/auth.log umbenannt zu /var/log/auth.log.0 und am folgenden Tag komprimiert und umbenannt in /var/log/auth.log.1.gz. Wenn mehr als vier sicherungen der Logdatei existieren werden überzählige Sicherungen gelöscht. Genau was eine lokale Datenbank-Sicherung erreichen soll.
Normalerweise mache ich meine MySQL Sicherungen mit einem Cronjob, der mir dann relativ schnell die Festplatte mit Datenbanksicherungen füllt. Da es die Aufgabe von “logrotate” ist Logdateien umzubenennen, zu komprimieren und alte Logdateien zu löschen eignet es sich auch sehr gut für eine kleine lokale Datensicherung.
Mit ein wenig chreativem falsch gebrauch des Werkzeugs “logrotate” kann es verwendet werden um MySQL Sicherungen zu rotieren.
Hier die Kurzanleitung wie ich dies erreicht habe:
Zuerst erstelle ich das Verzeichnis /var/backups/mysql/ in dem die Datensicherung der MySQL Datenbank angelegt werden soll.
Um den “logrotate” Deamon dazu zu bringen die Datenbank zu sicher erstelle ich die Datei /etc/logrotate.d/0-mysql-backup mit dem folgenden Inhalt:
/var/backups/mysql/database.sql {
daily
rotate 10
missingok
compress
nocreate
prerotate
/usr/bin/mysqldump -uUSERNAME -pPASSWORD -A --events --single-transaction > /var/backups/mysql/database.sql
endscript
}
Diese “logrotate” Konfigurationsdatei läuft täglich (daily), behält 10 Backups (rotate 10), läuft auch wenn die Datei nicht vorhanden ist (missingok), komprimiert die Daten mit dem in logrotate eingestellten Kompressionsalgorithmus (compress), erstellt im Anschluss keine neue Datei (nocreate) und erstellt vor dem lauf von „logrotate“ den MySQL Dump.
Da Logrotate ohne vorhandene Datei nicht einmal den Befehl im Bereich prerotate ausführt muss die sicherungsdatei database.sql zuerst angelegt werden.
/usr/bin/touch /var/backups/mysql/database.sql
Ob wir alles richtig gemacht haben können wir auf der Shell testen.
/usr/sbin/logrotate -f -v /etc/logrotate.d/0-mysql-backup
Bei dieser Sicherung handelt es sich nicht um ein vollwertiges Backup da das Sicherungsverzeichnis /var/backups/mysql/ sich auf dem gleichen Computer (oder sogar auf der gleichen Festplatte) befindet auf der auch der MySQL Server selbst läuft. Hier kann natürlich auch vor der Sicherung das Verzeichnis gemounted werden.