Automysqlbackup

Aus mxlinuxusers.de

automysqlbackup sichert in festen Abständen (täglich, wöchentlich und monatlich) Backups aller vorhandenen oder ausgewählten MySql/MariaDB-Datenbanken. Dazu wird intern die zu MySQL/MariaDB gehörende Routine mysqldump benutzt. Die Konfiguration dazu erfolgt in einer einfachen, gut dokumentierten textbasierten Konfigurationsdatei.

Weiterhin bietet automysqlbackup folgende Möglichkeiten:

  • versenden von EMails über den Erfolg/Mißerfolg der Backup-Aktionen
  • Backups können komprimiert und verschlüsselt angelegt werden
  • Backups rotieren, das heisst, es kann eingestellt werden, wieviel Backups aufgehoben werden sollen, bis das älteste Backup vom neuesten Backup überschrieben wird
  • fortlaufende Backups werden inkrementell angelegt. Dadurch wird nur das erste Backup vollständig gespeichert, die folgenden speichern nur die Veränderungen zum vorherigen Backup

Konfiguration[Bearbeiten | Quelltext bearbeiten]

automysqlbackup liest seine Standardwerte aus der Datei /etc/mysql/debian.cnf

Um diese Werte bei Bedarf zu überschreiben und zusätzliche Optionen ergänzen, sollte man die Konfigurationsdatei /etc/default/automysqlbackup editieren. Dabei handelt es sich um eine Textdatei, in der Optionen und deren Werte durch Gleichheitszeichen getrennt werden, z.B.

USERNAME=root

pro Zeile eine Option und Kommentare wie üblich durch eine vorangestellte Raute gekennzeichnet

# Das ist ein Kommentar

Aber wie gesagt, Werte die sich nicht von denen in der Datei /etc/mysql/debian.cnf könnten hier weggelassen oder wenigstens auskommentiert werden.

Diese Konfigurationsdatei ist sehr gut dokumentiert, trotzdem noch eine kleine Tabelle mit den Erläuterungen dazu:

Optionen von automysqlbackup
Option Bedeutung
USERNAME Name des Users der vollen Zugriff auf den MySQL-Server und alle zu sichernden Datenbanken hat
PASSWORD Passwort des Users für den Zugriff auf den MySQL-Server
DBHOST Hostname oder IP-Adresse des MySQL-Servers. Dürfte in den meisten Fällen localhost sein
DBNAMES Liste der Datenbanknamen, für die Backups angelegt werden sollen, z.B. "DB1 DB2 DB3". Die Datenbank mysql muss hier nicht extra erwähnt werden. Enthalten Datenbanknamen Leerzeichen, so müssen diese durch Prozentzeichen ersetzt werden. Z.B für Datenbank "meine DB":
DBNAMES="meine%DB"

Für solche Fälle funktioniert aber die Option

SEPDIR=no

nicht!

Sollen alle Datenbanken gesichert werden genügt die Angabe von "all"

