Firebird Backup Tool gbak unter Linux Mint v19.3 Cinnamon 4.4.8

Forum für Fragen zu Firebirdeigenen Dienstprogrammen wie isql, gbak, nbackup, gfix, etc.

Moderator: martin.koeditz

Antworten
Gerd
Beiträge: 234
Registriert: Di 1. Okt 2019, 17:13

Hallo.

Es gibt aktuell in diesem Forum 'Dienstprogramme vier Themen, in denen das Firebird Backup Tool gbak besprochen wird. Und, wenn ich richtig liege, geht es dabei ausschließlich um dessen Verwendung unter Windows.

Dieses Thema soll sich ebenfalls mit dem Backup Tool gbak befassen, aber es wird hier mit der Distro Linux Mint (ab: v19.3, Cinnamon 4.4.8 64-bit) benutzt. Am meisten werden wohl Windows-Umsteiger sowie Linux Mint- und Firebird-Einsteiger profitieren - hoffentlich. Bitte bei Euren Beiträgen auch immer die von Euch benutzte Version von Firebird mit angeben.

Es soll darum gehen, den einen oder anderen LösungsANSATZ vorzustellen. Allerdings die Entscheidung darüber, wie viel Aufwand zum Thema Backup / Restore betrieben wird, die muss jeder für sich selbst treffen.

Hilfreicher, und um so interessanter wird es, wenn hier auch wieder 'Linux-Füchse' etwas beisteuern könnten egal, ob sie Firebird im Unternehmen oder Privat nutzen. Vorteilhaft wäre es, dass jeder sich etwas Mühe gibt, damit das hier für Um- und/oder Einsteiger verständlich ist.

Und bspw. das Folgende könnte hier rein gepackt werden:
:: gbak unter Linux Mint (Speicherort / Terminal-Aufruf)
:: gbak ausgeführt in einer Netzwerkumgebung (Backup/Restore)
:: gbak lokal ausgeführt Backup/Restore)
:: gbak Erläuterungen zu den hier dargestellten Optionen (Backup/Restore)
a) Allgeimeine Optionen
b) Backup Optionen
c) Restore Optionen
d) ggfls. Optionsunterschiede a - c (z. B. Restore: -r(eplace_database) / -rep(lace_database) ab Firebird 2.0 und höher.)
:: Konzepte
:: manuelles Backup
:: automatisiertes Backup (bash-Script, Cronjob, shutdown)
:: Aufbewahrung der Sicherungsdatei (Unternehmen, Privat)
:: Funktionale Kontrolle der Sicherungsdatei - wie
:: Tipps
:: Profi-Funktionen (E-Mail-Benachrichtigung einrichten. Hier wohl besser ein neues Thema eröffnen?)

Sacken lassen und los geht's :-)


Viele Grüße
Gerd
Linux Mint 21.3 Virginia Cinnamon 6.0.4
Firebird 5.0.0., Embedded, ISQL: LI-V5.0.0.1306
Lazarus 3.0.0 - FPC 3.2.2
Gerd
Beiträge: 234
Registriert: Di 1. Okt 2019, 17:13

Hallo.

Ich beginne einfach mal ...

Also, das Kommandozeilentool gbak wird von mir unten lokal, manuell, als Systemdatenbankadministrator minimalistisch und danach mit eine Reihe explizit hinzugefügter Optionsschalter ausgeführt. Letzteres bringt nützliche Informationen (z.B. Optionsschalter -z) einerseits zum Tool - andererseits zum Verlauf des Backup-Vorgangs.
Aber zunächst erst einmal folgt jetzt die Bekanntgabe des Speicherorts von gbak nach manueller Firebird-Installation.

gbak Speicherort:
Der Speicherort des Firebird Backup Tools gbak befindet sich unter Linux Mint hier:
/opt/firebird/bin

Sicherung erstellen:
Manuell, Lokal als Systemdatenbankadministrator (sysdba)

MINIMUM
Allgemeine Optionen:
-user sysdba = Der Nutzer Systemadimistrator.
-password 'sysdba_passwort' = Das Passwort des Nutzers Systemadministrator in Hochkommata.

Backup-Optionen:
Keine.

:: Das Terminal starten (z. B. mit STRG+ALT+T)
Eingabe:

Code: Alles auswählen

