Zum Hauptinhalt springen

MySQL Sicherungen und Wiederherstellung

Sicherungen

Nine erstellt täglich zwischen 01:00 und 02:00 Uhr Sicherungen der MySQL Datenbanken auf Ihrem Managed Server. Diese Sicherungen werden 10 Tage lokal vorgehalten sowie mit der täglichen Sicherung Ihres Servers auf unsere Backupsysteme übertragen.

Mittels des Ihnen zur Verfügung stehenden Benutzers www-data können Sie auf die lokalen Sicherungen zugreifen, um diese bei Bedarf zu archivieren, bei Ihnen lokal zu verwenden oder direkt auf dem System wiederherzustellen.

Die Sicherungen werden im Verzeichnis /home/database-backup/mysql/ hinterlegt. Alle Sicherungen werden in Verzeichnissen mit folgendem Zeitschema versioniert: 2021-12-06-0134

Über den symbolischen Link /home/database-backup/mysql/latest/ gelangen Sie zur neuesten Sicherung.

Im Ordner customer finden Sie die Sicherungen aller von Ihnen angelegten Datenbanken. Sollten Sie lediglich an der Struktur einer Datenbank interessiert sein, so finden Sie diese im Verzeichnis structure.

Zusätzliche Sicherungen erstellen

Um Ihnen die Erstellung weiterer Sicherungen zu ermöglichen, haben wir das Script, welches wir zur Erstellung der Sicherungen nutzen, für den Aufruf per sudo durch den Benutzer www-data freigegeben:

www-data@nine01:~ $ sudo nine-mysql-backup
2021-12-06T09:54:19+01:00 Dumped and compressed database 'nmd_frontend_production' in 53 seconds
2021-12-06T09:55:04+01:00 Dumped and compressed database 'nmd_frontend_staging' in 45 seconds

Wiederherstellung

Allgemeine Informationen

Innerhalb der einzelnen Sicherungen finden Sie die Datei restore.sh, z.B. unter /home/database-backup/mysql/2021-12-06-0134/restore.sh.

Hier werden alle Datenbanken inklusive der Dateipfade der Sicherung aufgelistet. Die Inhalte können Sie kopieren und auf Ihre Bedürfnisse anpassen. Die kommentierten Einträge sind dabei für eine Wiederherstellung in der Ursprungsdatenbank gedacht.

...
# Single database restores
# zstdcat /home/database-backup/mysql/2021-12-06-0134/customer/nmd_frontend_production/*.zst | mysql "nmd_frontend_production"
# zstdcat /home/database-backup/mysql/2021-12-06-0134/customer/nmd_frontend_staging/*.zst | mysql "nmd_frontend_staging"

Die mysql Aufrufe müssen zusätzlich mit der Angabe des Kennwortes und des Benutzernamens ergänzt werden, bspw: mysql -p -u nmd_frontend_production mysql -p -u nmd_frontend_staging

Einträge oberhalb der Zeile # Single database restores sind für den Gebrauch durch Mitarbeiter von Nine gedacht und können nicht durch unprivilegierte Benutzer ausgeführt werden.

Wiederherstellung in Quelldatenbank

Zur Wiederherstellung einer Sicherung können Sie folgenden Befehl verwenden. Hierbei werden alle Tabellen der Datenbank nmd_frontend_staging in die gleichnamige wiederhergestellt:

