Međusobna replikacija između PostgreSQL i MySQL

Međusobna replikacija između PostgreSQL i MySQL

Ukratko ću govoriti o kružnoj replikaciji između PostgreSQL-a i MySQL-a, kao i o metodama postavljanja ove vrste replikacije između ovih dvaju servera baza podataka. Obično se baze podataka u kružnoj replikaciji nazivaju homogennim, a ovo je praktična metoda prelaska s jednog servera relacijske DBMS na drugi.

Baze podataka PostgreSQL i MySQL smatraju se relacijskim, ali uz dodatna proširenja nude mogućnosti NoSQL. Ovdje ćemo raspraviti o replikaciji između PostgreSQL-a i MySQL-a s gledišta relacijskih DBMS-a.

Nećemo opisivati svu unutarnju mehaniku, samo osnovne principe kako biste stekli dojam o postavljanju replikacije između servera baza podataka, prednostima, ograničenjima i scenarijima korištenja.

Obično se replikacija između dva identična servera baza podataka vrši ili u binarnom režimu, ili putem upita između glavnog čvora (izdavača, glavnog ili aktivnog) i podređenog (pretplatnika, čekajućeg ili pasivnog). Cilj replikacije je pružiti u stvarnom vremenu kopiju glavne baze podataka na strani podređenog. Pri tome se podaci šalju od glavnog do podređenog, što znači od aktivnog do pasivnog, jer se replikacija odvija samo u jednom smjeru. Međutim, moguće je postaviti replikaciju između dviju baza podataka u oba smjera, tako da se podaci prenose od podređenog do glavnog u konfiguraciji 'aktivni-aktivni'. Sve ovo, uključujući kaskadnu replikaciju, moguće je između dva ili više identičnih servera baza podataka. Konfiguracija 'aktivni-aktivni' ili 'aktivni-pasivni' ovisi o potrebama, dostupnosti takvih mogućnosti u izvornoj konfiguraciji ili o upotrebi vanjskih rješenja za postavljanje i postojećim kompromisima.

Opisana konfiguracija moguća je između različitih servera baza podataka. Server se može postaviti za primanje replikovanih podataka s drugog servera baza podataka, dok istovremeno čuva snimke replikovanih podataka u stvarnom vremenu. MySQL i PostgreSQL nude većinu ovih konfiguracija sami ili uz pomoć vanjskih proširenja, uključujući metode binarnog dnevnika, zaključenja diska i metode temeljene na operatorima i redovima.

Križna replikacija između MySQL-a i PostgreSQL-a potrebna je za jednokratnu migraciju s jednog servera baze podataka na drugi. Ove baze podataka koriste različite protokole, stoga ih nije moguće izravno povezati. Da bi se uspostavila razmjena podataka, može se koristiti vanjski open-source alat, poput pg_chameleon.

Što je pg_chameleon

pg_chameleon je sustav replikacije iz MySQL-a u PostgreSQL na Pythonu 3. U njemu se koristi open-source biblioteka mysql-replication, također na Pythonu. Redovi se izvode iz MySQL tablica i spremaju kao JSONB objekti u PostgreSQL bazu podataka, a potom se dešifriraju funkcijom pl/pgsql i reproduciraju u PostgreSQL bazi podataka.

Mogućnosti pg_chameleon

Više MySQL shema iz jednog klastera može se replicirati u jednu ciljnu PostgreSQL bazu podataka s konfiguracijom "jedan prema mnogo".
Imena izvorne i ciljne sheme ne mogu se poklapati.
Podaci replikacije mogu se izvući iz kaskadne replikacije MySQL-a.
Tablice koje se ne mogu replicirati ili uzrokuju greške isključuju se.
Svaku funkciju replikacije upravljaju demoni.
Kontrola putem parametara i konfiguracijskih datoteka temeljenih na YAML-u.

Primjer

Poslužitelj
vm1
vm2

Verzija OS-a
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64

