
Na splošno bom predstavil križno replikacijo med PostgreSQL in MySQL ter metode za nastavitev križne replikacije med tema dvema strežnikoma baz podatkov. Običajno se baze podatkov v križni replikaciji imenujejo homogene, kar je priročen način prehoda s enega strežnika relacijske DBMS na drugega.
Baze podatkov PostgreSQL in MySQL veljajo za relacijske, vendar z dodatnimi razširitvami ponujajo možnosti NoSQL. Tukaj bomo razpravljali o replikaciji med PostgreSQL in MySQL z vidika relacijskih DBMS.
Ne bomo opisovali celotne notranje mehanike, temveč le osnovna načela, da boste dobili predstavo o nastavitvi replikacije med strežniki baz podatkov, prednostih, omejitvah in scenarijih uporabe.
Običajno se replikacija med dvema identičnima strežnikoma baz podatkov izvaja bodisi v binarnem načinu bodisi s poizvedbami med vodilnim vozliščem (to je založnik, glavni ali aktivni) in sledilnim (prejemnik, čakajoči ali pasivni). Namen replikacije je v realnem času zagotoviti kopijo glavne baze podatkov na strani sledilca. Pri tem se podatki prenašajo od vodilnega do sledilca, torej od aktivnega do pasivnega, saj se replikacija izvaja le v eno smer. Vendar pa je mogoče nastaviti replikacijo med dvema bazama podatkov v obe smeri, da se podatki prenašajo od sledilca do vodilnega v konfiguraciji 'aktivni-aktivni'. Vse to, vključno s kaskadno replikacijo, je mogoče med dvema ali več identičnima strežnikoma baz podatkov. Konfiguracija 'aktivni-aktivni' ali 'aktivni-pasivni' je odvisna od potreb, dostopnosti takih možnosti v izvorni konfiguraciji ali uporabe zunanjih rešitev za nastavitev in obstoječih kompromisov.
Opisano konfiguracijo je mogoče izvesti med različnimi strežniki baz podatkov. Strežnik je mogoče nastaviti za sprejem replikiranih podatkov z drugega strežnika baz podatkov in pri tem ohraniti posnetke replikiranih podatkov v realnem času. MySQL in PostgreSQL ponujata večino teh konfiguracij z lastno podporo ali s pomočjo zunanjih razširitev, vključno z metodami binarnega dnevnika, zaklepanjem diska ter metodami, ki temeljijo na operaterjih in vrsticah.
Križna replikacija med MySQL in PostgreSQL je potrebna za enkratno migracijo z enega strežnika baz podatkov na drugega. Ti podatki uporabljajo različne protokole, zato jih ni mogoče neposredno povezati. Za vzpostavitev izmenjave podatkov lahko uporabite zunanji odprtokodni pripomoček, na primer pg_chameleon.
Kaj je pg_chameleon
pg_chameleon je sistem replikacije iz MySQL v PostgreSQL, napisan v Python 3. Uporablja odprtokodno knjižnico mysql-replication, prav tako v Pythonu. Nizi podatkov se izvlečejo iz tabel MySQL in shranijo kot objekti JSONB v bazi podatkov PostgreSQL, nato pa se dekodirajo s funkcijo pl/pgsql in se reproducirajo v bazi podatkov PostgreSQL.
Možnosti pg_chameleon
Več shem MySQL iz enega klasterja je mogoče replikovati v eno ciljno bazo podatkov PostgreSQL z konfiguracijo "ena proti mnogim".
Imena izvorne in ciljne sheme se ne smejo ujemati.
Podatke replikacije je mogoče izvleči iz kaskadne replikacije MySQL.
Tabele, ki se ne morejo replikovati ali povzročajo napake, se izključijo.
Vsako funkcijo replikacije upravljajo procesi.
Nadzor z uporabo parametrov in konfiguracijskih datotek v formatu YAML.
Primer
Strežnik
vm1
vm2
Različica operacijskega sistema
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64
Različica strežnika Baze podatkov
MySQL 5.7.26
PostgreSQL 10.5
Pristanišče Baze podatkov
3306
5433
IP naslov
192.168.56.102
192.168.56.106
Najprej pripravite vse potrebne sestavne dele za namestitev pg_chameleon. V tem primeru je nameščen Python 3.6.8, ki ustvari in aktivira virtualno okolje.
$> wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz
$> tar -xJf Python-3.6.8.tar.xz
$> cd Python-3.6.8
$> ./configure --enable-optimizations
$> make altinstallPo uspešni namestitvi Python 3.6 morate izpolniti še druge zahteve, na primer ustvariti in aktivirati virtualno okolje. Poleg tega se modul pip posodobi na najnovejšo različico in se uporablja za namestitev pg_chameleon. V spodnjih ukazih namerno namestimo pg_chameleon 2.0.9, čeprav je najnovejša različica 2.0.10. To je potrebno, da se izognemo novim napakam v posodobljeni različici.
$> python3.6 -m venv venv
$> source venv/bin/activate
(venv) $> pip install pip --upgrade
(venv) $> pip install pg_chameleon==2.0.9Nato pokličemo pg_chameleon (chameleon je ukaz) z argumentom set_configuration_files, da omogočimo pg_chameleon in ustvarimo privzete mape in konfiguracijske datoteke.
(venv) $> chameleon set_configuration_files
creating directory /root/.pg_chameleon
creating directory /root/.pg_chameleon/configuration/
creating directory /root/.pg_chameleon/logs/
creating directory /root/.pg_chameleon/pid/
copiyng configuration example in /root/.pg_chameleon/configuration//config-example.ymlZdaj ustvarjamo kopijo config-example.yml kot default.yml, da postane datoteka s privzetimi konfiguracijami. Vzorčna datoteka s konfiguracijo za ta primer je navedena spodaj.
$> cat default.yml
---
#global settings
pid_dir: '~/.pg_chameleon/pid/'
log_dir: '~/.pg_chameleon/logs/'
log_dest: file
log_level: info
log_days_keep: 10
rollbar_key: ''
rollbar_env: ''
# type_override omogoča uporabniku, da nadomesti privzeto pretvorbo tipov z drugo.
type_override:
"tinyint(1)":
override_to: boolean
override_tables:
- "*"
#postgres destination connection
pg_conn:
host: "192.168.56.106"
port: "5433"
user: "usr_replica"
password: "pass123"
database: "db_replica"
charset: "utf8"
sources:
mysql:
db_conn:
host: "192.168.56.102"
port: "3306"
user: "usr_replica"
password: "pass123"
charset: 'utf8'
connect_timeout: 10
schema_mappings:
world_x: pgworld_x
limit_tables:
# - delphis_mediterranea.foo
skip_tables:
# - delphis_mediterranea.bar
grant_select_to:
- usr_readonly
lock_timeout: "120s"
my_server_id: 100
replica_batch_size: 10000
replay_max_rows: 10000
batch_retention: '1 day'
copy_max_memory: "300M"
copy_mode: 'file'
out_dir: /tmp
sleep_loop: 1
on_error_replay: continue
on_error_read: continue
auto_maintenance: "disabled"
gtid_enable: No
type: mysql
skip_events:
insert:
- delphis_mediterranea.foo #skips inserts on the table delphis_mediterranea.foo
delete:
- delphis_mediterranea #skips deletes on schema delphis_mediterranea
update:Datoteka s konfiguracijo v tem primeru je primer datoteke pg_chameleon s manjšimi spremembami v skladu z izvorno in ciljno okolico, spodaj pa je pregled različnih razdelkov datoteke s konfiguracijo.
V datoteki s konfiguracijo default.yml je oddelek globalnih nastavitev (global settings), kjer lahko upravljate s takšnimi nastavitvami, kot so lokacija datoteke za zaklepanje, lokacija logov, obdobje shranjevanja logov itd. Naslednji oddelek je oddelek za nadzor tipov (type override), kjer je navedena vrsta pravil za nadzor tipov med replikacijo. V privzetem primeru se uporablja pravilo za nadzor tipov, ki pretvarja tinyint(1) v logično vrednost. V naslednjem razdelku navedemo podrobnosti o povezavi do ciljne podatkovne baze. V našem primeru je to podatkovna baza PostgreSQL, označena kot pg_conn. V zadnjem razdelku navedemo podatke o viru, torej parametre povezave do izvorne podatkovne baze, shemo usklajevanja med izvorno in ciljno podatkovno bazo, tabele, ki jih je treba preskočiti, čas čakanja, pomnilnik, velikost paketa. Opazite, da je "sources" navedeno v množini, kar pomeni, da lahko dodamo več izvornih podatkovnih baz za eno ciljno, da prilagodimo konfiguracijo "več proti enemu".
Baza podatkov world_x v primeru vsebuje 4 tabele s podatki, ki jih skupnost MySQL ponuja kot primer. Lahko jo naložite. . Primer baze podatkov je na voljo v obliki tar in stisnjenega arhiva z navodili za ustvarjanje in uvoz vrstic.
V bazah podatkov MySQL in PostgreSQL se ustvari poseben uporabnik z enakim imenom usr_replica. V MySQL mu dodelijo dodatna pravica za branje vseh repliciranih tabel.
mysql> CREATE USER usr_replica ;
mysql> SET PASSWORD FOR usr_replica='pass123';
mysql> GRANT ALL ON world_x.* TO 'usr_replica';
mysql> GRANT RELOAD ON *.* to 'usr_replica';
mysql> GRANT REPLICATION CLIENT ON *.* to 'usr_replica';
mysql> GRANT REPLICATION SLAVE ON *.* to 'usr_replica';
mysql> FLUSH PRIVILEGES;Na strani PostgreSQL se ustvari baza podatkov db_replica, ki bo sprejemala spremembe iz baze podatkov MySQL. Uporabnik usr_replica v PostgreSQL se samodejno konfigurira kot lastnik dveh shem pgworld_x in sch_chameleon, ki vsebujeta dejanske replicirane tabele in tabele z registri replikacije. Za samodejno konfiguracijo skrbi argument create_replica_schema, kot boste videli spodaj.
postgres=# CREATE USER usr_replica WITH PASSWORD 'pass123';
CREATE ROLE
postgres=# CREATE DATABASE db_replica WITH OWNER usr_replica;
CREATE DATABASEBaza podatkov MySQL se konfigurira s spremembami nekaterih parametrov, da jo pripravimo na replikacijo, kot je prikazano spodaj. Potrebno bo znova zagnati strežnik baz podatkov, da spremembe začnejo veljati.
$> vi /etc/my.cnf
binlog_format= ROW
binlog_row_image=FULL
log-bin = mysql-bin
server-id = 1Sedaj je pomembno preveriti povezavo z obema strežnikoma baz podatkov, da pri izvedbi ukazov pg_chameleon ne pride do težav.
Na vozlišču PostgreSQL:
$> mysql -u usr_replica -Ap'admin123' -h 192.168.56.102 -D world_xNa vozlišču MySQL:
$> psql -p 5433 -U usr_replica -h 192.168.56.106 db_replicaNaslednje tri ukaze pg_chameleon (chameleon) pripravljajo okolje, dodajo vir in inicializirajo replikacijo. Argument create_replica_schema v pg_chameleon ustvari privzeto shemo (sch_chameleon) in shemo replikacije (pgworld_x) v bazi podatkov PostgreSQL, kot smo že omenili. Argument add_source doda izvorno bazo podatkov v konfiguracijo, bere datoteko konfiguracije (default.yml), v našem primeru to mysql, in init_replica inicializira konfiguracijo na podlagi parametrov v datoteki konfiguracije.
$> chameleon create_replica_schema --debug
$> chameleon add_source --config default --source mysql --debug
$> chameleon init_replica --config default --source mysql --debugIzhodi podatkov teh treh ukazov očitno kažejo na njihovo uspešno izvedbo. Vse napake ali sintaktične napake so prikazane v preprostih in razumljivih sporočilih z nasveti za odpravo težav.
Na koncu bomo zagnali replikacijo z ukazom start_replica in prejeli sporočilo o uspešni izvedbi.
$> chameleon start_replica --config default --source mysql
izhod: Zagon proces replikacije za vir mysqlStatus replikacije lahko preverimo z argumentom show_status, napake pa si lahko ogledamo z argumentom show_errors.
Kot smo že omenili, vsako funkcijo replikacije upravljajo demoni. Da jih vidimo, lahko poizvedimo procesno tabelo z ukazom Linux ps, kot je prikazano spodaj.
Replikacija se ne šteje za nastavljeno, dokler je ne preverimo v realnem času, kot je prikazano spodaj. Ustvarili bomo tabelo, vstavili nekaj vnosov v bazo podatkov MySQL in poklicali argument sync_tables v pg_chameleon, da osvežimo demone in replikiramo tabelo z vnosom v bazo podatkov PostgreSQL.
mysql> create table t1 (n1 int primary key, n2 varchar(10));
Poizvedba OK, 0 vrstic prizadeto (0.01 sec)
mysql> insert into t1 values (1,'one');
Poizvedba OK, 1 vrstica prizadeta (0.00 sec)
mysql> insert into t1 values (2,'two');
Poizvedba OK, 1 vrstica prizadeta (0.00 sec)$> chameleon sync_tables --tables world_x.t1 --config default --source mysql
Postopek sinhronizacije tabel za vir mysql je začel.Da potrdimo rezultate testa, poizvedujemo tabelo iz baze podatkov PostgreSQL in prikažemo vrstice.
$> psql -p 5433 -U usr_replica -d db_replica -c "select * from pgworld_x.t1";
n1 | n2
----+-------
1 | one
2 | twoČe izvajamo migracijo, bodo naslednji ukazi pg_chameleon njeno zaključek. Ukaze je treba izvesti po tem, ko se prepričamo, da so bile vse vrstice vseh ciljnih tabel replikirane, rezultat pa bo skrbno prenesena baza podatkov PostgreSQL brez sklicevanj na izvorno bazo podatkov ali shemo replikacije (sch_chameleon).
$> chameleon stop_replica --config default --source mysql
$> chameleon detach_replica --config default --source mysql --debugPo želji lahko z naslednjimi ukazi odstranimo izvorno konfiguracijo in shemo replikacije.
$> chameleon drop_source --config default --source mysql --debug
$> chameleon drop_replica_schema --config default --source mysql --debugPrednosti pg_chameleon
Enostavna nastavitev in konfiguracija.
Enostavno odpravljanje napak in prepoznavanje anomali z jasnimi sporočili o napakah.
Dodatne posebne tabele je mogoče dodati k replikaciji po začetni nastavitvi, ne da bi spreminjali preostalo konfiguracijo.
Možno nastaviť viacero zdrojových databáz pre jednu cieľovú, čo je veľmi praktické, ak kombinujete údaje z jednej alebo viacerých databáz MySQL do jednej databázy PostgreSQL.
Nie je potrebné replikovať vybrané tabuľky.
Nevýhody pg_chameleon
Podporuje sa len s MySQL 5.5 a vyššou ako zdrojom a PostgreSQL 9.5 a vyššou ako cieľovou databázou.
Každá tabuľka musí mať primárny alebo jedinečný kľúč, inak sa tabuľky inicializujú v priebehu init_replica, ale nereplikujú sa.
Jednosmerná replikácia — len z MySQL do PostgreSQL. Preto sa hodí len pre schému 'aktívny-pasívny'.
Zdrojem môže byť len databáza MySQL, a podpora databázy PostgreSQL ako zdroja je len experimentálna a s obmedzeniami (dozviete sa viac )
Zhrnutie pg_chameleon
Metóda replikácie v pg_chameleon je skvelá pre migráciu databáz z MySQL do PostgreSQL. Zásadnou nevýhodou je, že replikácia je len jednosmerná, takže odborníci na databázy ju pravdepodobne nebudú chcieť používať na nič iné, než na migráciu. Ale problém jednosmernej replikácie možno riešiť ďalším open-source nástrojom — SymmetricDS.
Viac informácií nájdete v oficiálnej dokumentácii . Nápovedu k príkazovému riadku nájdete .
Prehľad SymmetricDS
SymmetricDS je open-source nástroj, ktorý replikuje akúkoľvek databázu do akejkoľvek inej bežnej databázy: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird a ďalších cloudových inštancií DB, ako napríklad Redshift a Azure atď. Dostupné funkcie: synchronizácia databáz a súborov, replikácia viacerých hlavných databáz, filtrovaná synchronizácia, transformácia a ďalšie. Je to nástroj napísaný v Jave a vyžaduje štandardné vydanie JRE alebo JDK (verzie 8.0 a vyššie). Tu je možné zapisovať zmeny údajov pomocou spúšťačov v zdrojovej databáze a smerovať ich do príslušnej cieľovej databázy vo forme balíčkov.
Možnosti SymmetricDS
Nástroj nie je závislý od platformy, to znamená, že dve alebo viac rôznych DB môžu vymieňať údaje.
Relačné DB sa synchronizujú pomocou zápisu zmeny údajov, zatiaľ čo DB na báze súborových systémov využívajú synchronizáciu súborov.
Dvojstranná replikácia s použitím metód Push a Pull na základe súboru pravidiel.
Podatki se lahko prenašajo preko varnih omrežij in omrežij z nizko prepustnostjo.
Samodejna obnova ob ponovnem zagonu vozlišč po napaki in samodejno reševanje konfliktov.
Združljivost z oblakom in učinkoviti API-ji razširitev.
Primer
SymmetricDS je mogoče nastaviti na enega od dveh načinov:
Vodilo (starševsko) vozlišče, ki centralno usklajuje replikacijo podatkov med dvema podrejenima (otroškima) vozliščema, in izmenjava podatkov med otroškima vozliščema poteka le preko starševskega.
Aktivno vozlišče (vozhlišče 1) lahko izmenjuje podatke za replikacijo z drugim aktivnim vozliščem (vozhlišče 2) brez posrednika.
V obeh različicah pride do izmenjave podatkov s Push in Pull. V tem primeru bomo obravnavali konfiguracijo 'aktivno-aktivno'. Celotne arhitekture ne moremo obravnavati, zato raziskujte , da bi izvedeli več o napravi SymmetricDS.
Namestitev SymmetricDS je zelo enostavna: prenesite odprtokodno različico zip datoteke in jo razpakirajte, kamor želite. V spodnji tabeli so navedeni podatki o lokaciji namestitve in različici SymmetricDS v tem primeru ter različice baz podatkov, različice Linuxa, IP naslovi in vrata za oba vozlišča.
Strežnik
vm1
vm2
Različica operacijskega sistema
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64
Različica strežnika Baze podatkov
MySQL 5.7.26
PostgreSQL 10.5
Pristanišče Baze podatkov
3306
5832
IP naslov
192.168.1.107
192.168.1.112
Različica SymmetricDS
SymmetricDS 3.9
SymmetricDS 3.9
Pot namestitve SymmetricDS
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20
Ime vozlišča SymmetricDS
corp-000
store-001
Tukaj namestimo SymmetricDS v /usr/local/symmetric-server-3.9.20, kjer bodo shranjeni različni poddirektoriji in datoteke. Zanimajo nas poddirektoriji samples in engines. V direktoriju samples so shranjeni primeri konfiguracijskih datotek z lastnostmi vozlišča in primeri SQL skriptov za hiter začetek demonstracije.
V direktoriju samples vidimo tri konfiguracijske datoteke z lastnostmi vozlišča — ime nakazuje značaj vozlišča v določeni shemi.
corp-000.properties
store-001.properties
store-002.propertiesV SymmetricDS so vsi potrebni konfiguracijski dokumenti za osnovno shemo s 3 vozlišči (možnost 1), in iste dokumente je mogoče uporabiti za shemo z 2 vozlišči (možnost 2). Potrebno konfiguracijsko datoteko kopiramo iz direktorija samples v engines na gostitelju vm1. Izgleda tako:
$> cat engines/corp-000.properties
engine.name=corp-000
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://192.168.1.107:3306/replica_db?autoReconnect=true&useSSL=false
db.user=root
db.password=admin123
registration.url=
sync.url=http://192.168.1.107:31415/sync/corp-000
group.id=corp
external.id=000Ta vozlišče v konfiguraciji SymmetricDS je imenovano corp-000, povezava do baze podatkov pa se obravnava z mysql jdbc gonilnikom, ki uporablja zgoraj navedeno povezovalno vrstico in prijavne podatke. Povezujemo se z bazo podatkov replica_db, medtem ko bodo tabele ustvarjene med ustvarjanjem sheme. sync.url prikazuje povezavo do vozlišča za sinhronizacijo.
Vozlišče 2 na gostitelju vm2 je nastavljeno kot store-001, preostalo pa je navedeno v datoteki node.properties, ki je navedena spodaj. Vozlišče store-001 izvaja bazo podatkov PostgreSQL, medtem ko je pgdb_replica baza podatkov za replikacijo. registration.url omogoča gostitelju vm2, da stopi v stik z gostiteljem vm1 in pridobi podrobnosti o konfiguraciji.
$> cat engines/store-001.properties
engine.name=store-001
db.driver=org.postgresql.Driver
db.url=jdbc:postgresql://192.168.1.112:5832/pgdb_replica
db.user=postgres
db.password=admin123
registration.url=http://192.168.1.107:31415/sync/corp-000
group.id=store
external.id=001Končni primer SymmetricDS vsebuje parametre za nastavitev dvosmerne replikacije med dvema strežnikoma podatkov (dvema vozliščema). Spodnji koraki se izvedejo na gostitelju vm1 (corp-000), ki bo ustvaril primer sheme s 4 tabelami. Nato ukaz create-sym-tables preko symadmin ustvari tabele katalogov, kjer bodo shranjena pravila in smer replikacije med vozlišči. Na koncu se naložijo podatki za primer.
vm1$> cd /usr/local/symmetric-server-3.9.20/bin
vm1$> ./dbimport --engine corp-000 --format XML create_sample.xml
vm1$> ./symadmin --engine corp-000 create-sym-tables
vm1$> ./dbimport --engine corp-000 insert_sample.sqlV primeru tabele item in item_selling_price sta samodejno nastavljeni za replikacijo iz corp-000 v store-001, medtem ko sta tabeli sale (sale_transaction in sale_return_line_item) samodejno nastavljeni za replikacijo iz store-001 v corp-000. Zdaj ustvarjamo shemo v bazi podatkov PostgreSQL na gostitelju vm2 (store-001), da jo pripravimo za sprejem podatkov iz corp-000.
vm2$> cd /usr/local/symmetric-server-3.9.20/bin
vm2$> ./dbimport --engine store-001 --format XML create_sample.xmlObvezno preverimo, da v bazi podatkov MySQL na vm1 obstajajo primeri tabel in tabele katalogov SymmetricDS. Opazite, da so sistemske tabele SymmetricDS (s predpono sym_) trenutno na voljo samo na vozlišču corp-000, saj smo tam izvedli ukaz create-sym-tables in bomo upravljali replikacijo. Poleg tega bo v bazi podatkov na vozlišču store-001 le 4 tabele primera brez podatkov.
Vse. Okolje je pripravljeno za zagon strežniških procesov sym na obeh vozliščih, kot je prikazano spodaj.
vm1$> cd /usr/local/symmetric-server-3.9.20/bin
vm1$> sym 2>&1 &Zapisi logov se pošiljajo v datoteko ozadja (symmetric.log) v mapi logov v direktoriju, kjer je nameščen SymmetricDS, prav tako pa tudi v standardni izhod. Strežnik sym je zdaj mogoče zagnati na vozlišču store-001.
vm2$> cd /usr/local/symmetric-server-3.9.20/bin
vm2$> sym 2>&1 &Če na gostitelju vm2 zaženete strežniški proces sym, bo ustvaril tabele imenika SymmetricDS tudi v podatkovni bazi PostgreSQL. Če na obeh vozliščih zaženete strežniški proces sym, se bosta usklajevala, da replicirata podatke z corp-000 na store-001. Če po nekoliko sekundah zahtevamo vseh 4 tabel na obeh straneh, bomo videli, da je replikacija uspešno izvedena. Ali pa lahko pošljemo začetno nalaganje na vozlišče store-001 iz corp-000 z naslednjim ukazom.
vm1$> ./symadmin --engine corp-000 reload-node 001V tej fazi je v tabelo item v podatkovni bazi MySQL na vozlišču corp-000 (gostitelj: vm1) vstavljena nova določba in lahko preverimo njeno replikacijo v podatkovni bazi PostgreSQL na vozlišču store-001. Vidimo operacijo Pull za prenos podatkov iz corp-000 v store-001.
mysql> insert into item values ('22000002','Jelly Bean');
Query OK, 1 row affected (0.00 sec)vm2$> psql -p 5832 -U postgres pgdb_replica -c "select * from item"
item_id | name
----------+-----------
11000001 | Yummy Gum
22000002 | Jelly Bean
(2 rows)Da izvedemo operacijo Push za prenos podatkov iz store-001 v corp-000, vstavimo zapis v tabelo sale_transaction in preverimo, da je replikacija uspešno izvedena.
Vidimo uspešno nastavitev dvostranske replikacije tabel primera med podatkovnimi bazami MySQL in PostgreSQL. Da nastavite replikacijo za nove uporabniške tabele, izvedite naslednje korake. Ustvarimo tabelo t1 za primer in nastavimo pravila njene replikacije na naslednji način. Tako nastavljamo le replikacijo iz corp-000 v store-001.
mysql> create table t1 (no integer);
Query OK, 0 rows affected (0.01 sec)mysql> insert into sym_channel (channel_id,create_time,last_update_time)
values ('t1',current_timestamp,current_timestamp);
Query OK, 1 row affected (0.01 sec)mysql> insert into sym_trigger (trigger_id, source_table_name,channel_id,
last_update_time, create_time) values ('t1', 't1', 't1', current_timestamp,
current_timestamp);
Query OK, 1 row affected (0.01 sec)mysql> insert into sym_trigger_router (trigger_id, router_id,
Initial_load_order, create_time,last_update_time) values ('t1',
'corp-2-store-1', 1, current_timestamp,current_timestamp);
Query OK, 1 row affected (0.01 sec)Nato konfiguracija obavještava o promjeni sheme, odnosno dodavanju nove tablice, pomoću naredbe symadmin s argumentom sync-triggers, koja ponovno stvara okidače za usklađivanje definicija tablica. Izvršava se send-schema za slanje promjena sheme na čvor store-001, a replikacija tablice t1 je postavljena.
vm1$> ./symadmin -e corp-000 --node=001 sync-triggers
vm1$> ./symadmin send-schema -e corp-000 --node=001 t1Prednosti SymmetricDS
Jednostavna instalacija i konfiguracija, uključujući gotov set datoteka s parametrima za izradu sheme s tri ili dva čvora.
Krosplatformnost baza podataka i neovisnost o platformi, uključujući poslužitelje, prijenosnike i mobilne uređaje.
Replikacija bilo koje baze podataka u bilo koju drugu bazu podataka lokalno, u WAN-u ili u oblaku.
Mogućnost optimalnog rada s parom baza podataka ili s nekoliko tisuća za jednostavnu replikaciju.
Plaćena verzija s grafičkim sučeljem i izvrsnom podrškom.
Nedostaci SymmetricDS
Potrebno je ručno odrediti u komandnoj liniji pravila i smjer replikacije putem SQL operatora za učitavanje tablica kataloga, što može biti nezgodno.
Podesiti mnogo tablica za replikaciju može biti zamorno, ako se ne koriste skripte za izradu SQL operatora koji definiraju pravila i smjer replikacije.
U log se unosi previše informacija, a ponekad je potrebno sređivanje log datoteke kako ne bi zauzimala previše prostora.
Zaključci o SymmetricDS
SymmetricDS omogućuje podešavanje dvostruke replikacije između dva, tri i čak nekoliko tisuća čvorova, kako bi izvršavali replikaciju i sinkronizirali datoteke. To je jedinstveni alat koji samostalno izvršava mnoge zadatke, poput automatskog oporavka podataka nakon dugotrajne nedostupnosti na čvoru, zaštićene i efikasne razmjene podataka između čvorova putem HTTPS-a, automatskog upravljanja sukobima na temelju skupa pravila itd. SymmetricDS vrši replikaciju između bilo kojih baza podataka, pa se može koristiti za najrazličitije scenarije, uključujući migraciju, prelazak na novu verziju, distribuciju, filtriranje i preoblikovanje podataka na različitim platformama.
Primjer je napravljen na temelju službenog o SymmetricDS. U podrobno opisujutsja različni pojmovi, povezani s postavitvijo replikacije s pomočjo SymmetricDS.
Izvor: habr.com
