Ukuphindaphinda okuphambene phakathi kwe-PostgreSQL ne-MySQL

Ukuphindaphinda okuphambene phakathi kwe-PostgreSQL ne-MySQL

Ngizobeka ukuphindaphinda okuphambene phakathi kwe-PostgreSQL ne-MySQL, kanye nezindlela zokusetha ukuphindaphinda phakathi kwamaseva amabili esizindalwazi. Imvamisa, imininingwane yolwazi ephindaphindwe kaningi ibizwa ngokuthi i-homogeneous, futhi iyindlela elula yokusuka kuseva eyodwa ye-RDBMS iye kwenye.

Imininingwane egciniwe ye-PostgreSQL ne-MySQL ngokuvamile ibhekwa njengehlobene, kodwa ngezandiso ezengeziwe zinikeza amakhono e-NoSQL. Lapha sizoxoxa ngokuphindaphinda phakathi kwe-PostgreSQL ne-MySQL ngokombono we-DBMS ohlobene.

Ngeke sikuchaze konke ukusebenza kwangaphakathi, izimiso eziyisisekelo kuphela ukuze uthole umbono wokumisa ukuphindaphinda phakathi kwamaseva esizindalwazi, izinzuzo, imikhawulo kanye namacala okusebenzisa.

Ngokuvamile, ukuphindaphinda phakathi kwamaseva esizindalwazi amabili afanayo kwenziwa ngemodi kanambambili noma kusetshenziswa imibuzo phakathi komshicileli (okungumshicileli, oyinhloko, noma osebenzayo) nesigqila (obhalisile, obekwe eceleni, noma ongenzi lutho). Inhloso yokuphindaphinda ukuhlinzeka ngekhophi yesikhathi sangempela yesizindalwazi esiyinhloko ohlangothini lwezigqila. Kulokhu, idatha idluliswa isuka kunkosi iye kwisigqila, okungukuthi, isuka kokusebenzayo iye kokwenziwayo, ngoba ukuphindaphinda kwenziwa ohlangothini olulodwa kuphela. Kodwa ungasetha ukuphindaphinda phakathi kolwazi olugciniwe ezimbili kuzo zombili izinkomba, ukuze idatha idluliswe isuka kusigqila iye kunkosi ngokucushwa okusebenzayo okusebenzayo. Konke lokhu, okuhlanganisa ukuphindaphinda kwe-cascading, kungenzeka phakathi kwamaseva esizindalwazi amabili noma ngaphezulu afanayo. Ukucushwa okusebenzayo-okusebenzayo noma okusebenzayo kuncike esidingweni, ukutholakala kwamakhono anjalo ekucushweni kokuqala noma ukusetshenziswa kwezixazululo zokucushwa kwangaphandle kanye nokuhwebelana okukhona .

Ukucushwa okuchazwe kungenzeka phakathi kwamaseva esizindalwazi ahlukene. Iseva ingalungiselelwa ukwamukela idatha eyimpinda evela kwenye iseva yesizindalwazi futhi iqhubeke nokugcina izifinyezo zesikhathi sangempela zedatha ephindaphindiwe. I-MySQL ne-PostgreSQL zinikeza okuningi kwalokhu kulungiselelwa kwangaphakathi noma ngezandiso zezinkampani zangaphandle, okuhlanganisa izindlela zokungena kanambambili, ukukhiya amadiski, nezindlela ezisekelwe esitatimendeni kanye nemigqa.

Ukuphindaphinda okuphambanayo phakathi kwe-MySQL ne-PostgreSQL kuyadingeka ukuze kuthuthwe kanyekanye usuka kwenye iseva yesizindalwazi uye kwenye. Lezi zingosi zolwazi zisebenzisa amaphrothokholi ahlukene, ngakho-ke akwenzeki ukuwaxhumanisa ngokuqondile. Ukuze usungule ukushintshaniswa kwedatha, ungasebenzisa ithuluzi lomthombo ovulekile wangaphandle, isibonelo pg_chameleon.

Yini i-pg_chameleon

i-pg_chameleon iwuhlelo lokuphindaphinda olusuka ku-MySQL luye ku-PostgreSQL ku-Python 3. Isebenzisa umtapo ovulekile womthombo wokuphindaphinda we-mysql, nakuPython. Izithombe zerowu zikhishwa kumathebula e-MySQL futhi zigcinwe njengezinto ze-JSONB kusizindalwazi se-PostgreSQL, bese zisuswa ukubethela ngomsebenzi we-pl/pgsql futhi zenziwe kabusha kusizindalwazi se-PostgreSQL.

