Navzkrižna replikacija med PostgreSQL in MySQL

Navzkrižna replikacija med PostgreSQL in MySQL

Opisal bom navzkrižno podvajanje med PostgreSQL in MySQL ter metode za nastavitev navzkrižnega podvajanja med obema strežnikoma baz podatkov. Običajno se navzkrižno podvajane baze podatkov imenujejo homogene in je priročen način premikanja z enega strežnika RDBMS na drugega.

Baze podatkov PostgreSQL in MySQL na splošno veljajo za relacijske, vendar z dodatnimi razširitvami ponujajo zmogljivosti NoSQL. Tukaj bomo razpravljali o replikaciji med PostgreSQL in MySQL z vidika relacijskega DBMS.

Ne bomo opisali celotnega notranjega delovanja, le osnovna načela, da boste dobili predstavo o konfiguraciji replikacije med strežniki baz podatkov, prednosti, omejitve in primere uporabe.

Običajno se replikacija med dvema enakima strežnikoma baz podatkov izvaja v binarnem načinu ali z uporabo poizvedb med glavnim (tudi izdajatelj, glavni ali aktivni) in podrejenim (naročniškim, pripravljenim ali pasivnim). Namen replikacije je zagotoviti kopijo glavne baze podatkov v realnem času na podrejeni strani. Podatki se v tem primeru prenašajo od glavnega do podrejenega, torej od aktivnega do pasivnega, saj se podvajanje izvaja le v eno smer. Lahko pa nastavite podvajanje med dvema bazama podatkov v obe smeri, tako da se podatki prenašajo od podrejene do glavne v konfiguraciji aktivno-aktivno. Vse to, vključno s kaskadnim podvajanjem, je možno med dvema ali več enakimi strežniki baz podatkov.Konfiguracija aktivno-aktivna ali aktivno-pasivna je odvisna od potrebe, razpoložljivosti takšnih zmogljivosti v začetni konfiguraciji ali uporabe zunanjih konfiguracijskih rešitev in obstoječih kompromisov.

Opisana konfiguracija je možna med različnimi strežniki baz podatkov. Strežnik je mogoče konfigurirati tako, da sprejema podvojene podatke iz drugega strežnika baze podatkov in še vedno vzdržuje posnetke podvojenih podatkov v realnem času. MySQL in PostgreSQL ponujata večino teh konfiguracij znotraj podjetja ali prek razširitev tretjih oseb, vključno z metodami binarnega dnevnika, zaklepanjem diska ter metodami, ki temeljijo na izjavah in vrsticah.

Navzkrižna replikacija med MySQL in PostgreSQL je potrebna za enkratno selitev z enega strežnika baz podatkov na drugega. Te zbirke podatkov uporabljajo različne protokole, zato jih ni mogoče neposredno povezati. Za vzpostavitev izmenjave podatkov lahko uporabite zunanje odprtokodno orodje, na primer pg_chameleon.

Kaj je pg_chameleon

pg_chameleon je replikacijski sistem iz MySQL v PostgreSQL v Pythonu 3. Uporablja odprtokodno knjižnico replikacije mysql, prav tako v Pythonu. Slike vrstic so ekstrahirane iz tabel MySQL in shranjene kot objekti JSONB v bazi podatkov PostgreSQL, nato pa dešifrirane s funkcijo pl/pgsql in reproducirane v bazi podatkov PostgreSQL.

Značilnosti pg_chameleon

Več shem MySQL iz iste gruče je mogoče podvojiti v eno samo ciljno bazo podatkov PostgreSQL v konfiguraciji ena proti mnogo
Imena izvorne in ciljne sheme ne moreta biti enaka.
Podatke replikacije je mogoče pridobiti iz kaskadne replike MySQL.
Tabele, ki se ne morejo ponoviti ali povzročajo napake, so izključene.
Vsako funkcijo podvajanja nadzirajo demoni.
Nadzor prek parametrov in konfiguracijskih datotek, ki temeljijo na YAML.

Primer

Voditelj
vm1
vm2

različica OS
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64

Različica strežnika DB
MySQL 5.7.26
PostgreSQL 10.5

