Stručný průvodce zálohováním a obnovou pomocí Gbak
1. Zvládnutí zálohování pomocí Gbak
1.1 Nejjednodušší záloha Firebird pomocí příkazu gbak
1.2. Lokální záloha pomocí gbak, kterou lze provést online na Windows
1.3. Záloha pomocí gbak s TCP/IP připojovacím řetězcem
1.4. Rychlejší záloha pomocí gbak se Service Manager
1.5. Nejrychlejší záloha pomocí gbak se Service Manager a zakázaným garbage collection
1.6. Záloha na síťovou sdílenou složku nebo síťové umístění
1.7. Jednoduchá záloha ze vzdáleného serveru na lokální počítač
1.8. Rychlejší záloha ze vzdáleného serveru na lokální počítač se Service Manager
1.9. Záloha databáze Firebird na vzdáleném serveru na stejný vzdálený server pomocí Service Manager
1.10. Záloha databáze Firebird 6x rychleji s Firebird 5 (nebo HQbird v 2.5/3.0/4.0/5.0)
2. Obnova pomocí nástroje Gbak
2.1. Nejjednodušší příkaz pro obnovu
2.2. Obnova s localhost připojovacím řetězcem
2.4. Rychlejší obnova se Service Manager
2.6. Obnova databáze pomocí aliasu
2.7. Obnova lokální zálohy na vzdálený server
2.8. Obnova lokální zálohy na vzdálený server se Service Manager
2.9. Obnova extrémně dlouhých tabulek
3. Ladění a protokolování procesů zálohy a obnovy
3.2. Přidání statistik výkonu do verbose výstupu
3.3. Vyloučení tabulek ze zálohy a/nebo z obnovy
3.4. Načtení hesla pro zálohu nebo obnovu ze souboru
Velmi časté dotazy o VM a zálohách Firebird
Dodatek A. Chyby během zálohy/obnovy
Co je gbak?
Gbak je standardní nástroj příkazového řádku Firebird (viz jeho oficiální dokumentace zde), navržený k provádění 1) plné zálohy databáze: přečte každý záznam v databázi a uloží je do záložního souboru, 2) obnovy zálohy do nové databáze.
Pro vývojáře a administrátory se zkušenostmi s jinými RDBMS může být termín „záloha“ trochu matoucí, protože gbak nevytváří přesnou kopii databáze, ale soubor v nedatabázovém formátu, pouze s daty (indexy jsou uloženy jako deklarace).
Pro vytvoření databáze ze záložního souboru gbak je nutné provést proces obnovy pomocí gbak.
1. Zvládnutí zálohování pomocí Gbak
1.0. Příprava
Vytvořme složku C:\data a vložme tam nějakou databázi. Použijeme 5GB databázi z Firebird OLTP-EMUL test, ale můžete samozřejmě použít vlastní databázi.
Pro uživatele Linuxu - vytvořme složku /db a změňme jejího vlastníka na „firebird“ a zkopírujme tam databázi (ujistěte se, že jejím vlastníkem je také firebird).
mkdir /db
chown firebird -R /db
1.1 Nejjednodušší záloha Firebird pomocí příkazu gbak
Windows
gbak -b c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b /db/test1.fdb /db/backup1.fbk -user SYSDBA -pass masterkey
V tomto příkladu nástroj gbak přistupuje k souboru databáze pomocí lokálního nebo embedded přístupu.
Firebird 3.0: Embedded přístup ve výchozí konfiguraci pro Firebird 3.0 (s parametrem ServerMode = SuperServer v firebird.conf) se pokusí umístit exkluzivní zámek na databázi, takže ostatní připojení nebudou mít k databázi přístup (nebo se pokus gbak nezdaří kvůli aktivním připojením).
Firebird 2.5: S Firebird 2.5 na Windows bude příkaz fungovat dobře přes protokol XNET (pokud máte samozřejmě spuštěnou pouze jedinou instanci Firebird). Na Linuxu se Firebird pokusí použít embedded přístup; pokud není dostupný, automaticky (a implicitně) se pokusí připojit přes TCP/IP. (Pokud nevíte, co znamená XNET, INET atd., podívejte se prosím na Firebird Connection Strings Cheat Sheet).
Poznámka 1: Tento příkaz běží pod účtem OS uživatele (tj. vaším) a používá jeho oprávnění pro přístup k záložním a databázovým souborům.
Obvykle služba Firebird na Windows běží pod účtem LocalSystem a na Linuxu pod uživatelem „firebird“, ale konzole se obvykle spouští pod vaším vlastním uživatelským účtem.
Pokud tento uživatelský účet nemá přístup k cestě databáze nebo cestě zálohy, gbak selže s chybou „Cannot open backup file“ (viz příklad v Dodatku A. Chyby, #5).
Poznámka 2: gbak -b tiše přepíše záložní soubor. Takže pokud již máte backup1.fbk, bude přepsán.
Poznámka 3: Na Linuxu tento příkaz gbak vytvoří záložní soubor s vlastníkem rovným uživateli konzole.
Čas zálohy pro tento příkaz: 120 sekund
1.2. Lokální záloha pomocí gbak, kterou lze provést online na Windows
Tato část je pouze pro uživatele Windows! Obvykle potřebujeme provést zálohu, zatímco máme aktivní připojení k databázi, takže místo embedded připojení je lepší explicitně zadat lokální protokol, aby se zabránilo umístění exkluzivního zámku na soubor databáze samotným gbak ve Firebird 3, tj. XNET.
Pro Firebird 3.0:
gbak -b xnet://c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey
Pro Firebird 2.5 můžeme použít lokální připojovací řetězec a bude také používat XNET:
gbak -b c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey
Na Linuxu Firebird nepodporuje specifický lokální protokol jako XNET na Windows, takže je nutné použít TCP/IP připojovací řetězec (viz část 1.3).
Také XNET funguje pouze pro jedinou instanci Firebird, takže pokud spouštíte několik instancí Firebird na Windows, může být jednodušší použít připojovací řetězec typu INET k určení cílové instance serveru.
Čas zálohy: 139 sekund
1.3. Záloha pomocí gbak s TCP/IP připojovacím řetězcem
Toto je nejuniverzálnější příkaz gbak pro provedení online zálohy.
Windows
gbak -b localhost:c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b localhost:/db/test1.fdb /db/backup1.fbk -user SYSDBA -pass masterkey
V tomto případě zadáním localhost: na začátku cesty k databázi se připojení provádí přes síťový subsystém Firebird.
Je to mírně pomalejší než lokální přístup, ale funguje ve všech případech, kdy máme spuštěný server, který přijímá připojení.
Nestandardní port pro Firebird
Pokud máte Firebird spuštěný na nestandardním portu (např. 3051 místo 3050), můžete provést zálohu tímto způsobem:
Windows
gbak -b localhost/3051:c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b localhost/3051:/db/test1.fdb /db/backup1.fbk -user SYSDBA -pass masterkey
Čas zálohy: 182 sekund
1.4. Rychlejší záloha pomocí gbak se Service Manager
Jak můžeme dosáhnout univerzálnosti TCP/IP připojení s podporou nestandardního portu a rychlé lokální zálohy? Použijme Service Manager! Service Manager, zjednodušeně řečeno, je způsob, jak spouštět standardní nástroje prostřednictvím enginu Firebird. Vezměte prosím na vědomí, že v případě Service Manager není nutné zadávat název serveru v cestě k databázi, pouze v parametru -se.
Windows
gbak -b -se localhost:service_mgr c:\Data\test1.fdb c:\Data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b -se localhost:service_mgr /db/test1.fdb /db/backup1.fbk -user SYSDBA -pass masterkey
Tento příkaz používá přepínač -service k určení, že chceme použít Service Manager instance Firebird na portu 3050 k provedení zálohy.
V tomto případě bude záloha provedena přímo uvnitř procesu Firebird (má kopii kódu gbak), a protože komunikace v rámci procesu je mnohem rychlejší, záloha bude v tomto případě výrazně rychlejší.
Pokud Firebird běží na nestandardním portu (např. 3051), příkaz může vypadat takto:
gbak -b -se localhost/3051:service_mgr c:\Data\test1.fdb c:\Data\backup1.fbk -user SYSDBA -pass masterkey
Poznámka: Existuje významné omezení ve Firebird 2.5 a Firebird 3.0.0-3.0.5 (odstraněno až ve 3.0.6): příkazový řádek (všechny parametry a cesty pro databázi a zálohu) musí být kratší než 256 znaků.
Pokud narazíte na tento limit, například kvůli dlouhým cestám databáze a zálohy, můžete deklarovat alias pro databázi v databases.conf (3.0 a vyšší) nebo aliases.conf (2.5):
mydb1=c:\Data\test1.fdb #Windows
nebo
mydb1=/db/test1.fdb #linux
a poté jej použít v našem příkazu:
Windows
gbak -b -se localhost:service_mgr mydb1 c:\Data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b -se localhost:service_mgr mydb1 /db/backup1.fbk -user SYSDBA -pass masterkey
Čas zálohy: 115 sekund
1.5. Nejrychlejší záloha pomocí gbak se zakázaným garbage collection
Aby byla záloha ještě rychlejší, přidejme přepínač -g
-G(ARBAGE_COLLECT) zakázat garbage collection
Takže příkaz zálohy bude následující
Windows
gbak -b -se localhost:service_mgr -g mydb1 c:\Data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b -se localhost:service_mgr -g mydb1 /db/backup1.fbk -user SYSDBA -pass masterkey
Přepínač -g nutí engine Firebird zakázat garbage collection pro proces zálohy v souboru databáze.
To neznamená, že verze záznamů s garbage budou uloženy v záložním souboru; znamená to, že server se nebude snažit čistit existující garbage v databázi během zálohy, a záloha bude rychlejší.
Důrazně doporučujeme používat tento přepínač, protože věříme, že garbage collection a související čištění by mělo být prováděno pomocí sweep (gfix -sweep nebo autosweep), takže je lepší nepovažovat gbak za jakoukoli alternativu sweep.
Čas zálohy: 105 sekund
1.6. Záloha na síťovou sdílenou složku nebo síťové umístění
Co když potřebujeme umístit záložní soubor do síťové sdílené složky?
Na Windows
Častý zmatek nových uživatelů Firebird: ruční záloha (když spustíte příkaz z příkazového řádku) s jednoduchým gbak -b do síťové sdílené složky funguje dobře, ale rychlá verze gbak s -se localhost:service_mgr nefunguje.
Důvodem je, že Firebird na Windows běží pod účtem LocalSystem, který nemá přístup k síťovým umístěním (pokud tyto síťové sdílené složky nemají nakonfigurovaný přístup pro skupinu „Everyone“, ale to je v naší éře ransomwaru velmi, velmi nebezpečné).
Řešením je spustit službu Firebird na Windows pod účtem s dostatečnými právy pro přístup k síťové sdílené složce a zároveň s dostatečnými právy pro přístup k lokálním souborům databáze a systémovým souborům v C:\ProgramData\Firebird. Také je dobrý nápad nakonfigurovat parametr RestrictAccess v firebird.conf.
Na Linuxu
Protože Firebird na Linuxu běží pod účtem „firebird“, připojte síťovou sdílenou složku s mapováním na uživatele „firebird“, takže služba Firebird bude mít přístup k síťovému umístění stejným způsobem jako k lokálnímu disku.
1.7. Jednoduchá záloha ze vzdáleného serveru na lokální počítač
Je možné zálohovat databázi ze vzdáleného serveru na lokální počítač.
Příklad příkazu níže začíná na počítači s Windows, přistupuje k databázi na Linux serveru (s IP adresou 192.168.0.108, ale samozřejmě lze použít i hostname serveru) a záložní soubor je uložen do složky C:\Data na Windows):
gbak -b -user SYSDBA -pass masterkey 192.168.0.108:/db/test1.fdb c:\data\remotebackup1.fbk
Čas zálohy: 568 sekund
Tento příkaz bude obvykle mnohem pomalejší než lokální záloha, protože gbak čte data ze vzdáleného serveru a přenáší záznamy přes síť.
1.8. Rychlejší záloha ze vzdáleného serveru na lokální pomocí Service Manager
Následující příkaz je rychlejší než tradiční záloha ze vzdáleného serveru na lokální počítač, popsaná v #1.7
gbak -b -se 192.168.0.108:service_mgr -user SYSDBA -pass masterkey /db/test1.fdb stdout > C:\Data\remoteback1.fbk
Používá Service Manager k provedení zálohy na vzdáleném serveru, ale výstup je odesílán do stdout pipe a poté přesměrován do lokálního souboru.
Tento příkaz je obvykle o 15%-20% rychlejší než v #1.7 (Jednoduchá záloha ze vzdáleného serveru na lokální), a to z následujících důvodů:
- provádí zálohu prostřednictvím Service Manager na vzdáleném serveru, takže všechny operace čtení a komprese jsou prováděny nejrychlejším způsobem,
- přes síť přenáší pouze výsledný záložní soubor, jehož velikost je menší než data v databázi
Nicméně u tohoto příkazu není možné povolit verbose režim a ukládat podrobný výstup do logovacího souboru.
Čas zálohy: 473 sekund
1.9. Záloha Firebird databáze na vzdáleném serveru na stejný vzdálený server pomocí Service Manager
Se Service Manager je možné vyvolat gbak zálohu databáze na vzdáleném serveru a uložit ji také na stejný vzdálený server.
gbak -b -se 192.168.0.108:service_mgr -user SYSDBA -pass masterkey /db/test1.fdb /db/back12.fbk
Tento příkaz prostřednictvím Service Manager vyvolá zálohu na vzdáleném serveru s instrukcí uložit záložní soubor také na stejný síťový server.
Samozřejmě, umístění zálohy musí být přístupné službě Firebird (na Linuxu běží jako uživatel „firebird", na Windows jako účet LocalSystem).
1.10. Záloha Firebird databáze 6x rychleji s vícevláknovou zálohou ve Firebird 5 (nebo HQbird 2.5/3.0/4.0/5.0)
Pokud stále nejste spokojeni s výkonem zálohování Firebird gbak, zvažte migraci na Firebird 5 (nebo použijte enterprise distribuci Firebird: HQbird pro jiné verze).
Podporuje vícevláknovou zálohu, která umožňuje až 6x rychlejší operace zálohování s gbak.
gbak -b -par 8 -se localhost:service_mgr -g C:\Data\testbigdb1.fdb c:\Data\backup1.fbk -user SYSDBA -pass masterkey
Jak vidíte, existuje nový parametr -par 8, který způsobí, že gbak použije 8 vláken pro vytvoření zálohy.
HQbird provádí údržbové úlohy (sweep, záloha, obnova) mnohem rychleji (výsledky na obrázku níže jsou samozřejmě z jiné databáze):

2. Obnova pomocí nástroje Gbak
Máme záložní soubor backup1.fbk, vytvořený jedním z příkazů výše, a potřebujeme jej obnovit rychlým a efektivním způsobem.
Předpokládejme, že soubor je v C:\Data\backup1.fbk v případě Windows, nebo /db/backup1.fbk v případě Linux.
2.1. Nejjednodušší příkaz pro obnovu
Na Windows
gbak -c C:\Data\backup1.fbk C:\data\new1.fdb -user SYSDBA -pass masterkey
Na Linuxu
gbak -c /db/backup1.fbk /db/new1.fdb -user SYSDBA -pass masterkey
Především si prosím všimněte, že gbak -c nepřepisuje soubor databáze, a pokud existuje soubor C:\data\new1.fdb nebo /db/new1.fdb, gbak vrátí chybu, že databáze již existuje.
Dále tento příkaz funguje velmi odlišně na 2.5/3.0+ a Windows/Linux.
Na Linuxu tento příkaz použije embedded přístup k vytvořené databázi (pokud jste samozřejmě nezměnili pořadí poskytovatelů Firebird v firebird.conf) pro 3.0 i 2.5.
Na Windows, na Firebird 3.0 s výchozím pořadím poskytovatelů, to bude embedded přístup, na 2.5 - XNET.
Tento příkaz vytvoří soubor s právy uživatele, který spustil gbak - to je důležité zejména na Linuxu - pokud spustíte takový gbak pod root, vlastníkem souboru databáze bude root a proces Firebird, který běží pod uživatelem „firebird", nebude schopen přistupovat k obnovenému souboru.
Poznámka pro uživatele Linuxu
Mnoho lidí, aby „opravili" vlastnictví, aplikuje oprávnění pro všechny, aby měli přístup k obnovené databázi, tj. něco jako „chmod 777 database", ale to je velmi nezabezpečené. Správný způsob je změnit vlastníka databáze na firebird následujícím příkazem:
chown firebird /db/new1.fdb
Obecně je tento příkaz dostatečně dobrý pro jednoduchou obnovu neprodukčních databází (používaných pro testování nebo vývoj).
Čas obnovy: 275 sekund
2.2. Obnova s localhost připojovacím řetězcem
Nejuniverzálnější, ale ne nejrychlejší možnost obnovy je následující:
Windows
gbak -c C:\Data\backup1.fbk localhost:C:\data\new1.fdb -user SYSDBA -pass masterkey
Linux
gbak -c /db/backup1.fbk localhost:/db/new1.fdb -user SYSDBA -pass masterkey
Nestandardní port
Pokud Firebird běží na nestandardním portu, například 3051, lze jej zadat v příkazu obnovy:
Windows
gbak -c C:\Data\backup1.fbk localhost/3051:C:\data\new1.fdb -user SYSDBA -pass masterkey
Linux
gbak -c /db/backup1.fbk localhost/3051:/db/new1.fdb -user SYSDBA -pass masterkey
Čas obnovy: 1225 sekund
2.3. Obnova s XNET na Windows
Pro mírně rychlejší obnovu můžeme na Windows použít XNET (pro Firebird 3.0 a vyšší):
gbak -c C:\Data\backup1.fbk xnet://C:\Data\New2.fdb -user SYSDBA -pass masterkey
Na Firebird 2.5 na Windows bude XNET přístup použit s jednoduchým příkazovým řádkem (pokud běží pouze jedna instance Firebird):
gbak -c C:\Data\backup1.fbk C:\data\new1.fdb -user SYSDBA -pass masterkey
Čas obnovy: 585 sekund
2.4. Rychlejší obnova se Service Manager
A nejrychlejší způsob obnovy je použít Service Manager
Windows
gbak -c -se localhost:service_mgr C:\Data\backup1.fbk C:\data\new1.fdb -user SYSDBA -pass masterkey
Linux
gbak -c -se localhost:service_mgr /db/backup1.fbk localhost:/db/new1.fdb -user SYSDBA -pass masterkey
S přepínačem -se vyvoláme Service Manager na adrese localhost a instruujeme jej, aby provedl obnovovací kód uvnitř enginu Firebird.
Když je obnova provedena Service Manager, vytvořený soubor databáze bude vlastněn účtem běžící instance Firebird (procesu) - na Linuxu je to „firebird" a na Windows LocalSystem.
Čas obnovy: 244 sekund
2.5. Nedoporučovaný přepínač
V určitém okamžiku byste mohli mít pokušení použít následující přepínač:
-R(ECREATE_DATABASE) [O(VERWRITE)] create (or replace if OVERWRITE used) database from backup file (restore)
aby se vynutilo nahrazení existující databáze novou.
Podle našich zkušeností tento přepínač výrazně zvyšuje šance na náhodné přepsání produkční databáze.
Důrazně doporučujeme obnovovat databázi pokaždé s novým názvem a přejmenovat ji, stejně jako explicitně smazat starou databázi.
Dokonce neposkytneme ani příklad příkazu s tímto přepínačem.
2.6. Obnova databáze pomocí aliasu
Je možné obnovit databázi pomocí aliasu, deklarovaného v databases.conf (nebo aliases.conf ve Firebird 2.5)
Například máme následující deklaraci:
restdb=c:\Data\newrest1.fdb #Windows
restdb=/db/newrest1.fdb #Linux
Můžeme tedy spustit následující příkaz pro obnovu zálohy do cesty určené aliasem:
Windows
gbak -c -se localhost:service_mgr C:\Data\backup1.fbk restdb -user SYSDBA -pass masterkey
Linux
gbak -c -se localhost:service_mgr /db/backup1.fbk restdb -user SYSDBA -pass masterkey
2.7. Obnova lokální zálohy na vzdálený server
Je možné obnovit lokální záložní soubor na vzdálený Firebird server.
V tomto příkladu obnovujeme záložní soubor uložený na Windows na Linux server (jeho IP adresa 102.168.0.108):
gbak -c C:\Data\backup1.fbk 192.168.0.108:/db/newdb1.fdb -user SYSDBA -pass masterkey
Čas obnovy: 7009 sekund
Jak si můžete všimnout, proces vzdálené obnovy funguje velmi pomalu. Můžeme jej urychlit pomocí Service Manager?
2.8. Obnova lokální zálohy na vzdálený server se Service Manager
Pro obnovu lokální zálohy na vzdáleném serveru se Service Manager je nutné provést trik se vstupním proudem stdin:
gbak -c -se 192.168.0.108:service_mgr -user SYSDBA -pass masterkey stdin /db/new3.fdb < C:\Data\backup1.fbk
Tento příkaz vyvolá obnovu na vzdáleném serveru se standardním vstupem stdin jako zdrojem zálohy - a dodává vstup pomocí části příkazu < C:\Data\backup1.fbk.
Vypadá to trochu záludně? Ale je to snadný způsob, jak 10x zvýšit výkon gbak pro obnovu na vzdálený server!
Čas obnovy: 450 sekund
2.9. Obnova extrémně dlouhých tabulek
Pokud máte opravdu velkou databázi s celkovým počtem řádků více než 2 miliardy, je nutné zadat přepínač -o[ne_at_a_time], aby se každá tabulka obnovila v samostatné transakci a předešlo se vnitřnímu přetečení.
gbak -c -se localhost:service_mgr -one C:\Data\backup1.fbk C:\data\new44.fdb -user SYSDBA -pass masterkey
3. Ladění a logování procesů zálohy a obnovy
3.1. Gbak s verbose výstupem
Ve výchozím nastavení je gbak velmi tichý nástroj, při úspěšném provedení nevrací nic. Pro povolení verbose režimu můžeme přidat přepínač -v[erify]
gbak -b -se localhost/3050:service_mgr -g mydb1 c:\Data\backup1.fbk -v -user SYSDBA -pass masterkey
Výsledkem bude více podrobností. Menší, ale nepříjemný problém je, že tisk výstupu do konzole může způsobit, že verbose záloha bude výrazně pomalejší než tichá varianta, takže dobrý nápad je uložit log do souboru s přepínačem - y logfile:
gbak -b -se localhost/3050:service_mgr -g -v mydb1 c:\Data\backup1.fbk -user SYSDBA -pass masterkey -y C:\data\backuplog1.txt
Poznámka: gbak nepřepíše existující logovací soubor! Pokud již máte C:\data\backuplog1.txt v tomto příkladu, záloha vyvolá chybu (viz #3 v Příloze A).
Poznámka 2: existuje možnost -verbint pro řízení intervalu hlášení počtu zpracovaných záznamů během zálohy nebo obnovy.
3.2. Přidání statistik výkonu do verbose výstupu
Ve verbose výstupu gbak pro zálohu a obnovu můžeme vidět zprávy jako tyto:
gbak: writing data for table COUNTRY
gbak:16 records written
pro každou tabulku a další databázové objekty.
Je zajímavé zjistit, které tabulky/objekty zabírají nejvíce času, že?
Pro to je nutné použít přepínač -st(atistics):
-ST(ATISTICS) TDRW show statistics:
T time from start
D delta time
R page reads
W page writes
gbak -b -se localhost/3050:service_mgr -g -v mydb1 -st tdrw c:\Data\backup1.fbk -user SYSDBA -pass masterkey -y C:\data\backuplog1.txt
Po aplikování přidá do logu následující sloupce:
gbak: time delta reads writes
takže budeme moci vidět čas a IO strávené na každém řádku.
3.3. Vyloučení tabulek ze zálohy a/nebo z obnovy
Pokud si myslíte, že některé tabulky mohou být vyloučeny ze zálohy (dobrým příkladem je velmi dlouhá logovací tabulka), můžete je zadat v parametru SK[IP_DATA] s regulárním výrazem jako parametrem.
V níže uvedeném příkladu vyloučíme zálohování dat z tabulek COUNTRY a JOB:
gbak -b -se localhost/3050:service_mgr -g -v mydb1 -SKIP_D ‘(COUNTRY|JOB)’ c:\Data\backup1.fbk -user SYSDBA -pass masterkey -y C:\data\backuplog1.txt
A v níže uvedeném příkladu vyloučíme tabulku CLIENT z obnovy:
gbak -c -se localhost:service_mgr C:\Data\backup1.fbk C:\data\new33.fdb -user SYSDBA -pass masterkey -SKIP_D "CLIENT"
Upozorňujeme, že parametr pro SKIP_DATA musí být předán jako jediný parametr, proto musí být v uvozovkách!
Na Linuxu by uvozovky měly být jednoduché, na Windows - dvojité.
Opatření při vyloučení tabulek ze zálohy a/nebo obnovy
Důrazně doporučujeme před použitím zkontrolovat podmínku regulárního výrazu pomocí následujícího dotazu - vrátí seznam tabulek, které odpovídají podmínce filtru (v dotazu jsou uvozovky vždy jednoduché):
SQL> SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE TRIM(RDB$RELATION_NAME) SIMILAR TO '(COUNTRY|JOB)';
RDB$RELATION_NAME
===============================
COUNTRY
JOB
Upozorňujeme, že tabulky ze zálohy nebo obnovy budou vyloučeny bez ohledu na existující omezení (cizí klíče), takže pokud toto vyloučení pečlivě neplánujete, je velmi snadné získat během procesu obnovy chybu „Cannot commit foreign key index“.
3.4. Získání hesla pro zálohu nebo obnovu ze souboru
Pokud nejste velkým fanouškem myšlenky vystavit heslo všem, kdo vidí vaše příkazy, bude se vám líbit následující přepínač: -fetch passwordfile
Vytvořme soubor s heslem v C:\Data\passfile.txt a použijme jej (zde používáme velmi jednoduchou vestavěnou variantu, samozřejmě přepínač bude fungovat i se Service Managerem):
gbak -b c:\Data\test1.fdb c:\Data\backup5.fbk -user SYSDBA -fetch C:\Data\passfile.txt
Existují 2 praktické výhody:
- Pokud ukládáme heslo do jediného souboru, můžeme zajistit, že všechny naše příkazové soubory budou vždy používat aktuální heslo.
- Nevystavujeme heslo v každém příkazovém souboru.
4. Jednokroková záloha-obnova
Často je cílem zálohy provést okamžitou obnovu, abychom získali novou čerstvou databázi, například pro aplikaci nové velikosti stránky pro databázi, nebo pro migraci stávající databáze z 2.5 na 3.0.
V tomto případě je možné provést zálohu-obnovu jediným příkazem, pomocí standardního vstupu a výstupu jako zdrojů pro příslušné příkazy, abychom se vyhnuli vytváření mezilehlého záložního souboru, snížili požadavky na volné místo a urychlili proces.
Příkaz je následující:
gbak -b -se localhost:service_mgr -g -user SYSDBA -password masterkey C:\Data\test1.fdb stdout | gbak -c -se localhost:service_mgr -user SYSDBA -password masterkey stdin C:\Data\new10.fdb
V podstatě zde provádíme 2 příkazy, spojené symbolem |,
první pro zálohu na stdout:
gbak -b -se localhost:service_mgr -g -user SYSDBA -password masterkey C:\Data\test1.fdb stdout
a druhý pro obnovu ze stdin:
gbak -c -se localhost:service_mgr -user SYSDBA -password masterkey stdin C:\Data\new10.fdb
Tento příkaz je nejrychlejší způsob, jak provést zálohu-obnovu na stejné instanci Firebirdu.
Upozorňujeme: pro konverzi databází pomocí jednokrokové zálohy-obnovy z 2.5 na 3.0 je nutné použít 2 instance Firebirdu, podrobnosti naleznete zde.
5. Souhrn výkonu
Následující obrázek obsahuje informace o rychlosti různých příkazů zálohy lokální zálohy testovací databáze:

Jak vidíte, nejrychlejší způsob, jak provést lokální zálohu, je použít Service Manager (přepínač -se[rvice]) a potlačit garbage collection (přepínač -ig).
Pro zálohu ze vzdáleného serveru na lokální počítač je Service Manager také nejlepší volbou:

Situace s výkonem obnovy je podobná: Service Manager je nejrychlejší způsob obnovy.

Pokud jde o poměrně vzácný případ, kdy se obnova provádí z lokální zálohy na vzdálený server, použití Service Manageru s trikem stdin je jedinou životaschopnou volbou:

Velmi častý dotaz o VM a zálohách Firebirdu
Proč bych měl používat nástroje pro zálohování Firebirdu, když jsou k dispozici populární záložní nástroje, které slibují zálohu všeho?
Nebo: Zálohuji kompletní obraz virtuálního stroje, proč bych se měl starat o zálohu databáze Firebirdu?
Odpověď je zde.
Dodatek A. Chyby během zálohy/obnovy
- Pokus o spuštění gbak bez parametrů nebo s uživatelem, který není vlastníkem databáze/SYSDBA, povede k následující chybě:
gbak: ERROR:Unable to perform operation. You must be either SYSDBA or owner of the database
gbak:Exiting before completion due to errors
- Pokud zadáte nesprávné heslo, dojde k následující chybě:
gbak: ERROR:Your user name and password are not defined. Ask your database administrator to set up a Firebird login.
gbak:Exiting before completion due to errors
- Chyba nastane, když je jako cíl podrobného protokolu zadán existující soubor:
gbak: ERROR:cannot open status and error output file C:\data\backuplog1.txt
gbak: ERROR: Exiting before completion due to errors
gbak:Exiting before completion due to errors
- Chyba nastane, pokud je existující databáze zadána v příkazu obnovy gbak jako cíl:
gbak: ERROR:database C:\data\new1.fdb already exists. To replace it, use the -REP switch
gbak:Exiting before completion due to errors
- Chyba nastane, když se gbak pokusí zapsat zálohu do umístění, kde nemá dostatečná práva pro zápis.
gbak: ERROR:cannot open file /db/test1.fbk
gbak:Exiting before completion due to errors
- Když se gbak pokusí o přístup k souboru bez oprávnění - například soubor má jiného vlastníka než uživatele „firebird“ na Linuxu:
gbak: ERROR:no permission for read-write access to database /db/test1.fdb
gbak: ERROR: IProvider::attachDatabase failed when loading mapping cache
gbak:Exiting before completion due to errors
- Pokus o použití podrobného výstupu:
C:\HQbird\Firebird30>gbak -se 192.168.0.108:service_mgr -v -st tdrw -user SYSDBA -pass masterkey /db/test1.fdb stdout >
c:\data\rembackup2.fbk
gbak: ERROR:standard output is not supported when using split operation or in verbose mode
gbak: ERROR: Exiting before completion due to errors
gbak:Exiting before completion due to errors
- Pokus o zálohu pomocí Service Manageru na vzdáleném serveru s povoleným podrobným výstupem a ukládáním do souboru protokolu.
C:\HQbird\Firebird30>gbak -se 192.168.0.108:service_mgr -v -st tdrw -y lg1.txt -user SYSDBA -pass masterkey /db/test1.f
db stdout > c:\data\rembackup2.fbk
gbak: ERROR:Invalid clumplet buffer structure: string length doesn't match with clumplet
gbak:Exiting before completion due to errors
- Chyba v jednokrokové záloze-obnově, když záloha z nějakého důvodu selže:
gbak: ERROR:No request from user for stdin data
gbak:Exiting before completion due to errors
- Pokud se pokoušíte předat gbak něco, co není záloha:
gbak: ERROR:unavailable database
gbak:Exiting before completion due to errors
gbak: ERROR:expected backup description record
gbak:Exiting before completion due to errors
- Záloha poškozeného souboru databáze s nesprávnou stránkou nahlásí následující chybu (číslo a soubor databáze se samozřejmě budou lišit):
gbak: ERROR:database file appears corrupt (E:\DATABASE1.FDB)
gbak: ERROR: wrong page type
gbak: ERROR: page 9294588 is of wrong type (expected 8, found 0)
gbak: ERROR:gds_$get_segment failed
gbak:Exiting before completion due to errors
gbak: ERROR:Unexpected I/O error while reading from backup file
gbak:Exiting before completion due to errors
Kontakty
Neváhejte nás kontaktovat s jakýmikoli dotazy nebo nahlásit jakékoli chyby či překlepy: [email protected]