gerd@gerd-MS-7641:~$ /opt/firebird/bin/gbak -user sysdba -password 'sysdba_passwort' /home/gerd/Firebird/Datenbanken/adressen.fdb /home/gerd/Firebird/Datenbanken/adressen.fbk
:: Eingabetaste

* * *

OPTIONSSCHALTER
Allgemeine Optionen:
-z = Zeigt die gbak- und Server-Version an.
-v = Erbringt ausführliche Informationen über den gbak Vorgang.
-user sysdba = Der Nutzer Systemadimistrator.
-password 'sysdba_passwort' = Das Passwort des Nutzers Systemadministrator in Hochkommata.

Backup-Optionen:
-b = Backup (Der Schalter ist optional. Er kann, muss aber nicht eingegeben werden.)
-g = Führt während des Vorgangs keine Speicherbereinigung durch. (--> Sweeping --> Tool gfix)

:: Das Terminal starten (z. B. mit STRG+ALT+T)
:: Eingabe:

Code: Alles auswählen

gerd@gerd-MS-7641:~$ /opt/firebird/bin/gbak -b -g -z -v -user sysdba -password 'sysdba_Passwort' /home/gerd/Firebird/Datenbanken/adressen.fdb /home/gerd/Firebird/Datenbanken/adressen.fbk
:: Eingabetaste

Viele Grüße
Gerd
Linux Mint 21.3 Virginia Cinnamon 6.0.4
Firebird 5.0.0., Embedded, ISQL: LI-V5.0.0.1306
Lazarus 3.0.0 - FPC 3.2.2
Gerd
Beiträge: 234
Registriert: Di 1. Okt 2019, 17:13

Hallo.

Und weiter geht es mit der 'automatisierten Backup-Erstellung' (so nenne ich das mal.)

Bekannt ist, dass nur der Systemdatenbankadministrator (SYSDBA) oder der Datenbankbesitzer (z.B. User: Gerd) eine Sicherung durchführen können.
Jedoch kann jeder Benutzer eine Sicherung in einer neuen Datenbank wiederherstellen. Nur das betrifft den gbak-Funktionsbereich 'Wiederherstellung' (Restore) und der soll ja einzeln für sich beschrieben werden.

Um gbak auszuführen muss die Datenbank nicht heruntergefahren werden. In der Firebird Dokumentation wird darauf hingewiesen, dass eine Leistungsverschlechterung festgestellt werden kann. So kommt man schnell auf die Idee gbak bspw. am Abend oder in der Nacht ausführen zu lassen. Nur, wer soll das tun und wie?
Das WIE ist einfach zu beantworten. Es gibt nämlich die Möglichkeit ein Bash-Script zu erstellen, um dieses von einem geeigneten Cronjob, der zuvor in der Crontab angelegt werden muss, vom Dienst CRON aufrufen zu lassen. Allerdings WER das umsetzt, kann ich hier nicht beantworten. Es wird wohl an Ihnen hängen bleiben. ;) Weitere Infos zu CRON...

Schauen wir uns diese zwei Schritte, in ein einfaches Beispiel gehüllt, als Lösungsansatz einmal an:
1. Schritt
A) Verzeichnisse
Hier im Beispiel werden diese beiden Verzeichnisse benötigt und manuell erstellt:
/home/gerd/Firebird/Datenbanken/
/home/gerd/Firebird/FB-Logs/
Sie müssen diese bei sich entsprechend anpassen.

B) Bash-Script
Ein Bash-Script erstellen - mit Datum und es beispielhaft benennen gbak_b_adressen.sh:

Code: Alles auswählen

#!/bin/bash
/opt/firebird/bin/gbak -b -g -z -v -user sysdba -password 'sysdba_passwort' /home/gerd/Firebird/Datenbanken/adressen.fdb /home/gerd/Firebird/Datenbanken/adressen_$(date +"%d-%m-%y%y").fbk
Ergebnis: gbak erzeugt eine Sicherungsdatei adressen_TT-MM-JJJJ.fbk

Oder auch ...

Ein Bash-Script erstellen - mit Datum und Uhrzeit und es beispielhaft benennen gbak_b_adressen.sh:

Code: Alles auswählen