vrata DB
3306
5433

IP naslov
192.168.56.102
192.168.56.106

Za začetek pripravite vse potrebne komponente za namestitev pg_chameleon. Ta primer namesti 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 altinstall

Po uspešni namestitvi Python3.6 morate izpolniti preostale zahteve, kot je ustvarjanje in aktiviranje virtualnega okolja. Poleg tega je modul pip posodobljen na najnovejšo različico in uporabljen za namestitev pg_chameleon. Spodnji ukazi namerno namestijo pg_chameleon 2.0.9, čeprav je zadnja različica 2.0.10. To je potrebno, da se izognete 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.9

Nato pokličemo pg_chameleon (chameleon je ukaz) z argumentom set_configuration_files, da omogočimo pg_chameleon in ustvarimo privzete imenike 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/
copying configuration  example in /root/.pg_chameleon/configuration//config-example.yml

Zdaj ustvarimo kopijo config-example.yml kot default.yml, tako da postane privzeta konfiguracijska datoteka. Vzorčna konfiguracijska datoteka za ta primer je na voljo 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 allows the user to override the default type conversion into a different one.
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:

Konfiguracijska datoteka v tem primeru je vzorčna datoteka pg_chameleon z manjšimi spremembami, ki ustrezajo izvornemu in ciljnemu okolju, spodaj pa je pregled različnih razdelkov konfiguracijske datoteke.

V konfiguracijski datoteki default.yml je razdelek globalnih nastavitev, kjer lahko upravljate nastavitve, kot so lokacija zaklenjene datoteke, lokacija dnevnikov, obdobje shranjevanja dnevnikov itd. Sledi razdelek za preglasitev vrste, kjer nabor pravil za preglasitev tipov med replikacijo. Primer ima privzeto pravilo za preglasitev tipa, ki pretvori tinyint(1) v logično vrednost. V naslednjem razdelku določimo podrobnosti povezave s ciljno zbirko podatkov. V našem primeru je to zbirka podatkov PostgreSQL z oznako pg_conn. V zadnjem razdelku navedemo izvorne podatke, to je parametre povezave izvorne baze podatkov, shemo preslikave med izvorno in ciljno bazo podatkov, tabele, ki jih je treba preskočiti, čas čakanja, pomnilnik, velikost paketa. Upoštevajte, da je "viri" množina, kar pomeni, da lahko dodamo več izvornih baz podatkov v eno ciljno bazo podatkov, da nastavimo konfiguracijo več proti ena.

Primer baze podatkov world_x vsebuje 4 tabele z vrsticami, ki jih skupnost MySQL ponuja kot primere. Lahko ga prenesete tukaj. Vzorčna baza podatkov je kot tar in stisnjen arhiv z navodili za ustvarjanje in uvoz vrstic.

V podatkovnih bazah MySQL in PostgreSQL se ustvari poseben uporabnik z istim imenom usr_replica. V MySQL ima dodatne pravice za branje za vse podvojene tabele.

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 je ustvarjena baza podatkov db_replica, ki bo sprejemala spremembe iz baze podatkov MySQL. Uporabnik usr_replica v PostgreSQL je samodejno konfiguriran kot lastnik dveh shem, pgworld_x in sch_chameleon, ki vsebujeta dejanske podvojene tabele oziroma tabele imenikov replikacije. Argument create_replica_schema je odgovoren za samodejno konfiguracijo, kot boste videli spodaj.

postgres=# CREATE USER usr_replica WITH PASSWORD 'pass123';
CREATE ROLE
postgres=# CREATE DATABASE db_replica WITH OWNER usr_replica;
CREATE DATABASE

Podatkovna baza MySQL je konfigurirana z nekaj spremembami parametrov, da se pripravi za replikacijo, kot je prikazano spodaj. Da bodo spremembe začele veljati, boste morali znova zagnati strežnik baze podatkov.

$> vi /etc/my.cnf
binlog_format= ROW
binlog_row_image=FULL
log-bin = mysql-bin
server-id = 1