Verzija servera Baze Podataka
MySQL 5.7.26
PostgreSQL 10.5

Port Baze Podataka
3306
5433

IP adresa
192.168.56.102
192.168.56.106

Za početak pripremite sve potrebne komponente za instalaciju pg_chameleon. U ovom primjeru je instaliran Python 3.6.8, koji stvara virtualno okruženje i aktivira ga.

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

Nakon uspješne instalacije Python 3.6, potrebno je izvršiti ostale zahtjeve, na primjer, stvoriti i aktivirati virtualno okruženje. Također, pip modul se ažurira na najnoviju verziju i koristi za instalaciju pg_chameleon. U naredbama u nastavku namjerno se instalira pg_chameleon 2.0.9, iako je zadnja verzija 2.0.10. To je potrebno kako bi se izbjegli novi bugovi u ažuriranoj verziji.

$> python3.6 -m venv venv
$> source venv/bin/activate
(venv) $> pip install pip --upgrade
(venv) $> pip install pg_chameleon==2.0.9

Zatim pozivamo pg_chameleon (chameleon je komanda) s argumentom set_configuration_files, kako bismo uključili pg_chameleon i stvorili mape i konfiguracijske datoteke prema zadanim postavkama.

(venv) $> chameleon set_configuration_files
stvaranje direktorija /root/.pg_chameleon
stvaranje direktorija /root/.pg_chameleon/configuration/
stvaranje direktorija /root/.pg_chameleon/logs/
stvaranje direktorija /root/.pg_chameleon/pid/
kopiranje konfiguracije primjera u /root/.pg_chameleon/configuration//config-example.yml

Sada kreiramo kopiju config-example.yml kao default.yml, kako bi postao podrazumijevani konfiguracijski datotek. Primjer konfiguracijske datoteke za ovaj primjer navedeno je u nastavku.

$> 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 omogućuje korisniku da prevari zadanu konverziju tipa u drugu.
type_override:
  "tinyint(1)":
    override_to: boolean
    override_tables:
      - "*"

#postgres destinacijska konekcija
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 #propušta umetanja u tablicu delphis_mediterranea.foo
      delete:
        - delphis_mediterranea #propušta brisanja u shemi delphis_mediterranea
      update:

Konfiguracijska datoteka u ovom primjeru je uzorak datoteke s pg_chameleon s manjim izmjenama u skladu s izvorom i odredištem, a u nastavku je pregled različitih odjeljaka konfiguracijske datoteke.

U konfiguracijskoj datoteci default.yml postoji odjeljak globalnih postavki (global settings), gdje možete upravljati postavkama kao što su lokacija datoteke za zaključavanje, lokacija logova, razdoblje čuvanja logova i slično. Zatim slijedi odjeljak za nadjačavanje tipova (type override), gdje je naveden set pravila za nadjačavanje tipova tijekom replikacije. U zadanom primjeru koristi se pravilo nadjačavanja tipa koje pretvara tinyint(1) u logičku vrijednost. U sljedećem odjeljku navodimo pojedinosti o vezi s odredišnom bazom podataka. U ovom slučaju to je PostgreSQL baza podataka, označena kao pg_conn. U posljednjem odjeljku navodimo podatke o izvoru, tj. parametre veze izvorne baze podataka, shemu mapiranja izvorne i odredišne baze podataka, tablice koje treba preskočiti, vrijeme čekanja, memoriju, veličinu paketa. Primijetite da je "sources" navedeno u množini, što znači da možemo dodati više izvornih baza podataka za jednu odredišnu, kako bismo konfigurirali postavku "više prema jednoj".

Baza podataka world_x u primjeru sadrži 4 tablice s redovima koje zajednica MySQL nudi kao primjer. Može se preuzeti ovdje. Primjer baze podataka dolazi u obliku tar i komprimiranog arhiva s uputama za kreiranje i uvoz redova.

