Unakrsna replikacija između PostgreSQL i MySQL

Unakrsna replikacija između PostgreSQL i MySQL

Navest ću unakrsnu replikaciju između PostgreSQL-a i MySQL-a, kao i metode za postavljanje unakrsne replikacije između dva poslužitelja baze podataka. Obično se unakrsno replicirane baze podataka nazivaju homogenima i to je prikladna metoda prelaska s jednog RDBMS poslužitelja na drugi.

PostgreSQL i MySQL baze podataka općenito se smatraju relacijskim, ali s dodatnim proširenjima nude NoSQL mogućnosti. Ovdje ćemo raspravljati o replikaciji između PostgreSQL-a i MySQL-a iz perspektive relacijskog DBMS-a.

Nećemo opisivati ​​cijeli unutarnji rad, samo osnovne principe kako biste dobili ideju o konfiguraciji replikacije između poslužitelja baze podataka, prednosti, ograničenja i slučajeve korištenja.

Tipično, replikacija između dva identična poslužitelja baze podataka obavlja se ili u binarnom načinu ili korištenjem upita između glavnog (tj. izdavača, glavnog ili aktivnog) i podređenog (pretplatnika, pripravnog ili pasivnog). Svrha replikacije je osigurati kopiju glavne baze podataka u stvarnom vremenu na podređenoj strani. U ovom slučaju podaci se prenose od mastera do slavea, odnosno od aktivnog do pasivnog, jer se replikacija vrši samo u jednom smjeru. Ali možete postaviti replikaciju između dvije baze podataka u oba smjera, tako da se podaci prenose od podređene do glavne u konfiguraciji aktivno-aktivno. Sve ovo, uključujući kaskadno repliciranje, moguće je između dva ili više identičnih poslužitelja baze podataka.Aktivno-aktivno ili aktivno-pasivno konfiguriranje ovisi o potrebi, dostupnosti takvih mogućnosti u početnoj konfiguraciji ili korištenju vanjskih konfiguracijskih rješenja i postojećim kompromisima.

Opisana konfiguracija moguća je između različitih poslužitelja baze podataka. Poslužitelj se može konfigurirati za prihvaćanje repliciranih podataka s drugog poslužitelja baze podataka i dalje održavati snimke repliciranih podataka u stvarnom vremenu. MySQL i PostgreSQL nude većinu ovih konfiguracija unutar kuće ili putem proširenja trećih strana, uključujući metode binarnog dnevnika, zaključavanje diska i metode temeljene na izjavama i redovima.

Unakrsna replikacija između MySQL i PostgreSQL potrebna je za jednokratnu migraciju s jednog poslužitelja baze podataka na drugi. Ove baze podataka koriste različite protokole, pa ih nije moguće izravno povezati. Za uspostavljanje razmjene podataka možete koristiti vanjski alat otvorenog koda, na primjer pg_chameleon.

Što je pg_chameleon

pg_chameleon je sustav replikacije iz MySQL-a u PostgreSQL u Pythonu 3. Koristi biblioteku otvorenog koda za replikaciju mysql, također u Pythonu. Slike redaka izvlače se iz MySQL tablica i pohranjuju kao JSONB objekti u PostgreSQL bazi podataka, a zatim dekriptiraju pomoću funkcije pl/pgsql i reproduciraju u PostgreSQL bazi podataka.

Značajke pg_chameleon

Više MySQL shema iz istog klastera može se replicirati u jednu ciljanu PostgreSQL bazu podataka u konfiguraciji jedan prema više
Nazivi izvorne i ciljne sheme ne mogu biti isti.
Podaci replikacije mogu se dohvatiti iz kaskadne MySQL replike.
Isključene su tablice koje se ne mogu replicirati ili stvarati pogreške.
Svaku funkciju replikacije kontroliraju demoni.
Kontrola putem parametara i konfiguracijskih datoteka temeljenih na YAML-u.

Primjer

domaćin
vm1
vm2

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

verzija DB poslužitelja
MySQL 5.7.26
PostgreSQL 10.5

DB priključak
3306
5433

IP adresa
192.168.56.102
192.168.56.106

Za početak pripremite sve potrebne komponente za instalaciju pg_chameleona. Ovaj primjer instalira Python 3.6.8, koji stvara i aktivira virtualno okruženje.

