Automatisches Backup und Restore einer einzelnen Datenbank

Diskussionen rund um allgemeine Themen die alle Schulformen betreffen.

Moderatoren: Raffenberg, A. Schüller, Pfotenhauer

Antworten
T.Hoffmann
Beiträge: 4
Registriert: Montag 31. März 2025, 15:50
Schulform: Förderschule

Automatisches Backup und Restore einer einzelnen Datenbank

Beitrag von T.Hoffmann »

Hallo zusammen,

gibt es jemand von Ihnen, der mehrere Schulen-Datenbanken auf Schild 3 hat und dafür ein automatisiertes Backup laufen hat und zwar in der Form, daß die Datenbank einer einzelnen Schule daraus wiederhergestellt werden kann?

Könnten Sie ein solches Skript (Backup und Restore) zur Verfügung stellen?
Hauke Hayen
Fachberater*in
Beiträge: 1007
Registriert: Montag 1. Oktober 2018, 17:16
Schulform: Gymnasium

Re: Automatisches Backup und Restore einer einzelnen Datenbank

Beitrag von Hauke Hayen »

Das geht ziemlich einfach über Ansprechen der Api.
Für linux-Server kann ich Ihnen nachher ein einfaches Script mit einem curl-Befehl schicken.
Oder haben Sie einen Win-Server?
Viele Grüße, H. Hayen
m.hagemeier
Beiträge: 1
Registriert: Montag 2. Dezember 2024, 14:24
Wohnort: Essen
Schulform: Schul-IT
Motto: Dafür bin ich nicht zuständig, das macht der Kollege

Re: Automatisches Backup und Restore einer einzelnen Datenbank

Beitrag von m.hagemeier »

Hallo,
wir machen das auch mit Windows-Servern, jeweils mehrere Schulen auf einem SVWS Server. Ich lasse jeden Abend per Scheduler eine Batch laufen, die in etwa so aussieht:

Code: Alles auswählen

For /f "tokens=1-2 delims=/:" %%a in ("%TIME: =0%") do (set mytime=%%a%%b)

curl --user "root:PASSWORT" --insecure -X "GET" "https://SERVER:443/api/schema/export/DATENBANK/sqlite" -H "accept: application/vnd.sqlite3" --output c:\schild3-backup\DATENBANK.sqlite
"C:\Program Files\7-Zip\7z.exe" a -tzip C:\schild3-backup\DATENBANK.zip C:\schild3-backup\DATENBANK.sqlite
del "C:\schild3-backup\DATENBANK.sqlite"
move C:\schild3-backup\DATENBANK.zip C:\Schild3-Backup\SCHULE\DATENBANK_%date%_%mytime%.zip

forfiles /p "C:\Schild3-Backup\SCHULE" /s /m *.* /D -14 /C "cmd /c del @path"
Das Script holt sich eine Datenbank, komprimiert diese in eine ZIP-Datei und verschiebt diese Datei mit Zeitstempel in einen Schulordner. Nachteil ist natürlich, dass man jede Datenbank von Hand in das Skript eintragen muss.

Wir arbeiten gerade an einem Powershellscript, das alle Server in einem Array abfragt und die Datenbanken automatisch sichert und packt. Wenn das fertig und getestet ist stellen wir das gerne zur Verfügung.
kroerig
Beiträge: 413
Registriert: Samstag 5. Januar 2019, 20:18
Schulform: - keine Schule -
Kontaktdaten:

Re: Automatisches Backup und Restore einer einzelnen Datenbank

Beitrag von kroerig »

Warum so kompliziert über die langsame API, wenn man Zugriff auf den MariaDB Server hat.

Ich sichere unter Linux mit einem kleinen Script alle Datenbanken auf einen Rutsch. Wenn man zusätzlich bzr installiert hat man eine depulizierte Versionierung.

Code: Alles auswählen

#!/bin/bash
# TARGET: Backup-Ziel
# IGNORE: Liste zu ignorierender Datenbanken (durch | getrennt)
# CONF: MySQL Config-Datei, welche die Zugangsdaten enthaelt
TARGET=/opt/mysql
IGNORE="information_schema|performance_schema"

CONF=/etc/mysql/debian.cnf
if [ ! -r $CONF ]; then /usr/bin/logger "$0 - auf $CONF konnte nicht zugegriffen werden"; exit 1; fi
if [ ! -d $TARGET ] || [ ! -w $TARGET ]; then /usr/bin/logger "$0 - Backup-Verzeichnis nicht beschreibbar"; exit 1; fi

DBS="$(/usr/bin/mysql --defaults-extra-file=$CONF -Bse 'show databases' | /bin/grep -Ev $IGNORE)"
NOW=$(date +"%Y-%m-%d")

for DB in $DBS; do
    /usr/bin/mysqldump --defaults-extra-file=$CONF --skip-extended-insert --skip-comments $DB > $TARGET/$DB.sql
done

#if [ -x /usr/bin/bzr ] && [ -d ${TARGET}/.bzr/branch ]; then
#  cd $TARGET
#  /usr/bin/bzr add .
#  /usr/bin/bzr commit -m "$NOW"
#else
#  /usr/bin/logger "$0 - bzr nicht verfuegbar oder Backup-Ziel nicht unter Versionskontrolle"
#fi