Izici ze-pg_chameleon

Izikimu eziningi ze-MySQL ezivela kuqoqo elifanayo zingaphindwa kusizindalwazi esisodwa se-PostgreSQL esiqondiwe ekucushweni kokukodwa kuya kokuningi.
Umthombo namagama e-schema okuhlosiwe awakwazi ukufana.
Idatha ephindaphindayo ingabuyiswa kumfanekiso we-MySQL we-Cascaded.
Amathebula angakwazi ukuphindaphinda noma ukukhiqiza amaphutha awafakiwe.
Umsebenzi ngamunye wokuphindaphinda ulawulwa amademoni.
Lawula ngamapharamitha asuselwa ku-YAML namafayela okusetha.

Isibonelo:

Umsingathi
vm1
vm2

Inguqulo ye-OS
I-CentOS Linux 7.6 x86_64
I-CentOS Linux 7.5 x86_64

Inguqulo yeseva ye-DB
MySQL 5.7.26
I-PostgreSQL 10.5

Imbobo ye-DB
3306
5433

Ikheli le-IP
192.168.56.102
192.168.56.106

Ukuze uqale, lungiselela zonke izingxenye ezidingekayo ukuze ufake i-pg_chameleon. Lesi sibonelo sifaka i-Python 3.6.8, edala futhi yenze kusebenze indawo ebonakalayo.

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

Ngemva kokufaka ngempumelelo i-Python3.6, udinga ukuqedela izidingo ezisele, njengokudala nokwenza kusebenze indawo ebonakalayo. Ukwengeza, imojula ye-pip ibuyekezwa enguqulweni yakamuva futhi isetshenziselwe ukufaka i-pg_chameleon. Imiyalo engezansi faka ngenhloso i-pg_chameleon 2.0.9, nakuba inguqulo yakamuva ingu-2.0.10. Lokhu kuyadingeka ukuze ugweme izimbungulu ezintsha enguqulweni ebuyekeziwe.

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

Sibe sesibiza i-pg_chameleon (unwabu luwumyalo) ngengxabano ethi set_configuration_files ukuze unike amandla i-pg_chameleon futhi udale izinkomba ezizenzakalelayo namafayela okumisa.