#!/bin/bash
/opt/firebird/bin/gbak -b -g -z -v -user SYSDBA -password 'sysdba_passwort' /home/gerd/Firebird/Datenbanken/adressen.fdb /home/gerd/Firebird/Datenbanken/adressen_$(date +"%d-%m-%y%y_%H:%M:%S").fbk
Ergebnis: gbak erzeugt eine Sicherungsdatei adressen_TT-MM-JJJJ_HH:MM:SS.fbk

Wie in der Dokumentation erwähnt erhalten Sie auch mit der automatisierten Ausführung von gbak einen konsistenten Schnappschuss der Datenbank (hier adressen.fdb) zum Zeitpunkt des Starts von gbak. (Auch wissenswert: gbak --> Garbage Collection).

2. Schritt
Der Aufruf der Crontab (versinnbildlicht eine Datei --> Cron-Table dt. Zeit-Tabelle).
Die Crontab wird über das Terminal aufgerufen.
:: Das Terminal aufrufen mit STRG+ALT+T
:: Eingabe:

Code: Alles auswählen

gerd@gerd-MS-7641:~$ crontab -e
Mittels GNU nano Editor lässt sich die angezeigte Datei bearbeiten.
Die englisch-sprachige Beschreibung in grüner Schriftfarbe kann bleiben.
Es muss nun eine Sicherungsaufgabe für gbak und zwar in eine einzige Zeile geschrieben werden.
Diese Zeile ist der Job, den das Programm Cron zu fälligen Zeitpunkten ausführen wird. So geht es:

Code: Alles auswählen

15 20 * * * /home/gerd/Firebird/FB-Skripte/gbak_b_adressen.sh >> /home/gerd/Firebird/FB-Logs/Backup_adressen.log 2>&1
Cronjob für Backup.png
Cronjob für Backup.png (87.64 KiB) 24525 mal betrachtet
Also:
20:15 Uhr täglich wird das Script gbak_b_adressen.sh (mit Datum oder mit Datum und Uhrzeit) ausgeführt.
Die Folge:
Das in diesem Rhythmus vom CRON-Dienst ausgeführte Script gbak_b_adressen.sh erstellt ein Backup der Firebird Datenbank adressen.fdb , die im Verzeichnis /home/gerd/Firebird/Datenbanken/ liegt und legt es als Backupdatei (adressen_TT-MM-JJJJ.fbk oder adressen_29-03-2020_HH:MM:SS.fbk) in das Vereichnis /home/gerd/Firebird/Datenbanken/.
Außerdem veranlassen Sie mit dieser Crontabzeile, dass eine Log-Datei (Backup_adressen.log) erzeugt werden soll, die in das Verzeichnis /home/gerd/Firebird/FB-Logs/ gelegt wird. Die Log-Datei wird nur ein Mal erzeugt und bei jeder folgenden Sicherung nach unten erweitert.

Tipp:
So können Sie sich Ihre Cronjobs im Terminal anzeigen lassen:
:: Das Terminal aufrufen mit STRG+ALT+T
:: Eingabe:

Code: Alles auswählen

gerd@gerd-MS-7641:~$ crontab -l
So können Sie Ihre Cronjobs löschen.
:: Das Terminal aufrufen mit STRG+ALT+T
:: Eingabe:

Code: Alles auswählen

gerd@gerd-MS-7641:~$ crontab -e
Nun mit der Einfügemarke zur jeweiligen Zeile mit dem Cronjob navigieren und diese Zeile löschen.
Änderungen übernehmen mit ...
Tastenkombination: STRG+X
Taste: J
Eingabetaste

Falls Sie es möchten, dass vor der Sicherung erst noch eine Meldung (Ja - Nein Abfrage) eingeblendet werden soll, dann statten Sie das Bash-Script (hier nur Datum) in etwa so aus:

Code: Alles auswählen

#!/bin/bash
if ! /usr/bin/zenity --question --text "Datenbank adressen.fdb mit gbak sichern?"; then
  exit;
fi
/opt/firebird/bin/gbak -b -g -z -v -ig -user SYSDBA -password 'sysdba_passwort' /home/gerd/Firebird/Datenbanken/adressen.fdb /home/gerd/Firebird/Datenbanken/adressen_$(date +"%d-%m-%y%y").fbk 
Voraussetzung ist, dass zenity installiert ist (was bei der Distri Linux Mint Standard sein soll).
Nur überlegen Sie - es muss erst die Meldung mit mit Klick auf Ja bestätigen werden, bevor das Backup durchgeführt wird. Somit läuft es nicht mehr automatisch im Hintergrund (zum Abend - in der Nacht) ab.