U bazama podataka MySQL i PostgreSQL stvara se poseban korisnik istog imena usr_replica. U MySQL-u mu se dodjeljuju dodatna prava za čitanje svih replikiranih tablica.

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 stvara se baza podataka db_replica koja će primati promjene iz baze podataka MySQL. Korisnik usr_replica u PostgreSQL-u automatski se postavlja kao vlasnik dviju shema pgworld_x i sch_chameleon, koje sadrže replikirane tablice i tablice s katalogom replikacije. Automatska konfiguracija provodi se putem argumenta create_replica_schema, kako ćete vidjeti u nastavku.

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

Baza podataka MySQL postavlja se s promjenama nekih parametara kako bi se pripremila za replikaciju, kao što je prikazano u nastavku. Bit će potrebno ponovno pokrenuti poslužitelj baza podataka kako bi promjene stupile na snagu.

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

Sada je važno provjeriti vezu s oba poslužitelja baza podataka kako bi se izbjegli problemi prilikom izvršavanja naredbi pg_chameleon.

Na čvorištu PostgreSQL:

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

Na čvorištu MySQL:

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

Sljedeće tri naredbe pg_chameleon (chameleon) pripremaju okruženje, dodaju izvor i inicijaliziraju replikaciju. Argument create_replica_schema u pg_chameleon stvara zadanu shemu (sch_chameleon) i shemu replikacije (pgworld_x) u bazi podataka PostgreSQL, kao što smo spomenuli. Argument add_source dodaje izvornu bazu podataka u konfiguraciju, čitajući konfiguracijski datoteku (default.yml), a u našem slučaju to je mysql, dok init_replica inicijalizira konfiguraciju na temelju parametara u konfiguracijskoj datoteci.

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

Izlaz ovih triju komandi očito ukazuje na njihovo uspješno izvršavanje. Svi nedostaci ili sintaktičke greške su navedeni u jasnim i razumljivim porukama sa savjetima za rješavanje problema.

Na kraju, pokrenimo replikaciju s pomoću start_replica i dobit ćemo poruku o uspješnom izvršavanju.

$> chameleon start_replica --config default --source mysql 
izlaz: Pokretanje procesa replikacije za izvor mysql

Status replikacije može se zatražiti pomoću argumenta show_status, a greške se mogu pregledati pomoću argumenta show_errors.

Rezultat.

Kao što smo već rekli, svaku funkciju replikacije upravljaju demoni. Da bismo ih prikazali, zatražimo tabelu procesa komandom Linux ps, kao što je prikazano ispod.

Rezultat.

Replikacija se ne smatra postavljenom dok je ne testiramo u stvarnom vremenu, kao što je prikazano ispod. Kreiramo tabelu, umetnemo nekoliko zapisa u MySQL bazu podataka i pozivamo argument sync_tables u pg_chameleon, kako bismo ažurirali demone i replikovali tabelu s zapisima u PostgreSQL bazu podataka.

mysql> create table t1 (n1 int primary key, n2 varchar(10));
Upit OK, 0 redova pogođeno (0.01 sec)
mysql> insert into t1 values (1,'one');
Upit OK, 1 red pogođen (0.00 sec)
mysql> insert into t1 values (2,'two');
Upit OK, 1 red pogođen (0.00 sec)

$> chameleon sync_tables --tables world_x.t1 --config default --source mysql
Proces sinhronizacije tabela za izvor mysql započet.

Da bismo potvrdili rezultate testa, zatražimo tabelu iz PostgreSQL baze podataka i ispišemo redove.

$> psql -p 5433 -U usr_replica -d db_replica -c "select * from pgworld_x.t1";
 n1 |  n2
----+-------
  1 | one
  2 | two

Ako vršimo migraciju, sljedeće komande pg_chameleon će je završiti. Komande treba izvesti nakon što se uvjerimo da su svi redovi ciljnih tabela replikovani, a rezultat će biti uredno prenesena PostgreSQL baza podataka bez referenci na izvoru baze podataka ili shemu replikacije (sch_chameleon).

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