(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

Manje sidala ikhophi ye-config-example.yml njenge-default.yml ukuze ibe ifayela lokumisa elizenzakalelayo. Isampula lefayela lokumisa lalesi sibonelo linikezwe ngezansi.

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

Ifayela lokumisa kulesi sibonelo liyisampula lefayela le-pg_chameleon elinezinguquko ezincane ukuze livumelane nomthombo nendawo okuqondiwe kuyo, futhi ngezansi ukubuka konke kwezigaba ezihlukene zefayela lokumisa.

Efayelini lokumisa le-default.yml kunesigaba sezilungiselelo zomhlaba, lapho ungaphatha khona izilungiselelo ezifana nendawo yefayela lokukhiya, indawo yamalogi, isikhathi sokugcinwa kwamalogi, njll. Okulandelayo kuza isigaba sokukhipha uhlobo, lapho isethi yemithetho yokweqa izinhlobo ngesikhathi sokuphindaphinda. Isibonelo sishintsha ngokuzenzakalelayo kuhlobo lomthetho wokweqa oguqula i-tinyint(1) ibe inani le-boolean. Esigabeni esilandelayo, sicacisa imininingwane yokuxhumana kusizindalwazi esiqondiwe. Esimweni sethu, lena isizindalwazi se-PostgreSQL, esiqokiwe pg_conn. Esigabeni sokugcina, sibonisa idatha yomthombo, okungukuthi, imingcele yokuxhuma yesizindalwazi somthombo, uhlelo lwemephu phakathi komthombo kanye nesizindalwazi esiqondiwe, amatafula adinga ukweqiwa, isikhathi sokulinda, inkumbulo, usayizi wephakheji. Qaphela ukuthi "imithombo" ingubuningi, okusho ukuthi singakwazi ukwengeza isizindalwazi semithombo eminingi kusizindalwazi esisodwa esiqondiwe ukuze simise ukucushwa okuningi kuya kokukodwa.

Isibonelo sesizindalwazi world_x iqukethe amathebula angu-4 anemigqa enikezwa umphakathi we-MySQL njengezibonelo. Ingalandwa lapha. Isampula egciniwe iza njengetiyela kanye nengobo yomlando ecindezelwe enemiyalelo yokudala nokungenisa imigqa.

Kusizindalwazi se-MySQL ne-PostgreSQL, umsebenzisi okhethekile udalwa ngegama elifanayo usr_replica. Ku-MySQL, inikezwa amalungelo okufunda engeziwe kuwo wonke amatafula aphindaphindiwe.

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;

Ngasohlangothini lwe-PostgreSQL, kwakhiwa isizindalwazi se-db_replica esizokwamukela izinguquko kusizindalwazi se-MySQL. Umsebenzisi u-usr_replica ku-PostgreSQL umiswa ngokuzenzakalelayo njengomnikazi wezikimu ezimbili, pgworld_x kanye ne-sch_chameleon, equkethe amathebula aphindwayo wangempela kanye namathebula ohla lwemibhalo oluphindaphindayo, ngokulandelana. I-agumenti ye-create_replica_schema inesibopho sokumisa okuzenzakalelayo, njengoba uzobona ngezansi.

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

I-database ye-MySQL ilungiselelwe ngezinguquko ezithile zepharamitha ukuyilungiselela ukuphindaphinda njengoba kukhonjisiwe ngezansi. Uzodinga ukuqala kabusha iseva yesizindalwazi ukuze izinguquko ziqale ukusebenza.

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

Manje kubalulekile ukuhlola uxhumano kuzo zombili iziphakeli zedathabheyisi ukuze kungabikho izinkinga lapho usebenzisa imiyalo ye-pg_chameleon.

Ku-PostgreSQL node:

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

Ku-node ye-MySQL:

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

Imiyalo emithathu elandelayo ye-pg_chameleon (unwabu) ilungiselela indawo ezungezile, yengeza umthombo, futhi iqalise ukukopisha. Impikiswano yokudala_replica_schema kokuthi pg_chameleon idala i-schema esizenzakalelayo (sch_chameleon) kanye ne-schema yokuphindaphinda (pgworld_x) kusizindalwazi se-PostgreSQL, njengoba sesixoxile kakade. I-agumenti ye-add_source yengeza isizindalwazi somthombo ekucushweni ngokufunda ifayela lokucushwa (default.yml), futhi esimeni sethu yi-mysql, futhi i-init_replica iqalisa ukucushwa okusekelwe kumapharamitha kufayela lokucushwa.

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

Umphumela wale miyalo emithathu ukhombisa ngokusobala ukuthi yenziwe ngempumelelo. Noma yikuphi ukuphahlazeka noma amaphutha e-syntax abikwa emilayezweni elula, ecacile enamacebiso okuthi ungayilungisa kanjani inkinga.

Ekugcineni, siqala ukuphindaphinda sisebenzisa i-start_replica futhi sithole umlayezo wempumelelo.

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

Isimo sokuphindaphinda singabuzwa kusetshenziswa ukungqubuzana kwe-show_status, futhi amaphutha angabukwa kusetshenziswa i-agumenti ethi show_errors.

Umphumela.

Njengoba sesishilo, umsebenzi ngamunye wokuphindaphinda ulawulwa amademoni. Ukuze uzibuke, sibuza ithebula lenqubo ngomyalo we-Linux ps, njengoba kukhonjisiwe ngezansi.

Umphumela.

Ukuphindaphinda akubhekwa njengokumisiwe size sikuhlole ngesikhathi sangempela, njengoba kuboniswe ngezansi. Sakha ithebula, sifaka amarekhodi ambalwa kusizindalwazi se-MySQL, bese sishayela ingxabano ye-sync_tables ku-pg_chameleon ukuze sibuyekeze ama-daemon futhi siphindaphinde itafula namarekhodi kusizindalwazi se-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.

Ukuqinisekisa imiphumela yokuhlolwa, sibuza ithebula kusizindalwazi se-PostgreSQL bese sikhipha imigqa.

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

Uma senza ukufuduka, imiyalo elandelayo ye-pg_chameleon izoba ukuphela kwayo. Imiyalo idinga ukwenziwa ngemva kokuba sinesiqiniseko sokuthi imigqa yawo wonke amathebula okuqondiwe aphindwaphindwa, futhi umphumela uzoba isizindalwazi se-PostgreSQL esithuthwe kahle ngaphandle kwezinkomba kusizindalwazi somthombo noma isikimu sokuphindaphinda (sch_chameleon).

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

Uma uthanda, ungasebenzisa imiyalo elandelayo ukuze ususe ukucushwa kwasekuqaleni nohlelo lokuphindaphinda.

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

Izinzuzo ze-pg_chameleon

Ukusetha okulula nokucushwa.
Xazulula kalula futhi ukhombe okudidayo ngemilayezo yephutha ecacile.
Amathebula akhethekile angeziwe angengezwa ekuphindaphindeni ngemva kokuqaliswa ngaphandle kokushintsha okunye ukucushwa.
Kuyenzeka ulungise imininingwane eminingi yemithombo yolwazi lwesizindalwazi esisodwa esiqondiwe, futhi lokhu kuyasiza kakhulu uma uhlanganisa idatha esuka kusizindalwazi se-MySQL eyodwa noma ngaphezulu uyifaka kusizindalwazi esisodwa se-PostgreSQL.
Awudingi ukuphindaphinda amathebula akhethiwe.

Okubi kwe-pg_chameleon

Isekelwa kuphela nge-MySQL 5.5 nangaphezulu njengomthombo kanye ne-PostgreSQL 9.5 nangaphezulu njengesizindalwazi esiqondiwe.
Ithebula ngalinye kufanele libe nokhiye oyinhloko noma oyingqayizivele, ngaphandle kwalokho amathebula aqaliswa phakathi nenqubo ye-init_replica kodwa awaphindwa.
Ukuphindaphinda kwendlela eyodwa - kuphela ukusuka ku-MySQL kuye ku-PostgreSQL. Ngakho-ke, ifaneleka kuphela kumjikelezo "osebenzayo-okwenziwayo".
Umthombo ungaba kuphela isizindalwazi se-MySQL, futhi ukusekelwa kwesizindalwazi se-PostgreSQL njengomthombo kuwukuhlola kuphela futhi kunemikhawulo (funda kabanzi lapha)

Imiphumela ye-pg_chameleon

Indlela yokuphindaphinda ku-pg_chameleon yinhle kakhulu ekuthutheni isizindalwazi sisuka ku-MySQL siye ku-PostgreSQL. Okubi okubalulekile ukuthi ukuphindaphinda kuyindlela eyodwa kuphela, ngakho-ke ochwepheshe besizindalwazi mancane amathuba okuba bafune ukuyisebenzisela enye into ngaphandle kokuthutha. Kodwa inkinga yokuphindaphinda kwendlela eyodwa ingaxazululwa ngelinye ithuluzi lomthombo ovulekile - i-SymmetricDS.

Funda okwengeziwe emibhalweni esemthethweni lapha. Usizo lomugqa womyalo lungatholakala lapha.

Uhlolojikelele lwe-SymmetricDS

I-SymmetricDS iyithuluzi lomthombo ovulekile eliphindaphinda noma iyiphi isizindalwazi kunoma iyiphi enye isizindalwazi esivamile: i-Oracle, i-MongoDB, i-PostgreSQL, i-MySQL, i-SQL Server, i-MariaDB, i-DB2, i-Sybase, i-Greenplum, i-Informix, i-H2, i-Firebird nezinye izimo zesizindalwazi samafu, isb. I-Redshift, kanye I-Azure, njll. Izici ezitholakalayo: isizindalwazi kanye nokuvumelanisa kwefayela, ukuphindaphinda kwesizindalwazi esinabaphathi abaningi, ukuvumelanisa okuhlungiwe, ukuguqulwa nokunye. Leli ithuluzi le-Java futhi lidinga ukukhishwa okujwayelekile kwe-JRE noma i-JDK (inguqulo 8.0 noma ngaphezulu). Lapha, izinguquko zedatha kuzibangeli kusizindalwazi somthombo zingarekhodwa futhi zithunyelwe kusizindalwazi esiqondiwe esifanele ngesimo samaqoqo.

Izici ze-SymmetricDS

Ithuluzi lizimele, okusho ukuthi izizindalwazi ezimbili noma ngaphezulu ezihlukene zingashintshanisa idatha.
Imininingo egciniwe yobudlelwano ivumelaniswa kusetshenziswa amarekhodi okushintsha idatha, kuyilapho isizindalwazi esisekelwe ohlelweni lwefayela sisebenzisa ukuvumelanisa amafayela.
Ukuphindaphinda kwezindlela ezimbili kusetshenziswa izindlela zePush and Donsa ngokusekelwe kusethi yemithetho.
Ukudluliswa kwedatha kungenzeka ngamanethiwekhi avikelekile futhi anomkhawulokudonsa ophansi.
Ukuthola kabusha okuzenzakalelayo lapho ama-node eqala kabusha ukusebenza ngemva kokwehluleka nokuxazulula ukungqubuzana okuzenzakalelayo.
Ama-API ahambisanayo namafu anamandla.

Isibonelo:

I-SymmetricDS ingamiswa ngendlela eyodwa kwezimbili:
Inodi eyinhloko (umzali) exhumanisa ngokuyinhloko ukuphindaphinda kwedatha phakathi kwamanodi wesigqila (ingane), futhi ukuxhumana phakathi kwamanodi engane kwenzeka ngomzali kuphela.
I-node esebenzayo (I-Node 1) ingaxhumana ukuze iphindaphinde ngenye i-node esebenzayo (I-Node 2) ngaphandle komxhumanisi.

Kuzo zombili izinketho, ukushintshana kwedatha kwenzeka kusetshenziswa i-Push futhi Donsa. Kulesi sibonelo sizocubungula ukucushwa okusebenzayo okusebenzayo. Kungathatha isikhathi eside kakhulu ukuchaza yonke i-architecture, ngakho yenza ucwaningo lwakho. umhlahlandlelaukuze ufunde kabanzi mayelana nedivayisi ye-SymmetricDS.

Ukufaka i-SymmetricDS kulula kakhulu: landa inguqulo yomthombo ovulekile wefayela le-zip kusuka lapha futhi uyikhiphe nomaphi lapho uthanda khona. Ithebula elingezansi linikeza ulwazi mayelana nendawo yokufaka nenguqulo ye-SymmetricDS kulesi sibonelo, kanye nezinguqulo zesizindalwazi, izinguqulo ze-Linux, amakheli e-IP, nezimbobo zawo zombili izindawo.

Umsingathi
vm1
vm2

Inguqulo ye-OS
I-CentOS Linux 7.6 x86_64
I-CentOS Linux 7.6 x86_64

Inguqulo yeseva ye-DB
MySQL 5.7.26
I-PostgreSQL 10.5

Imbobo ye-DB
3306
5832

Ikheli le-IP
192.168.1.107
192.168.1.112

Inguqulo ye-SymmetricDS
I-SymmetricDS 3.9
I-SymmetricDS 3.9

Indlela yokufaka ye-SymmetricDS
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20

Igama lenodi ye-SymmetricDS
corp-000
isitolo-001

Lapha sifaka i-SymmetricDS ku-/usr/local/symmetric-server-3.9.20, futhi ama-subdirectories ahlukahlukene namafayela azogcinwa lapho. Sinentshisekelo kumasampula nezinjini ezingaphansi kweziqondiso. Uhla lwemibhalo lwamasampula luqukethe isibonelo samafayela okumisa anezakhiwo ze-node, kanye nezibonelo zemibhalo ye-SQL ukuze uqalise ngokushesha.

Kumkhombandlela wamasampula sibona amafayela amathathu okucushwa anezakhiwo ze-node - igama libonisa uhlobo lwe-node kuhlelo oluthile.

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

I-SymmetricDS inawo wonke amafayela okucushwa adingekayo omklamo oyisisekelo wamanodi angu-3 (inketho 1), futhi amafayela afanayo angasetshenziswa kumklamo wamanodi angu-2 (inketho yesi-2). Kopisha ifayela lokumisa elidingekayo kusuka kuhla lwemibhalo lwamasampula kuya ezinjinini kumsingathi we-vm1. Kuvela kanje:

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

Le nodi ekucushweni kwe-SymmetricDS ibizwa nge-corp-000, futhi uxhumano lwedathabheyisi lusingathwa umshayeli we-mysql jdbc, osebenzisa intambo yokuxhuma engenhla kanye nemininingwane yokungena. Sixhuma kusizindalwazi se-replica_db futhi amathebula azodalwa ngesikhathi sokwakhiwa kwe-schema. I-sync.url ibonisa indawo yokuxhumana ne-node yokuvumelanisa.

I-Node 2 ku-host vm2 ilungiselelwe njenge-store-001 futhi okunye kucaciswe kufayela le-node.properties ngezansi. I-Node store-001 isebenzisa isizindalwazi se-PostgreSQL futhi pgdb_replica isizindalwazi sokuphindaphinda. registration.url ivumela umsingathi i-vm2 ukuthi axhumane nomsingathi i-vm1 futhi athole imininingwane yokumisa kuyo.

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

Isibonelo esiqediwe se-SymmetricDS siqukethe imingcele yokusetha ukuphindaphinda kwezindlela ezimbili phakathi kwamaseva amabili esizindalwazi (amanodi amabili). Izinyathelo ezingezansi zenziwa kumsingathi i-vm1 (corp-000), okuzodala i-schema esiyisibonelo esinamathebula angu-4. Bese usebenzisa amathebula e-create-sym-table ngomyalo we-symadmin kudala amathebula ohla lwemibhalo lapho imithetho nesiqondiso sokuphindaphinda phakathi kwamanodi kuzogcinwa khona. Ekugcineni, idatha yesampula ilayishwa kumathebula.

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

Esibonelweni, amathebula entengo yento kanye ne- item_selling_price alungiselelwa ngokuzenzakalelayo ukuthi aphindaphindeke kusuka ku-corp-000 kuya ku-store-001, futhi amathebula okuthengisa (sale_transaction and sale_return_line_item) alungiswa ngokuzenzakalela ukuze aphindaphindeke kusuka ku-store-001 kuya ku-corp-000. Manje sakha i-schema kusizindalwazi se-PostgreSQL ku-host vm2 (isitolo-001) ukuze siyilungiselele ukuthola idatha evela ku-corp-000.

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

Qiniseka ukuthi ubheka ukuthi isizindalwazi se-MySQL ku-vm1 sinamathebula ayisibonelo namathebula ekhathalogi ye-SymmetricDS. Qaphela ukuthi amathebula esistimu ye-SymmetricDS (afakwe isiqalo esithi sym_) atholakala kuphela ku-node corp-000 ngoba yilapho sisebenzise khona umyalo we-create-sym-tables futhi sizophatha ukuphindaphinda. Futhi ku-database esitolo se-node-001 kuzoba namatafula angu-4 kuphela wesibonelo ngaphandle kwedatha.

Konke. Indawo isilungele ukusebenzisa izinqubo zeseva ye-sym kuwo womabili amanodi njengoba kukhonjisiwe ngezansi.

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

Okufakiwe kwamalogu kuthunyelwa kufayela lokungena elingemuva (symmetric.log) kufolda yamalogi kunkomba lapho i-SymmetricDS ifakwe khona, kanye nokuphumayo okujwayelekile. Iseva ye-sym manje ingaqalwa ku-node store-001.

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

Uma usebenzisa inqubo yeseva ye-sym kumsingathi we-vm2, izophinda idale amathebula ekhathalogi ye-SymmetricDS kusizindalwazi se-PostgreSQL. Uma usebenzisa inqubo yeseva ye-sym kuwo womabili amanodi, asebenzisana ukuze aphindaphinde idatha kusuka ku-corp-000 kuya ku-store-001. Uma ngemva kwemizuzwana embalwa sibuza wonke amatafula angu-4 nhlangothi zombili, sizobona ukuthi ukuphindaphinda kube yimpumelelo. Noma ungathumela i-bootstrap ku-node store-001 kusuka ku-corp-000 ngomyalo olandelayo.

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

Kuleli qophelo, irekhodi elisha lifakwa kuthebula lezinto kusizindalwazi se-MySQL ku-node corp-000 (umsingathi: vm1), futhi ungabheka ukuphindaphinda kwalo kusizindalwazi se-PostgreSQL ku-node store-001 (hosti: vm2). Sibona umsebenzi we-Pull ukuhambisa idatha kusuka ku-corp-000 kuya ku-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)

