Streaming konverzija Firebird 2.5 baza podataka u ODS12 format (Firebird 3.0)

Svaka verzija Firebirda ima vlastitu verziju formata strukture diska baze podataka, O(n)D(isk)S(tructure). Do inačice 2.5 uključivo, Firebird motor je mogao raditi s ODS-om prethodnih verzija, odnosno baze podataka iz starih verzija otvarala je nova verzija i radile su u kompatibilnom modu, ali Firebird 3.0 motor radi samo s bazama podataka u vlastitoj ODS verziji 12.0.

Za prelazak na 3.0, baza podataka iz 2.5 mora se pretvoriti u novi format putem sigurnosne kopije/vraćanja. Naravno, pretpostavljamo da je baza podataka prethodno pripremljena za konverziju - tj. metapodaci i upiti su provjereni za kompatibilnost s Firebirdom 3.0.

Если следовать стандартному подходу, это означает, что нужно произвести бэкап на версии 2.5, затем установить 3.0 и сделать рестор. Такая процедура приемлема, если есть достаточно времени, но при миграции больших баз данных, или при одновременной миграции нескольких десятков БД, когда время поджимает, можно воспользоваться поточной конвертацией, которая на 30-40% быстрее. Как именно это сделать (под Windows i pod Linux), читайте под катом.

Opća ideja je da ćemo koristiti cjevovod da ubrzamo stvari:

gbak -b … база25 stdout | gbak -c … stdin база30

Gbak iz 2.5 generira backup u linearnom formatu i šalje ga na stdout, koji odmah preuzima gbak iz 3.0 preko stdin-a i stvara novu bazu podataka.

Potrebno je organizirati takav cjevovod s lokalnom (datotečnom) metodom pristupa, budući da će mrežni pristup (čak i preko localhosta) značajno usporiti proces.

Ниже мы рассматриваем детали для Windows и Linux.

Windows

U slučaju Windows проще всего сделать полностью автономную сборку Firebird. Для этого берём embed-archive Firebird 2.5, preimenujte fbemded.dll u fbclient.dll, dodajte gbak.exe i (po izboru) isql.exe pomoćne programe iz “obične” 2.5 arhive.

Firebird 3.0 koristi pojedinačni sklop i ne zahtijeva nikakve izmjene.

Najmanja verzija (koja ne zahtijeva instalaciju VS2008/VS2010 runtime biblioteka na ciljnom sustavu) sadrži sljedeće datoteke:

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

Iskusni administrator može primijetiti da 2.5 ne uključuje datoteke intl/fbintl.dll i intl/fbintl.conf. To je istina, budući da gbak ne koristi skup znakova veze i ne pretvara podatke između skupova znakova, ali na "primajućoj" strani Firebirda 3.0, te su datoteke neophodne prilikom stvaranja indeksa.

U firebird.conf Firebird 3.0 preporučuje se dodavanje:

MaxUnflushedWrites = -1
MaxUnflushedWriteTime = -1

Također, poželjno je postaviti različite vrijednosti IpcName za 2.5 i 3.0.

Prilikom odabira vrijednosti drugih parametara firebird.conf, polazimo od jednostavnog razmatranja: u fazi prijenosa podataka, gbak pokreće 2.5 u jednom procesu, a 3.0 u drugom, zatim 2.5 izlazi, a 3.0 počinje graditi indeksi.

Kako bi se ubrzala faza izgradnje indeksa u 3.0, preporučuje se povećati veličinu parametra TempCacheLimit na ~40% RAM-a (naravno, ako se radi o namjenskom poslužitelju).

Na primjer, ako poslužitelj ima 16 GB RAM-a, tada možete staviti

TempCacheLimit=6G

Naravno, ova se vrijednost može postaviti samo za 64-bitni Firebird 3, budući da bilo koji 32-bitni proces ne može dodijeliti više od 2 gigabajta memorije.

U 2.5 ovaj parametar ne treba mijenjati - ionako ne može biti veći od 2 gigabajta i ne utječe na brzinu tijekom backupa.

Prije izvođenja operacije morate provjeriti je li predmemorija stranice u zaglavlju baze podataka postavljena na 0 (naredba gstat -h databasename, pogledajte redak Međuspremnici stranice).

Ako je predmemorija eksplicitno postavljena u zaglavlju baze podataka, tada nadjačava vrijednosti iz firebird.conf (i databases.conf u 3.0), a u slučaju neadekvatno velikih vrijednosti može dovesti do prekomjerne potrošnje memorije i swapanja.

Zatim kopirajte datoteke u ciljni sustav.

Konverzija se provodi nakon zaustavljanja "sustavne" usluge Firebird 2.5, na naredbenom retku s povišenim pravima lokalnog administratora (primjer):

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

Ovaj primjer koristi "kosu crtu" u navodnicima (važeći "unix stil"), a "šešir" (znak "^") izbjegava znak za novi red, što je korisno pri upisivanju dugih naredbi. Opcija -st(atus) pojavila se u Firebirdu 2.5.8 i omogućuje vam bilježenje podataka o vremenu izvođenja gbak procesa (za detalje pogledajte dokumentaciju).

Linux

Na Linux Firebird 3 зависит от библиотеки tommath. В CentOS (RHEL) эта библиотека находится в epel-репозитории, в Ubuntu (Debian) в – системном.