Ako želite, sljedećim komandama možete izbrisati izvorne konfiguracije i shemu replikacije.

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

Prednosti pg_chameleon

Jednostavna postavka i konfiguracija.
Jednostavno otklanjanje grešaka i otkrivanje anomalija s jasnim porukama o greškama.
U replikaciju se mogu dodati dodatne posebne tabele nakon inicijalizacije, bez promjene ostale konfiguracije.
Možete postaviti nekoliko izvorišnih baza podataka za jednu ciljnu, što je vrlo korisno ako kombinirate podatke iz jedne ili više MySQL baza podataka u jednoj PostgreSQL bazi podataka.
Odabrane tablice se mogu izostaviti iz replikacije.

Mane pg_chameleon

Podržava se samo s MySQL 5.5 i novijim kao izvorom i PostgreSQL 9.5 i novijim kao ciljanom bazom podataka.
Svaka tablica mora imati primarni ili jedinstveni ključ, inače se tablice inicijaliziraju tijekom procesa init_replica, ali se ne replikiraju.
Jednosmjerna replikacija — samo iz MySQL u PostgreSQL. Stoga je pogodna samo za shemu 'aktivni-pasivni'.
Izvorna može biti samo MySQL baza podataka, a podrška PostgreSQL baze podataka kao izvora je samo eksperimentalna i s ograničenjima (saznajte više ovdje)

Zaključci o pg_chameleon

Metoda replikacije u pg_chameleon je odlična za migraciju baze podataka iz MySQL u PostgreSQL. Značajan nedostatak je to što je replikacija samo jednosmjerna, stoga stručnjaci za baze podataka vjerojatno neće htjeti koristiti to za nešto osim migracije. Međutim, problem jednosmjerne replikacije može se riješiti još jednim open-source alatom — SymmetricDS.

Više informacija pročitajte u službenoj dokumentaciji ovdje. Uputstvo za komandnu liniju možete pronaći ovdje.

Pregled SymmetricDS

SymmetricDS je open-source alat koji replicira bilo koju bazu podataka u bilo koju drugu uobičajenu bazu podataka: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird i druge cloud instance baza podataka, kao što su Redshift i Azure itd. Dostupne funkcije: sinhronizacija baza podataka i datoteka, replikacija više vodećih baza podataka, filtrirana sinhronizacija, transformacija i druge. To je alat na Javi i potrebna je standardna verzija JRE ili JDK (verzije 8.0 ili novije). Ovdje je moguće zabilježiti promjene podataka putem okidača u izvornoj bazi podataka i usmjeriti ih u odgovarajuću ciljnu bazu podataka u obliku paketa.

Mogućnosti SymmetricDS

Alat je neovisan o platformi, što znači da dvije ili više različitih baza podataka mogu razmjenjivati podatke.
Relacijske baze podataka se sinhroniziraju putem zabilježavanja promjena podataka, dok se datotečne baze sinhroniziraju putem sinhronizacije datoteka.
Dvostruka replikacija koristeći Push i Pull metode na temelju skupa pravila.
Prijenos podataka moguć je putem zaštićenih mreža i mreža s niskom propusnošću.
Automatsko obnavljanje pri ponovnom pokretanju čvorova nakon kvara i automatsko rješavanje sukoba.
Kompatibilnost s oblakom i učinkoviti API proširenja.

Primjer

SymmetricDS se može konfigurirati na jedan od dva načina:
Vodeći (nadređeni) čvor, koji centralno koordinira replikaciju podataka između dva podređena čvora, dok se razmjena podataka između podređenih čvorova odvija samo kroz nadređeni.
Aktivni čvor (čvor 1) može razmjenjivati podatke za replikaciju s drugim aktivnim čvorom (čvor 2) bez posrednika.

U oba slučaja razmjena podataka odvija se putem Push i Pull. U ovom primjeru razmotrit ćemo konfiguraciju „aktivni-aktivni“. Opisivanje cijele arhitekture dovoljno je dugo, pa istražite priručnik, kako biste saznali više o radu SymmetricDS.