Ukuze wenze umsebenzi we-Push ukuhambisa idatha isuka ku-store-001 iye ku-corp-000, sifaka irekhodi kuthebula_lokwenziwe futhi siqinisekise ukuthi ukuphindaphinda kuphumelele.

Umphumela.

Sibona ukusethwa okuyimpumelelo kokuphindaphindeka kwezindlela ezimbili zamathebula esibonelo phakathi kwesizindalwazi se-MySQL ne-PostgreSQL. Ukuze usethe ukuphindaphinda kwamathebula abasebenzisi abasha, landela lezi zinyathelo: Sakha ithebula t1 ngokwesibonelo futhi silungiselela imithetho yalo yokuphindaphinda ngale ndlela elandelayo. Ngale ndlela silungiselela ukuphindaphinda kuphela kusuka ku-corp-000 kuya ku-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)

Ukulungiselelwa kube sekwaziswa ngoshintsho lwe-schema, okungukuthi, ukwengezwa kwetafula elisha, kusetshenziswa umyalo we-symadmin ngempikiswano ye-sync-triggers, edala kabusha izibangeli ukuze kumephu izincazelo zethebula. ukuthumela-i-schema senziwa ukuze kuthunyelwe izinguquko ze-schema ku-node store-001, futhi ukuphindaphindwa kwethebula t1 kuyalungiswa.

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