zstdcat /home/database-backup/mysql/2021-12-06-0134/customer/nmd_frontend_staging/*.zst | mysql -p -u nmd_frontend_staging "nmd_frontend_staging"

Die Option -u übergibt den Benutzernamen an das mysql Kommando, -p das Kennwort. Um eine Wiederherstellung ohne Abfrage nach dem Kennwort durchzuführen, kann das Kennwort auch direkt im Befehl angegeben werden (mysql -pSecurePass -u nmd_frontend_staging "nmd_frontend_staging").

Bitte beachten Sie dass Sie den Benutzernamen und das Kennwort für die Datenbank angegeben müssen und hier nicht die Zugangsdaten des www-data Benutzers gefragt sind. Sollten Sie diese Informationen nicht zur Hand haben, so können diese aus der Konfiguration Ihrer Applikation ausgelesen werden.

Wiederherstellung in eine andere Datenbank

Die Wiederherstellung kann bei Bedarf auch in eine abweichende Datenbank vorgenommen werden. Hierbei muss der Name der Zieldatenbank angepasst werden. Wir empfehlen ausserdem, zunächst die Struktur in die neue Datenbank einzuspielen:

zstdcat /home/database-backup/mysql/2021-12-06-0134/structure/nmd_frontend_staging.zst | mysql -p -u nmd_frontend_staging_restore "nmd_frontend_staging_restore"

zstdcat /home/database-backup/mysql/2021-12-06-0134/customer/nmd_frontend_staging/*.zst | mysql -p -u nmd_frontend_staging_restore "nmd_frontend_staging_restore"

Wenn Sie eine Wiederherstellung in eine andere Datenbank durchführen möchten, so muss diese bereits existieren oder per nine-manage-databases angelegt werden.

Wiederherstellung einzelner Tabellen

Statt alle Tabellen wiederherzustellen (durch die Angabe von "*"), kann ebenso eine einzelne Tabelle ausgewählt und importiert werden:

zstdcat /home/database-backup/mysql/2021-12-06-0134/customer/nmd_frontend_staging/entities.zst | mysql -p -u nmd_frontend_staging_restore "nmd_frontend_staging_restore"

Weitere Informationen

Zeitpunkt der Sicherungen

Sicherungen von Datenbanken erzeugen in aller Regel eine erhöhte Last auf Ihrem System. Daher haben wir einen Zeitraum in der Nacht gewählt, der üblicherweise weniger frequentiert ist. Falls der Zeitraum zwischen 01:00 und 02:00 Uhr für Ihre Applikation(en) ungünstig sein sollte, können wir diesen gerne anpassen.

Kompression der Sicherungen

Wir verwenden den Zstandard-Algorithmus zur Kompression der Sicherungen. Dieser bietet eine hervorragende Balance aus Geschwindigkeit, Kompression und Ressourcenbedarf und übertrifft die etablierten Algorithmen teils deutlich.

Sollten Sie die Sicherungen für die Verwendung auf einem System benötigen, auf dem die zst Binärpakete nicht zur Verfügung stehen, so raten wir dazu die Sicherungen auf Ihrem Server selbst zu entpacken und erneut zu komprimieren:

www-data@nine01:~ $ mkdir dump_recompress
www-data@nine01:~ $ cp /home/database-backup/mysql/latest/customer/nmd_frontend_staging/* dump_recompress/ ; cd dump_recompress/

# Die Option "--rm" löscht die zst Archive nach dem Entpacken
www-data@nine01:~/dump_recompress $ unzstd --rm *.zst
nmd_frontend_staging.zst: 3732915490 bytes
www-data@nine01:~/dump_recompress $ bzip2 *
www-data@nine01:~/dump_recompress $ ls -l *.bz2
-rw-r----- 1 www-data www-data 432683536 Dec 6 13:24 nmd_frontend_staging.bz2

Bitte achten Sie darauf, keine Sicherungen öffentlich zugänglich auf dem Webserver zu hinterlegen.

Art der Sicherung

Wir erstellen standardmässig Sicherungen einzelner Tabellen. Dies hat insbesondere Vorteile in der Handhabung, da die Sicherungen der einzelnen Tabellen kleiner sind und Tabellen einzeln wiederhergestellt werden können.

Sollten Sie die Sicherung aller Tabellen als vollständige Sicherung innerhalb einer Datei wünschen, so können wir dies auf Wunsch für Ihren Server aktivieren. Die Vorteile in der Handhabung entfallen dadurch, jedoch ist die Sicherung hinsichtlich des Datenbestands konsistenter.

Aufgrund unserer langjährigen, positiven Erfahrung der Sicherung einzelner Tabellen raten wir nur in Ausnahmefällen zur Sicherung der vollständigen Datenbank.