Instalacija SymmetricDS vrlo je jednostavna: preuzmite open-source verziju zip datoteke odavde i raspakirajte je gdje god želite. U donjoj tablici nalaze se informacije o mjestu instalacije i verziji SymmetricDS u ovom primjeru, kao i verzije baza podataka, verzije Linuxa, IP adrese i portovi za oba čvora.

Poslužitelj
vm1
vm2

Verzija OS-a
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64

Verzija servera Baze Podataka
MySQL 5.7.26
PostgreSQL 10.5

Port Baze Podataka
3306
5832

IP adresa
192.168.1.107
192.168.1.112

Verzija SymmetricDS
SymmetricDS 3.9
SymmetricDS 3.9

Put instalacije SymmetricDS
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20

Ime čvora SymmetricDS
corp-000
store-001

Ovdje instaliramo SymmetricDS u /usr/local/symmetric-server-3.9.20, a tu će biti pohranjeni različiti ugniježdeni direktoriji i datoteke. Zanimaju nas ugniježdeni direktoriji samples i engines. U direktoriju samples nalaze se primjeri konfiguracijskih datoteka s svojstvima čvora, kao i primjeri SQL skripti za brzi početak prikazivanja.

U direktoriju samples vidimo tri konfiguracijske datoteke s svojstvima čvora — ime pokazuje karakter čvora u određenoj shemi.

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

U SymmetricDS postoje sve potrebne konfiguracijske datoteke za osnovnu shemu od 3 čvora (varijanta 1), a iste datoteke mogu se koristiti za shemu od 2 čvora (varijanta 2). Kopiramo potrebnu konfiguracijsku datoteku iz direktorija samples u engines na hostu vm1. Izgleda ovako:

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

Ovaj čvor u konfiguraciji SymmetricDS naziva se corp-000, a povezivanje s bazom podataka obrađuje se putem MySQL JDBC drajvera, koji koristi prethodno navedenu konekcijsku stranicu i podatke za prijavu. Povezujemo se s bazom podataka replica_db, a tokom kreiranja šeme biće kreirane tabele. sync.url pokazuje mesto veze s čvorom za sinhronizaciju.

Čvor 2 na hostu vm2 postavlja se kao store-001, dok je ostalo navedeno u datoteci node.properties, koja je navedena u nastavku. Čvor store-001 koristi PostgreSQL bazu podataka, a pgdb_replica je baza podataka za replikaciju. registration.url omogućava hostu vm2 da se poveže s hostom vm1 i dobije detalje konfiguracije.

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

Završni primer SymmetricDS sadrži parametre za postavljanje dvosmerne replikacije između dva servera baze podataka (dva čvora). Navedeni koraci izvršavaju se na hostu vm1 (corp-000), koji će stvoriti primer šeme sa 4 tabele. Zatim, izvršavanje create-sym-tables komandom symadmin kreira tabele kataloga, gde će se skladištiti pravila i pravac replikacije između čvorova. Na kraju, u tabele se učitavaju primer podaci.

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

U primeru, tabele item i item_selling_price automatski su postavljene za replikaciju iz corp-000 u store-001, dok su tabele sale (sale_transaction i sale_return_line_item) automatski postavljene za replikaciju iz store-001 u corp-000. Sada kreiramo šemu u PostgreSQL bazi podataka na hostu vm2 (store-001) kako bismo je pripremili za prijem podataka iz corp-000.

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

Obavezno proveravamo da li na MySQL bazi podataka na vm1 postoje primeri tabela i tabele kataloga SymmetricDS. Napomena: sistemske tabele SymmetricDS (s prefiksom sym_) trenutno su dostupne samo na čvoru corp-000, jer smo tamo izvršili komandu create-sym-tables i upravljamo replikacijom. A još, na bazi podataka na čvoru store-001 biće samo 4 tabele primera bez podataka.

