
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 altinstallNakon 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.9Zatim 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.ymlSada 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 . 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 DATABASEBaza 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 = 1Sada 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_xNa čvorištu MySQL:
$> psql -p 5433 -U usr_replica -h 192.168.56.106 db_replicaSljedeć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 --debugIzlaz 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 mysqlStatus replikacije može se zatražiti pomoću argumenta show_status, a greške se mogu pregledati pomoću argumenta show_errors.
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.
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 | twoAko 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 --debugAko ž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 --debugPrednosti 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 )
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 . Uputstvo za komandnu liniju možete pronaći .
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 , kako biste saznali više o radu SymmetricDS.
Instalacija SymmetricDS vrlo je jednostavna: preuzmite open-source verziju zip datoteke 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.propertiesU 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=000Ovaj č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=001Završ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.sqlU 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.xmlObavezno 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 001U 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.
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 t1Prednosti 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 za SymmetricDS. U detaljno su opisani različiti pojmovi vezani uz postavljanje replikacije putem SymmetricDS-a.
Izvor: habr.com
