Yambuka kudzokorora pakati pePostgreSQL neMySQL

Yambuka kudzokorora pakati pePostgreSQL neMySQL

Ini ndichatsanangura muchinjika-kudzokorodza pakati pePostgreSQL neMySQL, pamwe nenzira dzekumisikidza muchinjiko-kudzokorodza pakati pemaseva maviri edatabase. Kazhinji, muchinjika-akadzokororwa dhatabhesi anonzi homogeneous, uye inzira iri nyore yekufamba kubva kune imwe RDBMS server kuenda kune imwe.

PostgreSQL uye MySQL dhatabhesi anowanzo kutariswa ane hukama, asi nekuwedzera ekuwedzera ivo vanopa NoSQL kugona. Pano tichakurukura kudzokororwa pakati pePostgreSQL neMySQL kubva pahukama hweDBMS maonero.

Isu hatizotsanangure kushanda kwese kwemukati, chete misimboti yekutanga kuitira kuti iwe uwane pfungwa yekugadzirisa kudzokorodza pakati pesevha yedatabase, zvakanakira, zvisingakwanisi uye kesi dzekushandisa.

Kazhinji, kudzokorora pakati pemasevhisi maviri akafanana anoitwa mune bhinari modhi kana kushandisa mibvunzo pakati peatenzi (aka muparidzi, tenzi, kana anoshanda) uye muranda (munyoreri, anomira, kana asingaiti). Chinangwa chekudzokorora ndechekupa chaiyo-nguva kopi yeiyo master database padivi revaranda. Muchiitiko ichi, data inotamiswa kubva kuna tenzi kuenda kumuranda, ndiko kuti, kubva pakushanda kuenda kune passive, nekuti kudzokorora kunoitwa munzira imwe chete. Asi iwe unogona kuseta kudzokorodza pakati pemadatabase maviri mumativi ese, kuitira kuti data itakurwe kubva kumuranda kuenda kune tenzi mune inoshanda-inoshanda gadziriso. Zvose izvi, kusanganisira cascading replication, zvinogoneka pakati pemaseva maviri kana anopfuura akafanana epadatabase.Kushanda-kushanda kana kushanda-passive configuration kunoenderana nezvinodiwa, kuvapo kwezvikwanisiro zvakadaro mukugadzirisa kwekutanga kana kushandiswa kwekugadzirisa kwekunze kwekugadzirisa uye kutengeserana kuripo .

Iyo yakatsanangurwa gadziriso inogoneka pakati pemaseva e database akasiyana. Sevha inogona kugadzirwa kuti igamuchire yakadzokororwa data kubva kune imwe dhatabhesi uye ichiri kuchengetedza chaiyo-nguva snapshots yedata rakadzokororwa. MySQL nePostgreSQL inopa akawanda ezvigadziriso izvi mukati-mumba kana kuburikidza newechitatu-bato mawedzero, anosanganisira mabhinari egi nzira, kukiya dhisiki, uye chirevo- uye mitsara-yakavakirwa nzira.

Kuyambuka kudzokororwa pakati peMySQL nePostgreSQL kunodiwa kuti ufambe-nguva imwe kubva kune imwe dhatabhesi server kuenda kune imwe. Aya dhatabhesi anoshandisa maprotocol akasiyana, saka hazvigoneke kuvabatanidza zvakananga. Kuti utange kuchinjanisa data, unogona kushandisa yekunze yakavhurika sosi chishandiso, semuenzaniso pg_chameleon.

Chii chinonzi pg_chameleon

pg_chameleon is a replication system kubva kuMySQL kuenda kuPostgreSQL muPython 3. Inoshandisa yakavhurwa sosi mysql-replication library, zvakare muPython. Mifananidzo yeRow inotorwa kubva kumatafura eMySQL uye inochengetwa sezvinhu zveJSONB muPostgreSQL dhatabhesi, uye yobva yadhindwa ne pl/pgsql basa uye kudhindwa muPostgreSQL dhatabhesi.

Zvinoumba pg_chameleon

Multiple MySQL schemas kubva kune imwechete cluster inogona kudzokororwa kune imwechete chinangwa PostgreSQL dhatabhesi mune imwe-kune-yakawanda gadziriro.
Kwakabva uye kutariswa schema mazita haagone kufanana.
Kudzokorora data kunogona kutorwa kubva kuCascaded MySQL replica.
Matafura asingakwanisi kudzokorora kana kuburitsa zvikanganiso haana kubatanidzwa.
Basa rega rega rekudzokorora rinodzorwa nemadhimoni.
Kudzora kuburikidza neYAML-yakavakirwa paramita uye mafaera ekugadzirisa.