za CentOS требуется сначала подключить epel-репозиторий и только потом делать

yum install libtommath

Ubuntu не нужно подключать дополнительные репозитории, но в Ubuntu 16 i više Ubuntu 18 устанавливаются разные версии пакетов – libtommath0 и libtommath1, соответственно.

Firebird 3.0 ищет tommath.so.0 и для Ubuntu 18 дополнительно требуется создать ссылку (symlink) c tommath.so.0 на tommath.so.1. Для этого сначала надо найти tommath.so.1.

Искомый путь в Ubuntu - /usr/lib/x86_64-linux-gnu/, но в других Debian-based дистрибутивах может быть иначе.

Drugi problem povezan je s činjenicom da do i uključujući Firebird 3.0.1, nije postojao jednostavan način instaliranja dvije različite verzije poslužitelja. Ne uzimamo u obzir opciju "prevedi iz izvora s potrebnim prefiksom" zbog njene relativne složenosti.

Za Firebird 3.0.2 i novije implementirano izgraditi s --enable-binreloc i zasebna opcija instalacijskog programa (-path path).

Pod pretpostavkom da je tommath biblioteka i, ako je potrebno, simbolička veza za tommath.so.0 dodana sustavu, možete instalirati trenutnu (u vrijeme pisanja ovog teksta) distribuciju Firebird 3.0.4 u, na primjer, /opt /fb3:

./install.sh -path /opt/fb3

Nakon toga možete zaustaviti uslugu sustava Firebird i započeti konverziju streaminga.

Kada zaustavljate Firebird, imajte na umu da Firebid 2.5 procese u klasičnom načinu rada obično pokreće xinetd - tako da trebate ili onemogućiti firebird uslugu za xinetd ili potpuno zaustaviti xinetd.

В firebird.conf для 3.0 на Linux не нужно задавать MaxUnflushed-параметры (они работают только на Windows) и менять настройки Firebird 2.5.

В линуксе локальный (файловый) доступ Firebird 2.5 не эквивалентен embeded-варианту под Windows – сервер 2.5 будет работать в процессе gbak (без сетевой части), но права доступа будут проверяться по базе пользователей, а значит, потребуется не только логин, но и пароль:

export ISC_USER=username ISC_PASSWORD=password
/opt/firebird/bin/gbak -b … база25 stdout
|/opt/fb3/bin/gbak -c … stdin база30

Nakon uspješne konverzije, prvo morate ukloniti "dodatni" Firebird 3.0, zatim "glavni" Firebird 2.5, a nakon toga izvršiti čistu instalaciju Firebirda 2.5 - najbolje od standardnog tar.gz instalatera, a ne kroz repozitorije, jer Verzija u spremištima može kasniti.

Также, после рестора БД на Linux и переустановки надо проверить, чтобы новая БД имела владельцем пользователя firebird.

Ako to nije slučaj, morat će se ispraviti.

chown firebird.firebird database

Ukupan

Osim uštede vremena i diskovnog prostora, streaming konverzija ima još jednu važnu prednost - konverzija baze podataka obavlja se bez brisanja postojećeg Firebirda 2.5, što uvelike pojednostavljuje vraćanje u prethodno stanje u slučaju neuspješne konverzije (najčešće zbog nedostatka prostora ili neočekivanog ponovnog pokretanja tijekom migracije) postupak).

Ušteda vremena je zbog činjenice da je "klasična" konverzija "vrijeme sigurnosne kopije" plus "vrijeme vraćanja". Oporavak se sastoji od dva dijela: čitanje podataka iz datoteke sigurnosne kopije i izrada indeksa.

Uz pretvorbu strujanja, ukupno vrijeme dobiva se kao "vrijeme sigurnosne kopije plus pet do deset posto" i "vrijeme izgradnje indeksa".

Konkretni rezultati ovise o strukturi baze podataka, ali u prosjeku je vrijeme oporavka otprilike dvostruko duže od vremena sigurnosne kopije. Dakle, ako kao jedinicu uzmemo backup vrijeme, onda su “klasična konverzija” tri jedinice vremena, a streaming dvije jedinice vremena. Povećanje TempCacheLimit pomaže u daljnjem smanjenju vremena.

Općenito, pretvorba strujanja u praksi omogućuje uštedu 30-40% vremena naizmjeničnog sigurnosnog kopiranja i vraćanja.

Pitanja?

Sva pitanja napišite u komentarima ili ih pošaljite autoru metodologije i koautoru ovog članka - Vasiliju Sidorovu, iBase Leading System Engineer, na bs na ibase ru.

U anketi mogu sudjelovati samo registrirani korisnici. Prijaviti se, molim.

Koju verziju Firebirda koristite?

  • Firebird 3.x

  • Žar ptica 2.5

  • Žar ptica 2.1

  • Firebird 2.0, 1.5 ili 1.0

Glasovalo je 16 korisnika. 1 korisnik je bio suzdržan.

Izvor: www.habr.com

Kupite pouzdan hosting za stranice s DDoS zaštitom, VPS VDS poslužiteljima 🔥 Kupite pouzdan web hosting sa DDoS zaštitom, VPS VDS servere | ProHoster