Viele Grüße
Gerd
Linux Mint 21.3 Virginia Cinnamon 6.0.4
Firebird 5.0.0., Embedded, ISQL: LI-V5.0.0.1306
Lazarus 3.0.0 - FPC 3.2.2
Gerd
Beiträge: 234
Registriert: Di 1. Okt 2019, 17:13

Hallo.

Der vorangegangene Beitrag befasste sich mit dem automatisierten Aufruf von gbak unter Verwendung eines Cronjobs. Dem soll nun noch etwas nachgereicht werden:

Insbesondere dann, wenn der Backup-Vorgang mittels Cronjob in den Abend bis Nachtstunden durchgeführt wird und der Rechner (lokal) danach abgeschaltet werden soll, muss dafür noch etwas getan werden. Hier ein möglicher Ansatz:

Man könnte jeden Tag neu festlegen, dass der Rechner nach dem Backup-Vorgang heruntergefahren wird.
Wird also das Backup mittels Cronjob 20:15 Uhr durchgeführt (siehe oben), dann stellt man den Shutdown - je nach zeitlichen Backup-Umfang - auf bspw. 20:20 Uhr ein. So:
:: Terminal aufrufen: STRG+ALT+T
:: Eingabe: shutdown -h 20:20
:: Eingabetaste

Code: Alles auswählen

gerd@gerd-MS-7641:~$ shutdown -h 20:20
Shutdown scheduled for Tue 2020-03-31 20:20:00 CEST, use 'shutdown -c' to cancel.
gerd@gerd-MS-7641:~$ 
Man erhält die Mitteilung, dass der Shutdown für 20:20:00 Uhr geplant ist.

Soll der (für den jeweiligen Tag) so gesetzte Shutdown für 20:20 Uhr nicht stattfinden - also abgebrochen werden - gibt man in das Terminal das Folgende ein:

:: Terminal aufrufen: STRG+ALT+T
:: Eingabe: shutdown -c
:: Eingabetaste

Code: Alles auswählen

gerd@gerd-MS-7641:~$ shutdown -c
gerd@gerd-MS-7641:~$ 
Es wird keine Mitteilung ausgegeben.

Weitere Informationen zum Thema Shutdown (u. a. diesbezügliche Befehle, Programme, ...) gibt es u. a. hier.

Viele Grüße
Gerd
Linux Mint 21.3 Virginia Cinnamon 6.0.4
Firebird 5.0.0., Embedded, ISQL: LI-V5.0.0.1306
Lazarus 3.0.0 - FPC 3.2.2
Gerd
Beiträge: 234
Registriert: Di 1. Okt 2019, 17:13

Hallo.

Die Datenbank-Wiederherstellung (lokal) mittels Kommandozeilentool gbak - hoffentlich eine Orientierungshilfe.

Die vorangegangenen drei Beiträge beschäftigten sich mit der manuellen und automatisierten Erstellung von Backups einer Firebird Datenbank unter Verwendung des dafür vorgesehenen Firebird Tools gbak.

Mir sind zwei Gründe bekannt, weshalb man seine Firebird Datenbank mit gbak sichern und wiederherstellen sollte:

1. Grund: Man bringt die Datenbank (*.fdb) samt Einstellungen und Daten in Sicherheit. Wie bereits erwähnt, stellt eine solche Sicherung ein Schnappschuss der kompletten Datenbank dar.

2. Grund: Eine stattfindende Wartung der Datenbank. Durch das Sichern und Wiederherstellen mit gbak wird auch Einfluss auf den Metadatenänderungszähler, der jeder Tabelle zugewiesen ist, genommen. Der Zähler kann den maximalen Wert von 255 annehmen. Bei einer Wiederherstellung wird er wieder auf den Startwert gesetzt. Bspw. das Hinzufügen einer Tabellenspalte erhöht den Metadatenänderungszähler. Welche weiteren Aktionen diesen Zähler erhöhen, lesen Sie u. a. in dieser Firebird-Dokumentation. Die Werte des Metadatenänderungszählers werden in der Systemtabelle RDB$FORMATS gespeichert.