$> 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 Python3.6, morate ispuniti preostale zahtjeve, kao što je stvaranje i aktiviranje virtualnog okruženja. Osim toga, pip modul se ažurira na najnoviju verziju i koristi se za instaliranje pg_chameleona. Naredbe ispod namjerno instaliraju pg_chameleon 2.0.9, iako je posljednja verzija 2.0.10. Ovo je neophodno kako bi se izbjegle nove pogreške 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 naredba) s argumentom set_configuration_files kako bismo omogućili pg_chameleon i stvorili zadane direktorije i 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

Sada stvaramo kopiju config-example.yml kao default.yml tako da ona postane zadana konfiguracijska datoteka. Primjer konfiguracijske datoteke za ovaj primjer nalazi se 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 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 u ovom primjeru je ogledna datoteka pg_chameleon s manjim izmjenama kako bi odgovarala izvornom i ciljnom okruženju, a ispod je pregled različitih odjeljaka konfiguracijske datoteke.

U konfiguracijskoj datoteci default.yml postoji odjeljak globalnih postavki, gdje možete upravljati postavkama kao što su lokacija zaključane datoteke, lokacija zapisa, razdoblje pohrane za zapisnike, itd. Slijedi odjeljak nadjačavanja tipa, gdje skup pravila za nadjačavanje tipova tijekom replikacije. U primjeru je zadano pravilo nadjačavanja tipa koje pretvara tinyint(1) u Booleovu vrijednost. U sljedećem odjeljku navodimo pojedinosti povezivanja s ciljnom bazom podataka. U našem slučaju, ovo je PostgreSQL baza podataka, označena kao pg_conn. U posljednjem odjeljku navodimo izvorne podatke, odnosno parametre veze izvorne baze podataka, shemu mapiranja između izvorne i ciljne baze podataka, tablice koje je potrebno preskočiti, vrijeme čekanja, memoriju, veličinu paketa. Imajte na umu da je "izvori" množina, što znači da možemo dodati više izvornih baza podataka jednoj ciljnoj bazi podataka kako bismo postavili konfiguraciju više-na-jedan.

Primjer baze podataka world_x sadrži 4 tablice s redovima koje MySQL zajednica nudi kao primjere. Može se preuzeti здесь. Ogled baze podataka dolazi kao tar i komprimirana arhiva s uputama za stvaranje i uvoz redaka.

U MySQL i PostgreSQL bazama podataka kreira se poseban korisnik s istim imenom usr_replica. U MySQL-u su mu dana dodatna prava čitanja za sve replicirane tablice.

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-a stvara se db_replica baza podataka koja će prihvatiti promjene iz MySQL baze podataka. Korisnik usr_replica u PostgreSQL-u automatski se konfigurira kao vlasnik dviju shema, pgworld_x i sch_chameleon, koje sadrže stvarne replicirane tablice odnosno tablice direktorija replikacije. Argument create_replica_schema odgovoran je za automatsku konfiguraciju, kao što ć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

MySQL baza podataka je konfigurirana s nekim promjenama parametara kako bi se pripremila za replikaciju kao što je prikazano u nastavku. Morat ćete ponovno pokrenuti poslužitelj baze 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 baze podataka kako ne bi bilo problema prilikom izvođenja naredbi pg_chameleon.

Na PostgreSQL čvoru:

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

Na MySQL čvoru:

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

Sljedeće tri naredbe pg_chameleon (kameleon) pripremaju okruženje, dodaju izvor i inicijaliziraju repliku. Argument create_replica_schema za pg_chameleon stvara zadanu shemu (sch_chameleon) i replikacijsku shemu (pgworld_x) u PostgreSQL bazi podataka, kao što smo već spomenuli. Argument add_source dodaje izvornu bazu podataka konfiguraciji čitanjem konfiguracijske datoteke (default.yml), a u našem slučaju to je mysql, a 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 ove tri naredbe jasno pokazuje da su uspješno izvršene. Sva rušenja ili pogreške u sintaksi prijavljuju se jednostavnim, jasnim porukama s savjetima o tome kako riješiti problem.

Konačno, pokrećemo replikaciju koristeći start_replica i primamo poruku o uspješnosti.

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

Status replikacije može se upitati pomoću argumenta show_status, a pogreške se mogu pregledati pomoću argumenta show_errors.

Rezultat.