Zdaj je pomembno preveriti povezavo z obema strežnikoma baz podatkov, da ne bo težav pri izvajanju ukazov pg_chameleon.

Na vozlišču PostgreSQL:

$> mysql -u usr_replica -Ap'admin123' -h 192.168.56.102 -D world_x

Na vozlišču MySQL:

$> psql -p 5433 -U usr_replica -h 192.168.56.106 db_replica

Naslednji trije ukazi pg_chameleon (kameleon) pripravijo okolje, dodajo izvor in inicializirajo repliko. Argument create_replica_schema za pg_chameleon ustvari privzeto shemo (sch_chameleon) in shemo replikacije (pgworld_x) v bazi podatkov PostgreSQL, kot smo že omenili. Argument add_source konfiguraciji doda izvorno bazo podatkov z branjem konfiguracijske datoteke (default.yml), v našem primeru pa je to mysql, init_replica pa inicializira konfiguracijo na podlagi parametrov v konfiguracijski datoteki.

$> chameleon create_replica_schema --debug
$> chameleon add_source --config default --source mysql --debug
$> chameleon init_replica --config default --source mysql --debug

Izhod teh treh ukazov jasno kaže, da so bili uspešno izvedeni. Vse zrušitve ali sintaksne napake so sporočene v preprostih, jasnih sporočilih z namigi o tem, kako odpraviti težavo.

Na koncu zaženemo replikacijo z uporabo start_replica in prejmemo sporočilo o uspehu.

$> chameleon start_replica --config default --source mysql 
output: Starting the replica process for source mysql

Stanje replikacije je mogoče poizvedovati z uporabo argumenta show_status, napake pa si lahko ogledate z uporabo argumenta show_errors.

Rezultat.

Kot smo že povedali, vsako funkcijo replikacije nadzirajo demoni. Če si jih želimo ogledati, izvedemo poizvedbo v tabeli procesov z ukazom Linux ps, kot je prikazano spodaj.

Rezultat.

Replikacija se ne šteje za konfigurirano, dokler je ne preizkusimo v realnem času, kot je prikazano spodaj. Ustvarimo tabelo, vstavimo nekaj zapisov v bazo podatkov MySQL in pokličemo argument sync_tables v pg_chameleon, da posodobimo demone in podvojimo tabelo z zapisi v bazo podatkov PostgreSQL.

mysql> create table t1 (n1 int primary key, n2 varchar(10));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t1 values (1,'one');
Query OK, 1 row affected (0.00 sec)
mysql> insert into t1 values (2,'two');
Query OK, 1 row affected (0.00 sec)

$> chameleon sync_tables --tables world_x.t1 --config default --source mysql
Sync tables process for source mysql started.

Za potrditev rezultatov testa izvedemo poizvedbo po tabeli iz baze podatkov PostgreSQL in izpiš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 selitev, bodo naslednji ukazi pg_chameleon njen konec. Ukaze je treba izvesti, ko smo prepričani, da so bile vrstice vseh ciljnih tabel podvojene, rezultat pa bo lepo preseljena baza podatkov PostgreSQL brez sklicevanja na izvorno bazo podatkov ali shemo replikacije (sch_chameleon).

$> chameleon stop_replica --config default --source mysql 
$> chameleon detach_replica --config default --source mysql --debug

Če želite, lahko z naslednjimi ukazi izbrišete izvirno konfiguracijo in shemo podvajanja.

$> chameleon drop_source --config default --source mysql --debug
$> chameleon drop_replica_schema --config default --source mysql --debug

Prednosti pg_chameleon

Enostavna nastavitev in konfiguracija.
Preprosto odpravljanje težav in prepoznavanje anomalij z jasnimi sporočili o napakah.
Dodatne posebne tabele je mogoče dodati replikaciji po inicializaciji brez spreminjanja preostale konfiguracije.
Možno je konfigurirati več izvornih baz podatkov za eno ciljno bazo podatkov, kar je zelo uporabno, če združujete podatke iz ene ali več baz podatkov MySQL v eno samo bazo podatkov PostgreSQL.
Izbranih tabel vam ni treba podvajati.

Slabosti pg_chameleon