Sve. Okruženje je spremno za pokretanje serverskih procesa sym na oba čvora, kao što je prikazano u nastavku.

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

Zapisi logova se šalju u datoteku pozadinskog loga (symmetric.log) u mapi logova unutar direktorija u kojem je instaliran SymmetricDS, kao i u standardni izlaz. Server sym se sada može pokrenuti na čvoru store-001.

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

Ako pokrenete serverski proces sym na hostu vm2, on će stvoriti tablice direktorija SymmetricDS i u bazi podataka PostgreSQL. Ako se serverski proces sym pokrene na oba čvora, ona će se usklađivati između sebe kako bi replikacije podataka s corp-000 na store-001. Ako nakon nekoliko sekundi zatražimo sve 4 tablice s obje strane, vidjet ćemo da je replikacija uspješno izvršena. Također možemo poslati početno učitavanje na čvor store-001 iz corp-000 sljedećom naredbom.

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

U ovoj fazi u tablicu item u bazi podataka MySQL na čvoru corp-000 (host: vm1) unosi se nova stavka, a možemo provjeriti njezinu replikaciju u bazi podataka PostgreSQL na čvoru store-001 (host: vm2). Vidimo operaciju Pull za prijenos podataka iz corp-000 u 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 bismo izvršili operaciju Push za premještanje podataka iz store-001 u corp-000, umetnemo stavku u tablicu sale_transaction i provjerimo je li replikacija uspješno izvršena.

Rezultat.

Vidimo uspješnu postavku dvosmjerne replikacije tablica između baza podataka MySQL i PostgreSQL. Da bismo postavili replikaciju za nove korisničke tablice, izvodimo sljedeće korake. Stvaramo tablicu t1 kao primjer i postavljamo pravila njene replikacije na sljedeći način. Tako postavljamo samo replikaciju iz corp-000 u 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)

Zatim konfiguracija dobiva obavijest o promjeni sheme, tj. dodavanju nove tablice, putem veze symadmin s argumentom sync-triggers, koja ponovno stvara okidače za usklađivanje definicija tablica. Izvodi 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 t1

Prednosti SymmetricDS

Jednostavna instalacija i konfiguracija, uključujući spreman paket datoteka s postavkama za stvaranje sheme s tri ili dva čvora.
Kros-platforme baze podataka i neovisnost o platformi, uključujući poslužitelje, prijenosna računala 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 nekoliko tisuća za jednostavnu replikaciju.
Plaćena verzija s grafičkim sučeljem i odličnom podrškom.

Nedostaci SymmetricDS

Ručno utvrđivanje u naredbenom retku pravila i smjera replikacije kroz SQL operatore za učitavanje tablica kataloga može biti nezgodno.
Postavljanje mnogih tablica za replikaciju može biti zamorno, ako ne koristite skripte za kreiranje SQL operatora koji definiraju pravila i smjer replikacije.
U logove se upisuje previše informacija, a ponekad je potrebno sređivati datoteku s logom kako ne bi zauzimala previše prostora.

Zaključci o SymmetricDS

SymmetricDS omogućuje dvostranu replikaciju između dva, tri pa čak i nekoliko tisuća čvorova kako bi izvodio replikaciju i sinkronizirao datoteke. To je jedinstveni alat koji automatski obavlja mnoge zadatke, poput automatske obnove podataka nakon dugog zastoja na čvoru, sigurnu i učinkovitu razmjenu podataka između čvorova putem HTTPS-a, automatsko upravljanje konfliktima temeljenim na skupu pravila itd. SymmetricDS izvodi replikaciju između svih baza podataka, pa se može koristiti za najrazličitije scenarije, uključujući migraciju, prijelaz na novu verziju, distribuciju, filtriranje i transformaciju podataka na različitim platformama.

Primjer je izrađen na osnovu službenog kratkog vodiča za SymmetricDS. U korisničkom uputstvu detaljno su opisani različiti pojmovi vezani uz postavljanje replikacije putem SymmetricDS-a.

Izvor: habr.com

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