Kao što smo već rekli, svaku funkciju replikacije kontroliraju demoni. Da bismo ih vidjeli, postavljamo upit tablici procesa s Linux ps naredbom, kao što je prikazano u nastavku.

Rezultat.

Replikacija se ne smatra konfiguriranom dok je ne testiramo u stvarnom vremenu, kao što je prikazano u nastavku. Stvorimo tablicu, umetnemo nekoliko zapisa u MySQL bazu podataka i pozovemo argument sync_tables u pg_chameleonu da ažuriramo demone i repliciramo tablicu sa zapisima u PostgreSQL bazu podataka.

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.

Kako bismo potvrdili rezultate testa, postavljamo upit tablici iz PostgreSQL baze podataka i ispisujemo retke.

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

Ako radimo migraciju, sljedeće pg_chameleon naredbe će biti kraj toga. Naredbe je potrebno izvršiti nakon što smo sigurni da su retci svih ciljnih tablica replicirani, a rezultat će biti uredno migrirana PostgreSQL baza podataka bez referenci na izvornu bazu podataka ili shemu replikacije (sch_chameleon).

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

Ako želite, možete koristiti sljedeće naredbe za brisanje izvorne konfiguracije i sheme replikacije.

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

Prednosti pg_chameleon

Jednostavno postavljanje i konfiguracija.
Jednostavno otklonite probleme i identificirajte anomalije s jasnim porukama o pogreškama.
Dodatne posebne tablice mogu se dodati replikaciji nakon inicijalizacije bez mijenjanja ostatka konfiguracije.
Moguće je konfigurirati više izvornih baza podataka za jednu ciljanu bazu podataka, a to je vrlo korisno ako kombinirate podatke iz jedne ili više MySQL baza podataka u jednu PostgreSQL bazu podataka.
Ne morate replicirati odabrane tablice.

Nedostaci pg_chameleon

Podržano samo s MySQL 5.5 i novijim kao izvorom i PostgreSQL 9.5 i novijim kao ciljnom bazom podataka.
Svaka tablica mora imati primarni ili jedinstveni ključ, inače se tablice inicijaliziraju tijekom procesa init_replica, ali se ne repliciraju.
Jednosmjerna replikacija - samo iz MySQL u PostgreSQL. Stoga je prikladan samo za "aktivno-pasivni" krug.
Izvor može biti samo MySQL baza podataka, a podrška za PostgreSQL bazu podataka kao izvor samo je eksperimentalna i s ograničenjima (saznajte više здесь)

Rezultati za pg_chameleon

Metoda replikacije u pg_chameleon izvrsna je za migraciju baze podataka s MySQL na PostgreSQL. Značajan nedostatak je to što je replikacija samo jednosmjerna, pa je malo vjerojatno da će je stručnjaci za baze podataka htjeti koristiti za bilo što drugo osim za migraciju. Ali problem jednosmjerne replikacije može se riješiti s drugim alatom otvorenog koda - SymmetricDS.

Više pročitajte u službenoj dokumentaciji здесь. Pomoć za naredbeni redak može se pronaći здесь.

Pregled SymmetricDS-a

SymmetricDS je alat otvorenog koda 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 instance baze podataka u oblaku, npr. Redshift i Azure, itd. Dostupne značajke: sinkronizacija baze podataka i datoteka, višeglavna replikacija baze podataka, filtrirana sinkronizacija, transformacija i druge. Ovo je Java alat i zahtijeva standardno izdanje JRE ili JDK (verzija 8.0 ili novija). Ovdje se promjene podataka u okidačima u izvornoj bazi podataka mogu zabilježiti i poslati u odgovarajuću ciljnu bazu podataka u obliku serija.

Značajke SymmetricDS

Alat je neovisan o platformi, što znači da dvije ili više različitih baza podataka mogu razmjenjivati ​​podatke.
Relacijske baze podataka sinkroniziraju se pomoću zapisa o promjeni podataka, dok baze podataka koje se temelje na datotečnom sustavu koriste sinkronizaciju datoteka.
Dvosmjerna replikacija korištenjem metoda Push i Pull na temelju skupa pravila.
Prijenos podataka moguć je preko sigurnih mreža niske propusnosti.
Automatski oporavak kada čvorovi nastave s radom nakon kvara i automatsko rješavanje sukoba.
Snažni API-ji proširenja kompatibilni s oblakom.

Primjer