Muenzaniso:

Host
vm1
vm2

OS shanduro
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64

DB server shanduro
MySQL 5.7.26
PostgreSQL 10.5

DB port
3306
5433

IP kero
192.168.56.102
192.168.56.106

Kutanga, gadzirira zvese zvinodiwa kuti uise pg_chameleon. Uyu muenzaniso unoisa Python 3.6.8, iyo inogadzira uye inomutsa iyo chaiyo nharaunda.

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

Mushure mekubudirira kuisa Python3.6, unofanirwa kupedzisa zvakasara zvinodiwa, zvakadai sekugadzira uye kushandura mamiriro ezvinhu chaiwo. Pamusoro pezvo, iyo pip module inogadziridzwa kune yazvino vhezheni uye inoshandiswa kuisa pg_chameleon. Mirairo iri pasi apa nemaune isa pg_chameleon 2.0.9, kunyangwe yazvino vhezheni iri 2.0.10. Izvi zvinodikanwa kudzivirira mabhugi matsva mune yakagadziridzwa vhezheni.

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

Isu tinodaidza pg_chameleon (chameleon murairo) neiyo set_configuration_files nharo yekugonesa pg_chameleon uye kugadzira default madhairekitori uye mafaera ekugadzirisa.

(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

Ikozvino tagadzira kopi yeconfig-example.yml sedefault.yml kuitira kuti ive iyo yakasarudzika faira yekumisikidza. Sample yekumisikidza faira yemuenzaniso uyu inopiwa pazasi.

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

Iyo faira yekumisikidza mumuenzaniso uyu muenzaniso pg_chameleon faira ine zvidiki zvigadziriso kuti zvienderane nekwakabva uye zvakanangwa nharaunda, uye pazasi pane mhedziso yezvikamu zvakasiyana zvefaira rekugadzirisa.

Mune iyo default.yml configuration file pane chikamu chezvirongwa zvepasi rose, kwaunogona kugadzirisa zvirongwa zvakadai senzvimbo yefaira rekuvhara, nzvimbo yemapuranga, nguva yekuchengetedza matanda, nezvimwewo. seti yemitemo yemhando yepamusoro panguva yekudzokorora. Muenzaniso wacho unoenda kune rudzi rwepamusoro mutemo unoshandura tinyint(1) kuita boolean value. Muchikamu chinotevera, isu tinotsanangudza ruzivo rwekubatanidza kune yakananga database. Kwatiri, iyi iPostgreSQL dhatabhesi, yakasarudzwa pg_conn. Muchikamu chekupedzisira, isu tinoratidza iyo dhata data, ndiko kuti, iyo yekubatanidza ma paramita eiyo sosi dhatabhesi, iyo mepu chirongwa pakati penzvimbo uye inotangwa dhatabhesi, matafura anoda kusvetuka, kumirira nguva, ndangariro, saizi yepakiti. Ziva kuti "zvitubu" ndezvemuzhinji, zvichireva kuti tinogona kuwedzera akawanda madhatabhesi kune imwechete tarisiro dhatabhesi kumisikidza yakawanda-kune-imwe gadziriso.

Muenzaniso wedatabase world_x ine matafura mana ane mitsara inopihwa nenharaunda yeMySQL semienzaniso. Inogona kutorwa pano. Iyo yemuenzaniso dhatabhesi inouya setara uye yakamanikidzwa archive ine mirairo yekugadzira uye yekupinza mitsara.

MuMySQL nePostgreSQL dhatabhesi, mushandisi akakosha anogadzirwa aine zita rimwechete usr_replica. MuMySQL, inopihwa mamwe kodzero dzekuverenga kune ese akadzokororwa matafura.

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;

Padivi rePostgreSQL, db_replica dhatabhesi inogadzirwa iyo inobvuma shanduko kubva kuMySQL dhatabhesi. Mushandisi usr_replica muPostgreSQL anogadziriswa otomatiki semuridzi wezvirongwa zviviri, pgworld_x uye sch_chameleon, iyo ine iwo chaiwo akadzokororwa matafura uye yekudzokorora dhairekitori matafura, zvichiteerana. Iyo create_replica_schema nharo ine basa rekugadzirisa otomatiki, sezvauchaona pazasi.

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

Iyo MySQL dhatabhesi inogadziriswa neimwe shanduko yeparameter kuti igadzirire kudzokorora sezvakaratidzwa pazasi. Iwe unozofanirwa kutangazve sevha yedatabase kuti shanduko dziite.

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

Ikozvino zvakakosha kutarisa kubatana kune ese ari maviri dhatabhesi maseva kuitira kuti pasave nematambudziko paunenge uchimhanyisa pg_chameleon mirairo.

Pane iyo PostgreSQL node:

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

PaMySQL node:

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

Iwo matatu anotevera pg_chameleon (chameleon) anoraira gadzirira nharaunda, wedzera kwainobva, uye tanga replica. Iyo create_replica_schema nharo kune pg_chameleon inogadzira iyo default schema (sch_chameleon) uye replication schema (pgworld_x) muPostgreSQL dhatabhesi, sezvatakambokurukura. Iyo add_source nharo inowedzera dhatabhesi kune dhizaini nekuverenga faira yekumisikidza (default.yml), uye mune yedu ndeye mysql, uye init_replica inotanga kugadziridzwa kunoenderana nematanho ari mufaira rekugadzirisa.

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

Kubuda kwemirairo mitatu iyi kunoratidza pachena kuti vakaitwa zvinobudirira. Chero kukanganisa kana zvikanganiso zvesyntax zvinoshumwa mune akareruka, akajeka meseji ane mazano ekugadzirisa dambudziko.

Chekupedzisira, tinotanga kudzokorora tichishandisa start_replica uye tigamuchire meseji yebudiriro.

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

Chimiro chekudzokorora chinogona kubvunzwa uchishandisa show_status nharo, uye zvikanganiso zvinogona kutariswa uchishandisa show_errors nharo.

Mhedzisiro.

Sezvatakambotaura, rimwe nerimwe rekudzokorora basa rinodzorwa nemadhimoni. Kuti uvaone, isu tinobvunza tafura yemaitiro neLinux ps command, sezvakaratidzwa pazasi.

Mhedzisiro.

Kudzokorora hakuonekwe kwakagadzirirwa kudzamara tazviyedza munguva chaiyo, sezvakaratidzwa pazasi. Isu tinogadzira tafura, toisa akati wandei marekodhi mudura reMySQL, uye tofonera iyo sync_tables nharo mu pg_chameleon kugadzirisa madhimoni uye kudzokorora tafura nemarekodhi kuPostgreSQL dhatabhesi.

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.

Kuti tisimbise mhinduro dzebvunzo, tinobvunza tafura kubva kuPostgreSQL dhatabhesi uye tinoburitsa mitsara.

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

Kana isu tiri kuita kutama, iyo inotevera pg_chameleon mirairo ichave kuguma kwayo. Iyo mirairo inoda kuurayiwa mushure mekunge tine chokwadi chekuti mitsara yematafura ese anotangwa akadzokororwa, uye mhedzisiro ichave yakamisikidzwa yakamisikidzwa yePostgreSQL dhatabhesi isina mareferensi kune iyo sosi dhatabhesi kana replication scheme (sch_chameleon).

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

Kana uchida, unogona kushandisa mirairo inotevera kudzima iyo yekutanga gadziriso uye yekudzokorora chirongwa.

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

Zvakanakira pg_chameleon

Easy setup uye kugadzirisa.
Kugadzirisa zviri nyore uye tsvaga anomalies nemameseji akajeka ekukanganisa.
Mamwe matafura akakosha anogona kuwedzerwa kudzokororo mushure mekutanga pasina kushandura yakasara yekumisikidza.
Zvinogoneka kugadzirisa akawanda dhatabhesi dhatabhesi kune imwechete chinangwa dhatabhesi, uye izvi zvinobatsira zvakanyanya kana iwe uri kusanganisa data kubva kune imwe kana akawanda MySQL dhatabhesi kuita imwechete PostgreSQL dhatabhesi.
Haufanire kudzokorora matafura akasarudzwa.

Zvakaipa zve pg_chameleon

Inongotsigirwa neMySQL 5.5 uye pamusoro sesosi uye PostgreSQL 9.5 uye pamusoro senge dhatabhesi yechinangwa.
Tafura yega yega inofanirwa kunge iine kiyi yekutanga kana yakasarudzika, zvikasadaro matafura anotangwa panguva yeinit_replica maitiro asi haana kudzokororwa.
Imwe-nzira yekudzokorora - chete kubva kuMySQL kuenda kuPostgreSQL. Nokudaro, yakakodzera chete kudunhu re "active-passive".
Iyo sosi inogona kungova dhatabhesi reMySQL, uye rutsigiro rwePostgreSQL dhatabhesi sesosi inongoyedza uye ine zvisingakwanisi (dzidza zvakawanda pano)

Mhinduro dze pg_chameleon

Nzira yekudzokorora mu pg_chameleon yakanakira kutamisa dhatabhesi kubva kuMySQL kuenda kuPostgreSQL. Chinonyanya kukosha ndechekuti kudzokorora inzira imwe chete, saka vashandi vepa database havafanirwe kuda kuishandisa kune chero chinhu kunze kwekutama. Asi dambudziko rekudzokorora-nzira imwe rinogona kugadziriswa neimwe yakavhurika sosi chishandiso - SymmetricDS.

Verenga zvakawanda muzvinyorwa zvepamutemo pano. Rubatsiro rwemutsara wekuraira runogona kuwanikwa pano.

Pamusoro peSymmetricDS

SymmetricDS chishandiso chakavhurika sosi inodzokorora chero dhatabhesi kune chero yakajairika dhatabhesi: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird uye mamwe makore dhatabhesi zviitiko, semuenzaniso Redshift, uye Azure, etc. Anowanikwa maficha: dhatabhesi uye faira kuwiriranisa, akawanda-tenzi dhatabhesi kudzokororwa, kusefa kuwiriranisa, shanduko uye zvimwe. Ichi chishandiso cheJava uye chinoda kuburitswa kwakajairwa kweJRE kana JDK (vhezheni 8.0 kana yepamusoro). Pano, shanduko yedata kune zvinokonzeresa mune dhatabhesi inogona kurekodhwa uye kutumirwa kune yakakodzera dhatabhesi inotangwa nenzira yemabhechi.

SymmetricDS maitiro

Icho chishandiso ipuratifomu yakazvimirira, zvichireva maviri kana anopfuura akasiyana dhatabhesi anogona kuchinjanisa data.
Relational dhatabhesi inowiriraniswa uchishandisa data shanduko marekodhi, nepo faira-yakavakirwa dhatabhesi inoshandisa faira kuwiriranisa.
Nzira mbiri-kudzokorodza uchishandisa Push uye Dhonza nzira dzakavakirwa pane seti yemitemo.
Kufambiswa kwedata kunogoneka pane yakachengeteka uye yakaderera-bandwidth network.
Kudzoreredza otomatiki kana node dzichitangazve kushanda mushure mekutadza uye otomatiki kugadzirisa kusawirirana.
Cloud inoenderana uye ine simba yekuwedzera maAPI.

Muenzaniso:

SymmetricDS inogona kugadzirwa mune imwe yesarudzo mbiri:
A tenzi (mubereki) node inoronga nepakati kudzokorora data pakati penhapwa mbiri (mwana) node, uye kutaurirana pakati pemanodhi emwana kunoitika chete kuburikidza nemubereki.
Node inoshanda (Node 1) inogona kutaurirana kuti idzokorore neimwe inoshanda node (Node 2) isina murevereri.

Mune ese ari maviri sarudzo, kuchinjanisa data kunoitika uchishandisa Push uye Dhonza. Mumuenzaniso uyu tichafunga nezve inoshanda-inoshanda gadziriso. Zvinotora nguva yakareba kuti utsanangure dhizaini yese, saka ita tsvakiridzo yako. gwarakuti udzidze zvakawanda nezve SymmetricDS mudziyo.

Kuisa SymmetricDS iri nyore: dhawunirodha yakavhurika sosi vhezheni yezip faira kubva pano uye bvisa kwaunoda. Tafura iri pazasi inopa ruzivo nezve nzvimbo yekumisikidza uye vhezheni yeSymmetricDS mumuenzaniso uyu, pamwe neshanduro yedatabase, shanduro dzeLinux, IP kero, uye madoko emanodhi ese ari maviri.

Host
vm1
vm2

OS shanduro
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64

DB server shanduro
MySQL 5.7.26
PostgreSQL 10.5

DB port
3306
5832

IP kero
192.168.1.107
192.168.1.112

SymmetricDS shanduro
SymmetricDS 3.9
SymmetricDS 3.9

SymmetricDS yekuisa nzira
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20

SymmetricDS node zita
corp-000
chitoro-001

Pano tinoisa SymmetricDS mu /usr/local/symmetric-server-3.9.20, uye subdirectories dzakasiyana-siyana uye mafaira achachengetwa ipapo. Isu tiri kufarira masampuli uye injini subdirectories. Iyo samples dhairekitori ine mienzaniso yekumisikidza mafaera ane node zvivakwa, pamwe nemuenzaniso SQL zvinyorwa kuti iwe utange nekukurumidza.

Mune iyo samples dhairekitori tinoona matatu ekugadzirisa mafaera ane node zvivakwa - zita rinoratidza chimiro cheiyo node mune imwe chirongwa.

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

SymmetricDS ine ese anodiwa ekugadzirisa mafaera ekutanga 3-node dhizaini (sarudzo 1), uye iwo mafaera akafanana anogona kushandiswa 2-node dhizaini (sarudzo 2). Kopa iyo inodiwa yekumisikidza faira kubva kune samples dhairekitori kune injini pane vm1 host. Zvinoitika seizvi:

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

Iyi node muSymmetricDS kumisikidzwa inonzi corp-000, uye dhatabhesi yekubatanidza inobatwa nemysql jdbc mutyairi, anoshandisa tambo yekubatanidza pamusoro uye magwaro ekupinda. Isu tinobatana kune replica_db dhatabhesi uye matafura achagadzirwa panguva yekugadzira schema. sync.url inoratidza pekubata node yekuyananisa.

Node 2 pane host vm2 inogadziriswa sechitoro-001 uye iyo yese inotsanangurwa mune node.properties faira pazasi. Node chitoro-001 inomhanyisa iyo PostgreSQL dhatabhesi uye pgdb_replica ndiyo yekudzokorora dhatabhesi. registration.url inobvumira host vm2 kubata host vm1 uye kugamuchira zvigadziriso kubva kwairi.

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

Muenzaniso wakapera weSymmetricDS une paramita yekumisikidza nzira-mbiri yekudzokorodza pakati pemasevha maviri e database (node ​​mbiri). Matanho ari pasi apa anoitwa pane host vm1 (corp-000), iyo ichagadzira muenzaniso schema ine 4 matafura. Wobva wamhanya gadzira-sym-matafura ane symadmin yekuraira inogadzira dhairekitori matafura uko mitemo negwara rekudzokorora pakati pemanodhi zvichachengetwa. Pakupedzisira, data yemuenzaniso inoiswa mumatafura.

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

Mumuenzaniso, chinhu uye item_selling_price matafura anogadziriswa otomatiki kuti adzokorore kubva ku corp-000 kuenda kuchitoro-001, uye matafura ekutengesa (sale_transaction and sale_return_line_item) anogadziriswa otomatiki kuti adzokorore kubva kuchitoro-001 kuenda kune corp-000. Iye zvino tinogadzira schema muPostgreSQL dhatabhesi pane host vm2 (chitoro-001) kuigadzirira kuti igamuchire data kubva ku corp-000.

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

Ita shuwa yekutarisa kuti iyo MySQL dhatabhesi pavm1 ine mienzaniso matafura uye SymmetricDS catalogue matafura. Ziva kuti maSymmetricDS system matafura (prefixed with sym_) arikungowanikwa pane node corp-000 nekuti ndipo patakamhanyisa gadzira-sym-tafura yekuraira uye tichange tichibata kudzokorora. Uye mune dhatabhesi pane node chitoro-001 pachave ne 4 muenzaniso matafura pasina data.

Zvose. Iyo nharaunda yakagadzirira kumhanya sym server maitiro pane ese node sezvakaratidzwa pazasi.

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

Mapinda egiyo anotumirwa kune yekumashure faira faira (symmetric.log) mune matanda folda mudhairekitori inoiswa SymmetricDS, pamwe neyakajairwa kubuda. Iyo sym server ikozvino inogona kutangwa pane node chitoro-001.

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

Kana iwe uchimhanyisa sym server process pane vm2 host, ichagadzirawo SymmetricDS catalogue matafura muPostgreSQL dhatabhesi. Kana iwe uchimhanyisa sym server process pane ese node, ivo vanobatana pamwe chete kudzokorora data kubva ku corp-000 kuchitoro-001. Kana mushure memasekondi mashoma tikabvunza ese matafura mana pamativi ese, tinozoona kuti kudzokorora kwakabudirira. Kana iwe unogona kutumira iyo bootstrap kune node chitoro-4 kubva ku corp-001 neinotevera rairo.

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

Panguva ino, rekodhi nyowani inoiswa mutafura yezvinhu muMySQL dhatabhesi pane node corp-000 (host: vm1), uye unogona kutarisa kudzokorora kwayo kuPostgreSQL dhatabhesi pane node chitoro-001 (host: vm2). Isu tinoona Dhonza mashandiro ekufambisa data kubva ku corp-000 kuenda kuchitoro-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)

