Jede Version von Firebird hat eine eigene Version des Formats der Datenbankdatenträgerstrukturen - O (n) D (isk) S (Struktur). Vor Version 2.5 einschließlich konnte die Firebird-Engine mit ODS früherer Versionen arbeiten, dh Datenbanken aus älteren Versionen wurden von der neuen Version geöffnet und arbeiteten im Kompatibilitätsmodus, aber die Firebird 3.0-Engine funktioniert nur mit einer Datenbank in ihrer eigenen ODS-Version 12.0.
Um zu 3.0 zu wechseln, muss die Datenbank von 2.5 per Backup / Restore in ein neues Format konvertiert werden. Natürlich nehmen wir an, dass die Datenbank zuvor für die Konvertierung vorbereitet wurde - d. H. Metadaten und Anforderungen wurden auf Kompatibilität mit Firebird 3.0 getestet.
Wenn Sie dem Standardansatz folgen, bedeutet dies, dass Sie auf Version 2.5 sichern, dann 3.0 installieren und eine Wiederherstellung durchführen müssen. Dieses Verfahren ist akzeptabel, wenn genügend Zeit vorhanden ist. Wenn Sie jedoch große Datenbanken migrieren oder wenn mehrere Dutzend Datenbanken migriert werden und die Zeit knapp wird, können Sie die Stream-Konvertierung verwenden, die 30-40% schneller ist. Wie genau dies zu tun ist (unter Windows und unter Linux), lesen Sie unter der Katze.
Die allgemeine Idee ist, dass wir zur Beschleunigung die Pipeline verwenden:
gbak -b … 25 stdout | gbak -c … stdin 30
Gbak ab 2.5 generiert ein Backup in einem linearen Format und sendet es an stdout, das gbak ab 3.0 sofort über stdin aufnimmt und eine neue Datenbank erstellt.
Es ist erforderlich, eine solche Pipeline mithilfe der lokalen (Datei-) Zugriffsmethode zu organisieren, da der Netzwerkzugriff (auch über localhost) den Prozess erheblich verlangsamt.
Nachfolgend sehen wir uns die Details für Windows und Linux an.
WindowsIm Fall von Windows ist es am einfachsten, einen vollständig autonomen Build von Firebird zu erstellen. Nehmen Sie dazu das
Firebird 2.5-Einbettungsarchiv , benennen Sie fbemded.dll in fbclient.dll um, fügen Sie die Dienstprogramme gbak.exe aus dem „üblichen“ 2.5-Archiv und (optional) isql.exe hinzu.
Firebird 3.0 verwendet eine
einzelne Baugruppe und erfordert keine Änderungen.
Die kleinste Option (für die keine Installation von VS2008 / VS2010-Laufzeitbibliotheken auf dem Zielsystem erforderlich ist) enthält die folgenden Dateien:
25/gbak.exe 25/fbclient.dll 25/firebird.conf 25/firebird.log 25/firebird.msg 25/ib_util.dll 25/icudt30.dll 25/icuin30.dll 25/icuuc30.dll 25/Microsoft.VC80.CRT.manifest 25/msvcp80.dll 25/msvcr80.dll 30/fbclient.dll 30/firebird.conf 30/firebird.msg 30/gbak.exe 30/ib_util.dll 30/icudt52.dll 30/icudt52l.dat 30/icuin52.dll 30/icuuc52.dll 30/msvcp100.dll 30/msvcr100.dll 30/intl/fbintl.conf 30/intl/fbintl.dll 30/plugins/engine12.dll
Ein erfahrener Administrator kann feststellen, dass intl / fbintl.dll und intl / fbintl.conf nicht in 2.5 enthalten sind. Dies ist richtig, da gbak kein Verbindungszeichen verwendet oder Daten zwischen Zeichen konvertiert. Auf der "empfangenden" Seite von Firebird 3.0 werden diese Dateien jedoch beim Erstellen von Indizes benötigt.
In firebird.conf empfiehlt Firebird 3.0 das Hinzufügen von:
MaxUnflushedWrites = -1 MaxUnflushedWriteTime = -1
Es ist auch ratsam, unterschiedliche IpcName-Werte für 2.5 und 3.0 festzulegen.
Bei der Auswahl der Werte anderer Parameter geht firebird.conf von einer einfachen Überlegung aus: In der Datenübertragungsphase führt gbak in einem Prozess 2.5 aus, und in dem anderen 3.0 wird dann 2.5 beendet und 3.0 beginnt mit der Erstellung von Indizes.
Um die Erstellung von Indizes in 3.0 zu beschleunigen, wird empfohlen, den TempCacheLimit-Parameter auf ~ 40% RAM zu erhöhen (wenn es sich natürlich um einen dedizierten Server handelt).
Wenn der Server beispielsweise über 16 GB RAM verfügt, können Sie dies tun
TempCacheLimit=6G
Dieser Wert kann natürlich nur für 64-Bit-Firebird 3 festgelegt werden, da kein 32-Bit-Prozess mehr als 2 Gigabyte Speicher zuweisen kann.Bei 2.5 muss dieser Parameter nicht geändert werden - er darf bereits nicht mehr als 2 Gigabyte betragen und hat keinen Einfluss auf die Geschwindigkeit während der Sicherung.
Bevor Sie den Vorgang ausführen, müssen Sie überprüfen, ob der
gstat -h databasename
im Datenbankheader auf 0 gesetzt ist (Befehl
gstat -h databasename
, siehe Zeile Seitenpuffer).
Wenn der Cache explizit im Datenbankheader angegeben wird, überschreibt er die Werte aus firebird.conf (und database.conf in 3.0). Bei unzureichend großen Werten kann dies zu einem übermäßigen Speicherverbrauch führen und zum Swap führen.
Kopieren Sie anschließend die Dateien auf das Zielsystem.
Die Konvertierung erfolgt nach dem Beenden des Firebird 2.5-Dienstes "System" in der Befehlszeile mit zunehmenden Berechtigungen für den lokalen Administrator (Beispiel):
set ISC_USER= "25/gbak" -z -b -g -v -st t -y 25.log 25 stdout|^ "30/gbak" -z -c -v -st t -y 30.log stdin 30
In diesem Beispiel wird in Anführungszeichen "gerade schräg" verwendet (gültiger "Unix-Stil"), und "Hut" ("^") entgeht dem Zeilenvorschubzeichen, was bei der Eingabe langer Befehle praktisch ist. Die Option -st (atus) wurde in Firebird 2.5.8 angezeigt und ermöglicht es Ihnen, Daten zur Betriebszeit des gbak-Prozesses in das Protokoll zu schreiben (Einzelheiten finden Sie in der Dokumentation).
LinuxUnter Linux hängt Firebird 3 von der Tommath-Bibliothek ab. In CentOS (RHEL) befindet sich diese Bibliothek im Epel-Repository, in Ubuntu (Debian) im System-Repository.
Für CentOS müssen Sie zuerst das Epel-Repository verbinden und erst dann
yum install libtommath
Ubuntu muss keine zusätzlichen Repositorys verbinden, aber verschiedene Versionen von Paketen sind auf Ubuntu 16 und Ubuntu 18 installiert - libtommath0 bzw. libtommath1.
Firebird 3.0 sucht nach tommath.so.0 und für Ubuntu 18 muss zusätzlich ein Link (Symlink) von tommath.so.0 zu tommath.so.1 erstellt werden. Dazu müssen Sie zuerst tommath.so.1 finden.
Der Suchpfad in Ubuntu lautet
/usr/lib/x86_64-linux-gnu/
, in anderen Debian-basierten Distributionen kann er jedoch anders sein.
Das zweite Problem ist, dass es vor Firebird 3.0.1 einschließlich keine einfache Möglichkeit gab, zwei verschiedene Versionen des Servers zu installieren. Die Option "Kompilieren aus dem Quellcode mit dem gewünschten Präfix" wird aufgrund ihrer relativen Komplexität nicht berücksichtigt.
Für Firebird 3.0.2 und höher sind ein
Build mit –enable-binreloc und eine separate Installationsoption (-path path) implementiert.
Angenommen, die tommath-Bibliothek und gegebenenfalls der Symlink für tommath.so.0 wurden dem System hinzugefügt, können Sie die tatsächliche (zum Zeitpunkt dieses Schreibens) Firebird 3.0.4-Distribution hinzufügen, z. B. / opt / fb3:
./install.sh -path /opt/fb3
Danach können Sie den Firebird-Systemdienst beenden und die Streaming-Konvertierung starten.
Wenn Sie Firebird stoppen, sollten Sie berücksichtigen, dass Firebid 2.5-Prozesse im klassischen Modus normalerweise xinetd starten. Daher ist es entweder erforderlich, den Firebird-Dienst für xinetd zu deaktivieren oder xinetd vollständig zu stoppen.In firebird.conf für 3.0 unter Linux müssen Sie keine MaxUnflushed-Parameter festlegen (diese funktionieren nur unter Windows) und die Firebird 2.5-Einstellungen ändern.
Unter Linux entspricht der lokale (Datei-) Zugriff von Firebird 2.5 nicht der eingebetteten Version für Windows - Server 2.5 funktioniert im gbak-Prozess (ohne den Netzwerkteil), aber die Zugriffsrechte werden anhand der Benutzerbasis überprüft, was bedeutet, dass nicht nur eine Anmeldung, sondern auch ein Kennwort erfolgt ::
export ISC_USER=username ISC_PASSWORD=password /opt/firebird/bin/gbak -b … 25 stdout\ |/opt/fb3/bin/gbak -c … stdin 30
Nach erfolgreicher Konvertierung müssen Sie zuerst den "zusätzlichen" Firebird 3.0 und dann den "Haupt" Firebird 2.5 entfernen und erst danach eine Neuinstallation von Firebird 3.0 durchführen - am besten vom regulären tar.gz-Installationsprogramm und nicht über die Repositorys, weil Die Version in den Repositorys kann verzögert sein.
Nachdem Sie die Linux-Datenbank wiederhergestellt und neu installiert haben, müssen Sie außerdem überprüfen, ob die neue Datenbank den Eigentümer des Firebird-Benutzers hat.
Ist dies nicht der Fall, muss das Problem behoben werden
chown firebird.firebird database
ZusammenfassungNeben der Zeit- und Speicherplatzersparnis bietet die Stream-Konvertierung einen weiteren wichtigen Vorteil: Die Datenbankkonvertierung erfolgt ohne Löschen des vorhandenen Firebird 2.5. Dies vereinfacht das Rollback erheblich, wenn die Konvertierung nicht erfolgreich ist (meistens aufgrund von Speicherplatzmangel oder einem unerwarteten Neustart während des Migrationsprozesses).
Die Zeitersparnis beruht auf der Tatsache, dass die "klassische" Konvertierung "Sicherungszeit" plus "Wiederherstellungszeit" ist. Die Wiederherstellung besteht aus zwei Teilen: Lesen von Daten aus einer Sicherungsdatei und Erstellen eines Index.
Bei der Streaming-Konvertierung wird die Gesamtzeit als "Sicherungszeit plus fünf bis zehn Prozent" und "Indexerstellungszeit" ermittelt.
Die spezifischen Ergebnisse hängen von der Struktur der Datenbank ab, aber im Durchschnitt entspricht die Wiederherstellungszeit ungefähr der doppelten Sicherungszeit. Wenn wir also die Sicherungszeit pro Einheit nehmen, dann "klassische Konvertierung" - drei Zeiteinheiten, Fluss - zwei Zeiteinheiten. Eine Erhöhung von TempCacheLimit hilft auch, die Zeit zu verkürzen.
Im Allgemeinen können Sie durch die Stream-Konvertierung in der Praxis 30-40% der Zeit eines alternativen Backups und Restaurants sparen.
Fragen?Bitte schreiben Sie alle Fragen in die Kommentare oder senden Sie sie an den Autor der Methodik und Mitautor dieses Artikels - Vasily Sidorov, den führenden Systemingenieur von iBase, bei bs at ibase ru.