SymmetricDS se može konfigurirati u jednoj od dvije opcije:
Glavni (roditeljski) čvor koji centralno koordinira replikaciju podataka između dva slave (djeteta) čvora, a komunikacija između podređenih čvorova odvija se samo preko roditelja.
Aktivni čvor (čvor 1) može komunicirati radi replikacije s drugim aktivnim čvorom (čvor 2) bez posrednika.

U obje opcije, razmjena podataka se odvija pomoću Push i Pull. U ovom primjeru razmotrit ćemo konfiguraciju aktivno-aktivno. Predugo bi trebalo opisati cijelu arhitekturu, stoga istražite. rukovodstvokako biste saznali više o uređaju SymmetricDS.

Instalacija SymmetricDS-a vrlo je jednostavna: preuzmite open source verziju zip datoteke stoga i izvadite ga gdje god želite. Tablica ispod pruža informacije o mjestu instalacije i verziji SymmetricDS-a u ovom primjeru, kao i verzijama baze podataka, verzijama Linuxa, IP adresama i portovima za oba čvora.

domaćin
vm1
vm2

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

verzija DB poslužitelja
MySQL 5.7.26
PostgreSQL 10.5

DB priključak
3306
5832

IP adresa
192.168.1.107
192.168.1.112

Verzija SymmetricDS
SymmetricDS 3.9
SymmetricDS 3.9

Instalacijski put SymmetricDS
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20

Ime SymmetricDS čvora
corp-000
trgovina-001

Ovdje instaliramo SymmetricDS u /usr/local/symmetric-server-3.9.20, i tamo će biti pohranjeni razni poddirektoriji i datoteke. Zanimaju nas poddirektoriji uzoraka i motora. Direktorij uzoraka sadrži primjere konfiguracijskih datoteka sa svojstvima čvorova, kao i primjere SQL skripti za brzi početak.

U direktoriju uzoraka vidimo tri konfiguracijske datoteke sa svojstvima čvora - naziv pokazuje prirodu čvora u određenoj shemi.

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

SymmetricDS ima sve potrebne konfiguracijske datoteke za osnovni dizajn s 3 čvora (opcija 1), a iste se datoteke mogu koristiti za dizajn s 2 čvora (opcija 2). Kopirajte potrebnu konfiguracijsku datoteku iz direktorija uzoraka u motore na hostu vm1. Ispada 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 SymmetricDS konfiguraciji naziva se corp-000, a vezom baze podataka rukuje upravljački program mysql jdbc, koji koristi gornji niz veze i vjerodajnice za prijavu. Spajamo se na replica_db bazu podataka i tablice će se kreirati tijekom izrade sheme. sync.url pokazuje gdje kontaktirati čvor za sinkronizaciju.

Čvor 2 na glavnom računalu vm2 konfiguriran je kao store-001, a ostatak je naveden u datoteci node.properties u nastavku. Node store-001 pokreće PostgreSQL bazu podataka, a pgdb_replica je replikacijska baza podataka. registration.url omogućuje hostu vm2 da kontaktira host vm1 i primi detalje konfiguracije od njega.

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

Dovršeni SymmetricDS primjer sadrži parametre za postavljanje dvosmjerne replikacije između dva poslužitelja baze podataka (dva čvora). Koraci u nastavku izvode se na hostu vm1 (corp-000), koji će stvoriti primjer sheme s 4 tablice. Zatim izvođenjem create-sym-tables s naredbom symadmin stvaraju se tablice direktorija u kojima će biti pohranjena pravila i smjer replikacije između čvorova. Na kraju se uzorci podataka učitavaju u tablice.

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 primjeru, tablice item i item_selling_price automatski su konfigurirane za replikaciju iz corp-000 u store-001, a tablice prodaje (sale_transaction i sale_return_line_item) automatski su konfigurirane za replikaciju iz store-001 u corp-000. Sada stvaramo shemu u PostgreSQL bazi podataka na hostu vm2 (store-001) kako bismo je pripremili za primanje podataka od corp-000.

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

Obavezno provjerite ima li MySQL baza podataka na vm1 tablice primjera i tablice kataloga SymmetricDS. Imajte na umu da su sistemske tablice SymmetricDS (s prefiksom sym_) trenutno dostupne samo na čvoru corp-000 jer smo tamo pokrenuli naredbu create-sym-tables i tamo ćemo upravljati replikacijom. A u bazi podataka na čvoru store-001 postojat će samo 4 primjerne tablice bez podataka.