Kuita Push oparesheni yekufambisa data kubva kuchitoro-001 kuenda kucorp-000, tinoisa rekodhi musale_transaction tafura toona kuti kudzokorora kwabudirira.

Mhedzisiro.

Isu tinoona kumisikidzwa kwakabudirira kwemaitiro-mbiri kudzokororwa kwematafura emuenzaniso pakati peMySQL nePostgreSQL dhatabhesi. Kuti umise kudzokorora kwematafura matsva emushandisi, tevera matanho aya: Isu tinogadzira tafura t1 semuenzaniso uye tinogadzirisa mitemo yayo yekudzokorora sezvinotevera. Nenzira iyi isu tinogadzirisa chete kudzokorora kubva ku corp-000 kuenda kuchitoro-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)

Iyo gadziriso inozoziviswa nezve schema shanduko, ndiko kuti, kuwedzerwa kwetafura nyowani, uchishandisa symadmin command ine sync-inokonzeresa nharo, iyo inodzokorora zvinokonzeresa kumepu tsananguro yetafura. send-schema inoitiswa kutumira schema shanduko kune node chitoro-001, uye kudzokorora kwetafura t1 kunogadziriswa.

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

Mabhenefiti eSymmetricDS

Kuisa nyore uye kugadzirisa, kusanganisira yakagadzirira-yakagadzirwa seti yemafaira ane paramita yekugadzira matatu-node kana maviri-node wedunhu.
Cross-platform databases uye kusununguka kwepuratifomu, kusanganisira maseva, malaptop uye nharembozha.
Dzokorora chero dhatabhesi kune chero imwe dhatabhesi munharaunda, paWAN kana mugore.
Kugona kwekushanda kwakaringana neakati wandei dhatabhesi kana akati wandei zviuru zvekudzokorora zviri nyore.
Yakabhadharwa vhezheni ine GUI uye yakanakisa rutsigiro.