#/usr/bin/logger "$0 - Backup von $NOW erfolgreich durchgefuehrt"
Mir läuft das Script im Rahmen eines Borg-Backups, daher ist der bzr-Teil auskommentiert.
"Der Computer rechnet mit allem - nur nicht mit seinem Besitzer." Dieter Hildebrandt
T.Hoffmann
Beiträge: 4
Registriert: Montag 31. März 2025, 15:50
Schulform: Förderschule

Re: Automatisches Backup und Restore einer einzelnen Datenbank

Beitrag von T.Hoffmann »

Leider hat mich das Forum nicht über die Antworten informiert, obwohl es in meinen Benachrichtigungseinstellungen anders eingestellt ist.
Wir verwenden einen Windows-Server. Ich werde mir die Skripts anschauen. Wie geht dann die Rücksicherung einer einzelnen Schule?
kroerig
Beiträge: 413
Registriert: Samstag 5. Januar 2019, 20:18
Schulform: - keine Schule -
Kontaktdaten:

Re: Automatisches Backup und Restore einer einzelnen Datenbank

Beitrag von kroerig »

Unter Windows nutzte ich hier dieses Script: https://github.com/michael-milette/batch/ mit ein paar kleinen Modifikationen, die der Umgebung geschuldet sind.

Der Restore erfolgt dann einfach durch ein "mysql < SQLDatei".
Das SQL Script löscht dann die Tabellen im vorhandenen Schema/ Datenbank und legt sie neu an.

Wenn man das Script mehrfach am Tag ausführt und die Dateien in einem dedupliziertem Verzeichnis ablegt, dann kann man platzsparend sehr viele Backups ablegen.
"Der Computer rechnet mit allem - nur nicht mit seinem Besitzer." Dieter Hildebrandt
T.Hoffmann
Beiträge: 4
Registriert: Montag 31. März 2025, 15:50
Schulform: Förderschule

Re: Automatisches Backup und Restore einer einzelnen Datenbank

Beitrag von T.Hoffmann »

Hat jemand von Ihnen das über ein Powershell Skript über die API URL hinbekommen wie es auf
https://doku.svws-nrw.de/deployment/Dat ... te-backups
für ein crontab geskriptet beschrieben wird? Nur eben in Powershell. Das wäre das genialste.

Das Powershell Skript müßte dann ja etwa so aussehen - nur klappt es bei mir leider nicht:
$headers = @{
'accept' = 'application/vnd.sqlite3'
}

$user = "svwsadmin"
$pass = "fYC+z$*RqwB3tUsn%EvZ"
$pair = "$($user):$($pass)"
$encodedCredentials = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($pair))
$headers.Add("Authorization", "Basic $encodedCredentials")

# Ignoriert SSL-Zertifikatsfehler (entspricht -k in curl)
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}

Invoke-WebRequest -Uri "https://localhost:443/api/schema/export ... ma>/sqlite" `
-Method Get `
-Headers $headers `
-OutFile "D:\_Save\Test\<Schuldschema>.sqlite"
Benutzeravatar
T.Hagel
Beiträge: 317
Registriert: Sonntag 29. August 2021, 14:43
Schulform: Alle
Motto: Vermittler zwischen den Welten
Lehrerkind, Ex-Schuladmin, seit 2009 für die Stadt Köln im Schulverwaltungsupport tätig

Re: Automatisches Backup und Restore einer einzelnen Datenbank

Beitrag von T.Hagel »

"Genialer" wäre es, wenn, wie schon mal in einem anderen Backup-Beitrag geschrieben, wenn dieses Backupthema direkt in den SVWS-Server z.B. innerhalb des "Admin-Clients", bzw. der "Admin"-Webseite integriert würde. Dort einfach einen Bereich hinzufügen, in dem jeder (Schild-Administrator) ohne weiteren Programmierkenntnisse und ohne weiteren Basteleien auf die gleiche Art und Weise wie alle anderen,festlegen kann, wann, wie oft am Tag, wohin, welche Datenbanken gesichert werden sollen. Entsprechend bräuchte es auch eines Bereiches, um diese Backups ggf. auch schulscharf wieder herstellen zu können.

Dort, wo SchildZentral oder SchildNRW zentral durch einen IT-Dienstleister oder kommunales Rechenzentrum bereitgestellt wird, befinden sich die Daten auf Datenbankservern. Diese Datenbanken werden zusammen mit den Datenbank- und Web-, aber auch Fileservern täglich gesichert. Dort, würden dann die Rücksicherungen der Server oder Datenbanken durch die jeweiligen Datenbank- oder Serverexperten des Dienstleisters durchgeführt werden.

Dort aber, wo genau das nicht der Fall ist und Schulen eben nicht auf ein "Schulverwaltungsnetzwerk-as-a-Service" zurückgreifen können und stattdessen selbst ein eigenes Netzwerk betreiben oder einfach nur eine Handvoll PCs hingestellt bekommen hat, da sollte sollte auch noch bedacht werden, dass neben den Datenbanksicherungen auf der Datenbank- und der SVWS-Server täglich zu sichern ist, im Problemfall zeitnah alles wieder herstellen zu können.

Schöne Grüße aus Köln
Thomas Hagel
Antworten

Zurück zu „Allgemeines“