Izinzuzo ze-SymmetricDS

Ukufakwa kalula nokucushwa, kufaka phakathi isethi esenziwe ngomumo yamafayela anemingcele yokwakha isekethe enamanodi amathathu noma amabili.
Imininingo egciniwe ye-Cross-platform nokuzimela kwenkundla, okuhlanganisa amaseva, amakhompyutha aphathekayo namadivayisi eselula.
Phinda noma iyiphi isizindalwazi kunoma iyiphi enye isizindalwazi endaweni, ku-WAN noma emafini.
Amathuba omsebenzi ofanele ngezinqolobane ezimbalwa noma izinkulungwane ezimbalwa zokuphindaphinda okulula.
Inguqulo ekhokhelwayo nge-GUI nokusekelwa okuhle kakhulu.

Ukubi kwe-SymmetricDS

Udinga ukuchaza ngokwakho imithetho nesiqondiso sokuphindaphinda emugqeni womyalo ngokusebenzisa izitatimende ze-SQL ukuze ulayishe amathebula ekhathalogi, okungase kube nzima.
Ukusetha amathebula amaningi okuphindaphinda kungase kube isicefe ngaphandle uma usebenzisa imibhalo ukuze udale izitatimende ze-SQL ezichaza imithetho nesiqondiso sokuphindaphinda.
Kunolwazi oluningi kakhulu oluqoshwa ezingodweni, futhi ngesinye isikhathi udinga ukuqoqa ifayela lelogi ukuze lingathathi isikhala esiningi.