Svi. Okruženje je spremno za pokretanje procesa sym poslužitelja na oba čvora kao što je prikazano u nastavku.

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

Unosi dnevnika šalju se u pozadinsku datoteku dnevnika (symmetric.log) u mapi zapisnika u direktoriju gdje je instaliran SymmetricDS, kao i na standardni izlaz. Sym poslužitelj 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 proces poslužitelja sym na glavnom računalu vm2, on će također stvoriti tablice kataloga SymmetricDS u bazi podataka PostgreSQL. Ako pokrenete proces sym poslužitelja na oba čvora, oni će međusobno koordinirati kako bi replicirali podatke iz corp-000 u store-001. Ako nakon nekoliko sekundi postavimo upit u sve 4 tablice s obje strane, vidjet ćemo da je replikacija bila uspješna. Ili možete poslati bootstrap na čvor store-001 iz corp-000 sa sljedećom naredbom.

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

U ovom se trenutku novi zapis umeće u tablicu stavki u MySQL bazi podataka na čvoru corp-000 (domaćin: vm1), a možete provjeriti njegovu replikaciju u PostgreSQL bazi podataka na čvoru store-001 (domaćin: vm2). Vidimo operaciju povlačenja za premještanje 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 Push operaciju za premještanje podataka iz store-001 u corp-000, umećemo zapis u tablicu sale_transaction i provjeravamo je li replikacija uspješna.

Rezultat.

Vidimo uspješno postavljanje dvosmjerne replikacije primjera tablica između MySQL i PostgreSQL baza podataka. Za postavljanje replikacije za nove korisničke tablice, slijedite ove korake: Na primjer, kreiramo tablicu t1 i konfiguriramo njena pravila replikacije na sljedeći način. Na ovaj način konfiguriramo samo replikaciju od corp-000 do 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 zatim obaviještena o promjeni sheme, odnosno dodavanju nove tablice, pomoću naredbe symadmin s argumentom sync-triggers, koji ponovno stvara okidače za mapiranje definicija tablice. send-schema se izvršava za slanje promjena sheme u čvor store-001, a replikacija tablice t1 je konfigurirana.

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

Prednosti SymmetricDS-a

Jednostavna instalacija i konfiguracija, uključujući gotov set datoteka s parametrima za stvaranje kruga s tri ili dva čvora.
Višeplatformske baze podataka i neovisnost o platformi, uključujući poslužitelje, prijenosna računala i mobilne uređaje.
Replicirajte bilo koju bazu podataka u bilo koju drugu bazu podataka lokalno, na WAN-u ili u oblaku.
Mogućnost optimalnog rada s nekoliko baza podataka ili nekoliko tisuća za praktičnu replikaciju.
Plaćena verzija s GUI i izvrsnom podrškom.

Nedostaci SymmetricDS-a

Morate ručno definirati pravila i smjer replikacije na naredbenom retku putem SQL naredbi za učitavanje kataloških tablica, što može biti nezgodno.
Postavljanje mnogih tablica za replikaciju može biti zamorno osim ako ne koristite skripte za stvaranje SQL naredbi koje definiraju pravila i smjer replikacije.
U zapisnicima se bilježi previše informacija, a ponekad je potrebno srediti zapisnik kako ne bi zauzimao previše prostora.

Rezultati za SymmetricDS

SymmetricDS vam omogućuje postavljanje dvosmjerne replikacije između dva, tri ili čak nekoliko tisuća čvorova za repliciranje i sinkronizaciju datoteka. Ovo je jedinstveni alat koji samostalno obavlja mnoge zadatke, poput automatskog oporavka podataka nakon dugog razdoblja zastoja na čvoru, sigurne i učinkovite razmjene podataka između čvorova putem HTTPS-a, automatskog upravljanja sukobima na temelju skupa pravila itd. SymmetricDS izvodi replikacija između bilo koje baze podataka, stoga se može koristiti za širok raspon scenarija, uključujući migraciju, migraciju, distribuciju, filtriranje i transformaciju podataka preko platformi.

Primjer se temelji na službenom brzi vodič od SymmetricDS. U Korisnički priručnik Detaljno opisuje različite koncepte uključene u postavljanje replikacije sa SymmetricDS.

Izvor: www.habr.com

Dodajte komentar