Es wird sehr empfohlen diese Firebird-Dokumentation und diese Firebird-Dokumentation zu lesen, bevor man sich mit gbak an die Wiederherstellung (Schalter: -REPLACE_DATABASE, -RECREATE_DATABASE, -CREATE_DATABASE) einer Firebird Datenbank macht.

Die Firebird Datenbank adressen_TT-MM-JJJJ.fbk (bzw. auch: adressen_TT-MM-JJJJ_HH:MM:SS.fbk) mit dem Schalter -REPLACE_DATABASE wiederherstellen:

Schalter -REPLACE_DATABASE
Datenbank nicht da. OK

Code: Alles auswählen

gerd@gerd-MS-7641:~$ /opt/firebird/bin/gbak -rep -user sysdba -password 'sysdba_passwort' /home/gerd/Firebird/Datenbanken/adressen_TT-MM-JJJJ.fbk /home/gerd/Firebird/Datenbanken/adressen.fdb
gerd@gerd-MS-7641:~$
Schalter -REPLACE_DATABASE
Datenbank da und nicht in Verwendung.) OK

Code: Alles auswählen

gerd@gerd-MS-7641:~$ /opt/firebird/bin/gbak -rep -user sysdba -password 'sysdba_passwort' /home/gerd/Firebird/Datenbanken/adressen_TT-MM-JJJJ.fbk /home/gerd/Firebird/Datenbanken/adressen.fdb
gerd@gerd-MS-7641:~$
Schalter -REPLACE_DATABASE
Datenbank da und in Verwendung. Nicht OK

Code: Alles auswählen

gerd@gerd-MS-7641:~$ /opt/firebird/bin/gbak -rep -user SYSDBA -password 'sysdba_passwort' /home/gerd/Firebird/Datenbanken/adressen_TT-MM-JJJJ.fbk /home/gerd/Firebird/Datenbanken/adressen.fdb
gbak: ERROR:could not drop database /home/gerd/Firebird/Datenbanken/adressen.fdb (no privilege or database might be in use)
gbak:Exiting before completion due to errors
gerd@gerd-MS-7641:~$ 

Die Firebird Datenbank adressen_TT-MM-JJJJ.fbk (bzw. auch: adressen_TT-MM-JJJJ_HH:MM:SS.fbk) mit dem Schalter: -RECREATE_DATABASE neu erstellen:

Schalter -RECREATE_DATABASE
Datenbank nicht da. OK

Code: Alles auswählen

gerd@gerd-MS-7641:~$ /opt/firebird/bin/gbak -recreate_database -user SYSDBA -password 'sysdba_passwort' /home/gerd/Firebird/Datenbanken/adressen_TT-MM-JJJJ.fbk /home/gerd/Firebird/Datenbanken/adressen.fdb
gerd@gerd-MS-7641:~$
Schalter -RECREATE_DATABASE
Datenbank da und nicht in Verwendung. Nicht OK

Code: Alles auswählen

gerd@gerd-MS-7641:~$ /opt/firebird/bin/gbak -recreate_database -user SYSDBA -password 'sysdba_passwort' /home/gerd/Firebird/Datenbanken/adressen_TT-MM-JJJJ.fbk /home/gerd/Firebird/Datenbanken/adressen.fdb
gbak: ERROR:database /home/gerd/Firebird/Datenbanken/adressen.fdb already exists.  To replace it, use the -REP switch
gbak:Exiting before completion due to errors
gerd@gerd-MS-7641:~$
Es wird der Hinweis gegeben: Um sie zu ersetzen, verwenden Sie den Schalter -REP (= Schalter: -REPLACE_DATABASE).

Empfehlenswert ist es, das Wiederherstellen einer Firebird Datenbank mit gbak zunächst an einer Dummy-Datenbank zu testen.

Viele Grüße
Gerd
Linux Mint 21.3 Virginia Cinnamon 6.0.4
Firebird 5.0.0., Embedded, ISQL: LI-V5.0.0.1306
Lazarus 3.0.0 - FPC 3.2.2
Benutzeravatar
martin.koeditz
Beiträge: 443
Registriert: Sa 31. Mär 2018, 14:35

Hallo Gerd,

danke für die Zusammenfassung. Habe ich mir gleich mal als Lesezeichen abgelegt.

Gruß
Martin
Martin Köditz
it & synergy GmbH
Antworten