Podprto samo z MySQL 5.5 in novejšim kot izvorom ter PostgreSQL 9.5 in novejšim kot ciljno bazo podatkov.
Vsaka tabela mora imeti primarni ali edinstveni ključ, sicer se tabele inicializirajo med postopkom init_replica, vendar se ne podvajajo.
Enosmerna replikacija - samo iz MySQL v PostgreSQL. Zato je primeren le za "aktivno-pasivno" vezje.
Vir je lahko le baza podatkov MySQL, podpora za bazo podatkov PostgreSQL kot vir pa je samo eksperimentalna in z omejitvami (več o tem tukaj)

Rezultati za pg_chameleon

Metoda replikacije v pg_chameleon je odlična za selitev baze podatkov iz MySQL v PostgreSQL. Pomembna slaba stran je, da je replikacija samo enosmerna, zato strokovnjaki za baze podatkov verjetno ne bodo želeli uporabiti za kar koli drugega kot za selitev. Toda problem enosmernega podvajanja je mogoče rešiti z drugim odprtokodnim orodjem - SymmetricDS.

Več si preberite v uradni dokumentaciji tukaj. Najdete lahko pomoč za ukazno vrstico tukaj.

Pregled SymmetricDS

SymmetricDS je odprtokodno orodje, ki replicira katero koli bazo podatkov v katero koli drugo skupno bazo podatkov: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird in druge primerke baz podatkov v oblaku, npr. Redshift in Azure itd. Razpoložljive funkcije: sinhronizacija baze podatkov in datotek, replikacija baze podatkov z več glavnimi, filtrirana sinhronizacija, transformacija in druge. To je orodje Java in zahteva standardno izdajo JRE ali JDK (različica 8.0 ali novejša). Tukaj je mogoče zabeležiti spremembe podatkov za sprožilce v izvorni bazi podatkov in poslati v ustrezno ciljno bazo podatkov v obliki paketov.

Funkcije SymmetricDS

Orodje je neodvisno od platforme, kar pomeni, da lahko dve ali več različnih baz podatkov izmenjuje podatke.
Relacijske baze podatkov se sinhronizirajo z uporabo zapisov o spremembi podatkov, medtem ko baze podatkov, ki temeljijo na datotečnem sistemu, uporabljajo sinhronizacijo datotek.
Dvosmerna replikacija z uporabo metod Push in Pull, ki temeljijo na nizu pravil.
Prenos podatkov je možen preko varnih in nizkopasovnih omrežij.
Samodejna obnovitev, ko vozlišča nadaljujejo z delovanjem po napaki in samodejno reševanje konfliktov.
Zmogljivi API-ji za razširitve, združljivi z oblakom.

Primer

SymmetricDS je mogoče konfigurirati na enega od dveh načinov:
Glavno (nadrejeno) vozlišče, ki centralno usklajuje replikacijo podatkov med dvema podrejenima (podrejenima) vozliščema, komunikacija med podrejenimi vozlišči pa poteka samo prek nadrejenega.
Aktivno vozlišče (vozlišče 1) lahko komunicira za replikacijo z drugim aktivnim vozliščem (vozlišče 2) brez posrednika.

V obeh možnostih se izmenjava podatkov izvede s pritiskom in vlečenjem. V tem primeru bomo obravnavali konfiguracijo aktivno-aktivno. Predolgo bi trajalo, da bi opisali celotno arhitekturo, zato raziščite. vodstvoče želite izvedeti več o napravi SymmetricDS.

Namestitev SymmetricDS je zelo preprosta: prenesite odprtokodno različico datoteke zip zato in ga vzemite ven, kamor želite. Spodnja tabela ponuja informacije o mestu namestitve in različici SymmetricDS v tem primeru, kot tudi različice baze podatkov, različice Linuxa, naslove IP in vrata za obe vozlišči.

Voditelj
vm1
vm2

različica OS
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64

Različica strežnika DB
MySQL 5.7.26
PostgreSQL 10.5

vrata DB
3306
5832

IP naslov
192.168.1.107
192.168.1.112