BACKUPDIR Verzeichnis in dem die Backups abgelegt werden sollen
MAILCONTENT was und wieviel soll nach erfolgtem Backup gemailt werden? Folgendes ist möglich:
log (nur Logfiles)  # dies benötigt Zugriff auf ein Mail-Programm auf dem Server
files (Log- und SQL-Files als Anhang)  # dazu sollte ein Mail Client wie z.B. mutt installiert sein 
stdout (Logging-Ausgabe nur aufs Terminal, wenn automysqlbackup von Hand gestartet wurde)
quiet (sendet nur Logdateien wenn ein Fehler aufgetreten ist)
MAXATTSIZE maximale Mailgrösse in kb, z.B.
MAXATTSIZE="4000"
MAILADDR Mailadresse, an die die Mails gesendet werden sollen. Mehrere Mailadressen sind möglich, diese werden durch Leerzeichen getrennt. automysqlbackup benutzt per default dazu das einfache Mail-Programm bsd-mailx, das nur lokale Postfächer beherrscht, also sollte hier auch nur lokale Mailadressen eingetragen werden, wenn kein anderes Mail-Programm installiert ist (s. dazu auch die Bemerkungen in MAILCONTENT
MDBNAMES Liste der Datenbanken, für die ein monatliches Backup durchgeführt werden soll. Anders als bei DBNAMES müsste hier mysql mit eingetragen werden, wenn mysql monatlich gesichert werden soll. Auf die Liste in DBNAMES kann durch die Angabe von $DBNAMES Bezug genommen werden.

Beispiel:

MDBNAMES="mysql $DBNAMES"
DBEXCLUDE Liste der Datenbanken, die nicht gesichert werden sollen, wenn DBNAMES auf "all" gesetzt wurde.
DBEXCLUDE="DB1"

sichert alle Datenbanken ausser DB1

CREATE_DATABASE soll das Kommando CREATE DATABASE in das Backup eingefügt werden? yes oder no (ohne Anführungszeichen). Bei
CREATE_DATABASE=yes

(dies ist Default), wird beim Restore eine Datenbank mit dem gleichen Namen wie die gesicherte Datenbank wiederhergestellt. Bei

CREATE_DATABASE=no

muss beim Restore ein Datenbankname angegeben werden, so dass eine Kopie der gesicherten Datenbank entstehen kann.

Wurde

SEPDIR=no

gesetzt, so kann dies nicht benutzt werden.

SEPDIR soll jede Datenbank in ein eigenes Verzeichnis gesichert werden? yes oder no (ohne Anführungszeichen)
DOWEEKLY an welchem Tag soll das wöchentliche Backup durchgeführt werden? (1=Montag, 2=Dienstag usw.) Default ist
DOWEEKLY=6

d.h. das wöchentliche Backup wird immer Samstags durchgeführt

COMP benutztes Kompressionsverfahren für das Backup (gzip oder bzip2), z.B.
COMP=gzip
COMMCOMP soll komprimierte Kommunikation zwischen dem Backup-Server und dem MySQL-Server benutzt werden? yes oder no (ohne Anführungszeichen)
LATEST soll zusätzlich eine Kopie des letzten Backups in einem eigenen Verzeichnis abgelegt werden? yes oder no (ohne Anführungszeichen)
MAX_ALLOWED_PACKET maximale Grösse des Buffers für die Client/Server-Kommunikation, z.B. 16MB (Maximum 1GB). Wenn die zu sichernden Datenbanken große BLOB-Felder verwenden muss möglicherweise die Einstellung MAX_ALLOWED_PACKET erhöht werden, z.B. 32 MB
SOCKET benutzter Unix-Socket. Kann in der Regel leer bleiben
PREBACKUP Name des Skriptes, dass vor dem Backup ausgeführt werden soll (mit vollem Pfad). Beispiel PREBACKUP="/etc/mysql-backup-pre". Wird keines benötigt, soll es auskommentiert werden
POSTBACKUP Name des Skriptes, dass nach dem Backup ausgeführt werden soll (mit vollem Pfad). Beispiel POSTBACKUP="/etc/mysql-backup-post". Wird keines benötigt, soll es auskommentiert werden
ROUTINES sollen Stored Prozeduren und Routinen mit gesichert werden? yes oder no

Rotation der Backups[Bearbeiten | Quelltext bearbeiten]

  • tägliche Backups rotieren wöchentlich, d.h. nur die letzten sieben werden aufbewahrt
  • wöchentliche Backups werden für die letzten fünf Wochen gesichert
  • monatliche Backups werden am ersten des Monats durchgeführt und rotieren nicht automatisch. Ist dies notwendig, so muss mit anderen Mitteln (z.B. per Cronjob durchgeführtes Skript) dafür gesorgt werden, dass die benötigte Anzahl von monatlichen Backups an einen anderen Ort, Server kopiert werden.

Wiederherstellung (Restoring)[Bearbeiten | Quelltext bearbeiten]

dies muss von Hand bzw. mit einem Skript durchgeführt werden. Die grundsätzliche Vorgehensweise sieht dabei so aus:

1. wenn nötig die Backupfiles entpacken

gunzip file.gz

2. Aufruf von MySQL/MariaDB, um die Datenbanken aus den SQL-Dateien wiederherzustellen

mysql --user=username --pass=password --host=dbserver database < /path/file.sql

oder

mysql --user=username --pass=password --host=dbserver -e "source /path/file.sql" database

Weblinks[Bearbeiten | Quelltext bearbeiten]

Mysql Datenbanken automatisch sichern