Imiphumela ye-SymmetricDS

I-SymmetricDS ikuvumela ukuthi usethe ukuphindaphinda kwezindlela ezimbili phakathi kwamanodi ayizinkulungwane ezimbili, ezintathu, noma izinkulungwane ezimbalwa ukuze uphindaphinde futhi uvumelanise amafayela. Leli ithuluzi eliyingqayizivele elenza imisebenzi eminingi ngokuzimela, njengokutholwa kwedatha okuzenzakalelayo ngemva kwesikhathi eside sokuphumula endaweni, ukushintshaniswa kwedatha okuvikelekile nokuphumelelayo phakathi kwama-node nge-HTTPS, ukulawula ukungqubuzana okuzenzakalelayo okusekelwe kusethi yemithetho, njll. I-SymmetricDS iyayenza ukuphindaphinda phakathi kwanoma iyiphi isizindalwazi, ngakho-ke, ingasetshenziselwa izimo ezihlukahlukene, okuhlanganisa ukufuduka, ukufuduka, ukusatshalaliswa, ukuhlunga, nokuguqulwa kwedatha kuwo wonke amapulatifomu.

Isibonelo sisekelwe kumphathi umhlahlandlela osheshayo nge-SymmetricDS. IN imaniwali yosebenzisayo Ichaza ngokuningiliziwe imiqondo ehlukahlukene ehilelekile ekusetheni ukuphindaphinda nge-SymmetricDS.

Source: www.habr.com

Engeza amazwana