Različica SymmetricDS
SymmetricDS 3.9
SymmetricDS 3.9

Namestitvena pot SymmetricDS
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20

Ime vozlišča SymmetricDS
corp-000
trgovina-001

Tukaj namestimo SymmetricDS v /usr/local/symmetric-server-3.9.20 in tam bodo shranjeni različni podimeniki in datoteke. Zanimajo nas podimeniki vzorcev in motorjev. Imenik vzorcev vsebuje primere konfiguracijskih datotek z lastnostmi vozlišča in primere skriptov SQL za hiter začetek.

V imeniku vzorcev vidimo tri konfiguracijske datoteke z lastnostmi vozlišča - ime prikazuje naravo vozlišča v določeni shemi.

corp-000.properties
store-001.properties
store-002.properties

SymmetricDS ima vse potrebne konfiguracijske datoteke za osnovno zasnovo s 3 vozlišči (1. možnost), iste datoteke pa je mogoče uporabiti za zasnovo z 2 vozliščema (2. možnost). Kopirajte zahtevano konfiguracijsko datoteko iz imenika vzorcev v motorje na gostitelju vm1. Izkazalo se je takole:

$> 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=000

To vozlišče v konfiguraciji SymmetricDS se imenuje corp-000, povezavo z bazo podatkov pa upravlja gonilnik mysql jdbc, ki uporablja zgornji povezovalni niz in poverilnice za prijavo. Povezujemo se z bazo podatkov replica_db in med ustvarjanjem sheme bodo ustvarjene tabele. sync.url prikazuje lokacijo povezave z vozliščem za sinhronizacijo.

Vozlišče 2 na gostitelju vm2 je konfigurirano kot store-001, ostalo pa je navedeno v spodnji datoteki node.properties. Node store-001 izvaja bazo podatkov PostgreSQL in pgdb_replica je replikacijska baza podatkov. registration.url omogoča gostitelju vm2, da vzpostavi stik z gostiteljem vm1 in od njega prejme konfiguracijske podrobnosti.

$> 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=001

Dokončan primer SymmetricDS vsebuje parametre za nastavitev dvosmerne replikacije med dvema strežnikoma baz podatkov (dve vozlišči). Spodnji koraki se izvajajo na gostitelju vm1 (corp-000), ki bo ustvaril primer sheme s 4 tabelami. Nato zagon create-sym-tables z ukazom symadmin ustvari tabele imenikov, kjer bodo shranjena pravila in smer podvajanja med vozlišči. Na koncu se vzorčni podatki naložijo v tabele.

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.sql

V primeru sta tabeli item in item_selling_price samodejno konfigurirani za podvajanje iz corp-000 v store-001, tabeli prodaje (sale_transaction in sale_return_line_item) pa sta samodejno konfigurirani za podvajanje iz store-001 v corp-000. Zdaj ustvarimo shemo v bazi podatkov PostgreSQL na gostitelju vm2 (store-001), da jo pripravimo za prejemanje podatkov iz corp-000.

vm2$> cd /usr/local/symmetric-server-3.9.20/bin
vm2$> ./dbimport --engine store-001 --format XML create_sample.xml

Ne pozabite preveriti, ali ima zbirka podatkov MySQL na vm1 vzorčne tabele in kataloške tabele SymmetricDS. Upoštevajte, da so sistemske tabele SymmetricDS (s predpono sym_) trenutno na voljo samo na vozlišču corp-000, ker smo tam zagnali ukaz create-sym-tables in bomo upravljali replikacijo. In v bazi podatkov na vozlišču store-001 bodo samo 4 vzorčne tabele brez podatkov.

Vse. Okolje je pripravljeno za izvajanje procesov strežnika sym na obeh vozliščih, kot je prikazano spodaj.

vm1$> cd /usr/local/symmetric-server-3.9.20/bin
vm1$> sym 2>&1 &