Zvakaipa zveSymmetricDS

Iwe unofanirwa kutsanangura nemaoko mitemo uye kutungamira kwekudzokorora pamutsara wekuraira kuburikidza neSQL zvirevo kurodha matafura ekhathalogi, izvo zvinogona kunetsa.
Kugadzira matafura akawanda ekudzokorora kunogona kunetesa kunze kwekunge iwe washandisa zvinyorwa kugadzira SQL zvirevo zvinotsanangura mitemo uye gwara rekudzokorora.
Pane ruzivo rwakawandisa rwuri kunyorwa mumatanda, uye dzimwe nguva unoda kurongedza faira regi kuti risatore nzvimbo yakawandisa.

Mhinduro dzeSymmetricDS

SymmetricDS inokutendera iwe kumisikidza nzira mbiri-kudzokorodza pakati pembiri, nhatu, kana kunyange zviuru zvinoverengeka node kuti udzokorore uye kuwiriranisa mafaera. Ichi chishandiso chakasiyana chinozvimiririra kuita mabasa mazhinji, senge otomatiki data kudzoreredza mushure menguva yakareba yekudzikira pane node, yakachengeteka uye inobudirira dhata kuchinjanisa pakati node kuburikidza neHTTPS, otomatiki kukakavara manejimendi zvichibva pane seti yemitemo, nezvimwewo SymmetricDS inoita kudzokorora pakati pechero dhatabhesi, saka, inogona kushandiswa kune akasiyana siyana mamiriro, anosanganisira kutama, kutama, kugovera, kusefa, uye shanduko yedata pamapuratifomu.

Muenzaniso wakavakirwa pamukuru quick guide kubudikidza SymmetricDS. IN bhuku rekushandisa Inotsanangura zvakadzama pfungwa dzakasiyana-siyana dzakabatanidzwa mukugadzirisa kudzokorora neSymmetricDS.

Source: www.habr.com

Voeg