Dnevniški vnosi so poslani v datoteko dnevnika v ozadju (symmetric.log) v mapi dnevnikov v imeniku, kjer je nameščen SymmetricDS, kot 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 zaženete proces strežnika sym na gostitelju vm2, bo ustvaril tudi kataloške tabele SymmetricDS v bazi podatkov PostgreSQL. Če zaženete proces strežnika sym na obeh vozliščih, se medsebojno usklajujeta za podvajanje podatkov iz corp-000 v store-001. Če po nekaj sekundah poizvedujemo po vseh 4 tabelah na obeh straneh, bomo videli, da je bila replikacija uspešna. Lahko pa pošljete zagonsko datoteko v vozlišče store-001 iz corp-000 z naslednjim ukazom.

vm1$> ./symadmin --engine corp-000 reload-node 001

Na tej točki je nov zapis vstavljen v tabelo postavk v bazi podatkov MySQL na vozlišču corp-000 (gostitelj: vm1), vi pa lahko preverite njegovo replikacijo v bazo podatkov PostgreSQL na vozlišču store-001 (gostitelj: vm2). Vidimo operacijo Pull za premikanje 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)

Za izvedbo operacije Push za premik podatkov iz store-001 v corp-000 vstavimo zapis v tabelo sale_transaction in preverimo, ali je podvajanje uspešno.

Rezultat.

Vidimo uspešno nastavitev dvosmerne replikacije vzorčnih tabel med bazama podatkov MySQL in PostgreSQL. Če želite nastaviti podvajanje za nove uporabniške tabele, sledite tem korakom: Ustvarimo na primer tabelo t1 in konfiguriramo njena pravila podvajanja, kot sledi. Na ta način konfiguriramo samo 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)

Konfiguracija je nato obveščena o spremembi sheme, to je dodajanju nove tabele, z uporabo ukaza symadmin z argumentom sync-triggers, ki znova ustvari sprožilce za preslikavo definicij tabel. send-schema se izvede za pošiljanje sprememb sheme v vozlišče store-001 in konfigurirana je replikacija tabele t1.

vm1$> ./symadmin -e corp-000 --node=001 sync-triggers    
vm1$> ./symadmin send-schema -e corp-000 --node=001 t1

Prednosti SymmetricDS

Enostavna namestitev in konfiguracija, vključno z že pripravljenim naborom datotek s parametri za ustvarjanje vezja s tremi ali dvema vozliščema.
Podatkovne baze na več platformah in neodvisnost platforme, vključno s strežniki, prenosniki in mobilnimi napravami.
Podvojite katero koli bazo podatkov v katero koli drugo bazo podatkov lokalno, v omrežju WAN ali v oblaku.
Možnost optimalnega dela z nekaj bazami podatkov ali več tisoč za priročno replikacijo.
Plačljiva različica z GUI in odlično podporo.

Slabosti SymmetricDS

Za nalaganje kataloških tabel morate ročno določiti pravila in smer replikacije v ukazni vrstici prek stavkov SQL, kar je lahko neprijetno.
Nastavitev številnih tabel za replikacijo je lahko dolgočasna, razen če uporabljate skripte za ustvarjanje stavkov SQL, ki določajo pravila in smer replikacije.
V dnevnikih se beleži preveč informacij in včasih je treba dnevniško datoteko pospraviti, da ne zavzame preveč prostora.

Rezultati za SymmetricDS

SymmetricDS vam omogoča nastavitev dvosmernega podvajanja med dvema, tremi ali celo več tisoč vozlišči za podvajanje in sinhronizacijo datotek. To je edinstveno orodje, ki neodvisno izvaja številne naloge, kot so samodejna obnovitev podatkov po dolgem času izpada na vozlišču, varna in učinkovita izmenjava podatkov med vozlišči prek HTTPS, samodejno upravljanje konfliktov na podlagi niza pravil itd. SymmetricDS izvaja podvajanje med poljubnimi bazami podatkov, zato ga je mogoče uporabiti za najrazličnejše scenarije, vključno s selitvijo, selitvijo, distribucijo, filtriranjem in transformacijo podatkov med platformami.

Primer temelji na uradnem hitri vodnik avtor SymmetricDS. IN navodila za uporabo Podrobno opisuje različne koncepte, vključene v nastavitev replikacije s SymmetricDS.

Vir: www.habr.com

Dodaj komentar