Kubwerezabwereza pakati pa PostgreSQL ndi MySQL

Kubwerezabwereza pakati pa PostgreSQL ndi MySQL

Ndifotokozeranso kubwerezana pakati pa PostgreSQL ndi MySQL, komanso njira zokhazikitsira kubwereza kwapakati pakati pa ma seva awiri a database. Nthawi zambiri, nkhokwe zotsatiridwa modutsa zimatchedwa homogeneous, ndipo ndi njira yabwino yosamuka kuchokera pa seva imodzi ya RDBMS kupita ku ina.

Ma database a PostgreSQL ndi MySQL nthawi zambiri amawonedwa ngati achibale, koma ndi zowonjezera zowonjezera amapereka kuthekera kwa NoSQL. Apa tikambirana kubwerezana pakati pa PostgreSQL ndi MySQL kuchokera pamalingaliro a DBMS.

Sitidzafotokozera zonse zamkati, mfundo zoyambira kuti mupeze lingaliro lakusintha kubwereza pakati pa ma seva a database, zabwino, zoperewera ndi milandu yogwiritsira ntchito.

Nthawi zambiri, kubwereza pakati pa ma seva awiri ofanana a database kumachitika mwina munjira ya binary kapena kugwiritsa ntchito mafunso pakati pa mbuye (aka wosindikiza, mbuye, kapena wogwira ntchito) ndi kapolo (wolembetsa, woyimirira, kapena wopanda). Cholinga cha kubwereza ndikupereka kopi yeniyeni ya database ya masters kumbali ya akapolo. Pachifukwa ichi, deta imasamutsidwa kuchokera kwa mbuye kupita ku kapolo, ndiko kuti, kuchoka ku ntchito mpaka kungokhala chete, chifukwa kubwereza kumangochitika mbali imodzi. Koma mutha kukhazikitsa kubwereza pakati pa nkhokwe ziwiri mbali zonse ziwiri, kuti deta isamutsidwe kuchokera ku kapolo kupita ku master mu kasinthidwe kogwira ntchito. Zonsezi, kuphatikizapo kubwerezabwereza, ndizotheka pakati pa ma seva awiri kapena angapo ofanana a database.

Kukonzekera kofotokozedwa kumatheka pakati pa ma seva osiyanasiyana a database. Seva ikhoza kukonzedwa kuti ivomereze deta yobwerezedwa kuchokera ku seva ina yachinsinsi ndikusungabe zithunzi zenizeni za deta yobwerezedwa. MySQL ndi PostgreSQL amapereka zambiri mwazosinthazi m'nyumba kapena kudzera muzowonjezera za gulu lachitatu, kuphatikizapo njira zamabizinesi, kutseka kwa disk, ndi ndondomeko- ndi mizere.

Kubwerezabwereza pakati pa MySQL ndi PostgreSQL kumafunika kuti musamuke kamodzi kuchokera pa seva imodzi kupita ku ina. Ma databasewa amagwiritsa ntchito ma protocol osiyanasiyana, kotero sizingatheke kuwalumikiza mwachindunji. Kuti mukhazikitse kusinthana kwa data, mutha kugwiritsa ntchito chida chakunja chotseguka, mwachitsanzo pg_chameleon.

Kodi pg_chameleon ndi chiyani

pg_chameleon ndi njira yobwereza kuchokera ku MySQL kupita ku PostgreSQL ku Python 3. Imagwiritsa ntchito laibulale yotseguka ya mysql-replication, komanso ku Python. Zithunzi zam'mizere zimachotsedwa pamatebulo a MySQL ndikusungidwa ngati zinthu za JSONB mu database ya PostgreSQL, kenako ndikusinthidwa ndi ntchito ya pl/pgsql ndikupangidwanso mu database ya PostgreSQL.

Zochitika za pg_chameleon

Ma schemas angapo a MySQL ochokera kugulu lomwelo amatha kusinthidwanso ku database imodzi ya PostgreSQL mumndandanda umodzi mpaka ambiri.
Mayina a gwero ndi chandamale sangafanane.
Deta yobwereza ikhoza kubwezedwa kuchokera pazithunzi za MySQL zomwe zawonongeka.
Matebulo omwe sangathe kubwereza kapena kutulutsa zolakwika amachotsedwa.
Ntchito iliyonse yobwerezabwereza imayendetsedwa ndi ma daemoni.
Kuwongolera kudzera pa magawo ozikidwa pa YAML ndi mafayilo osintha.

Chitsanzo:

Wolandira
vm1
vm2

Mtundu wa OS
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64

Mtundu wa seva wa DB
MySQL 5.7.26
PostgreSQL 10.5

DB port
3306
5433

Adilesi ya IP
192.168.56.102
192.168.56.106

Kuti muyambe, konzani zida zonse zofunika kukhazikitsa pg_chameleon. Chitsanzochi chimayika Python 3.6.8, yomwe imapanga ndi kuyambitsa chilengedwe.

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

Mukatha kukhazikitsa Python3.6, muyenera kumaliza zofunikira zotsalira, monga kupanga ndi kuyambitsa chilengedwe. Kuphatikiza apo, gawo la pip limasinthidwa kukhala mtundu waposachedwa ndipo limagwiritsidwa ntchito kukhazikitsa pg_chameleon. Malamulo omwe ali pansipa mwadala pg_chameleon 2.0.9, ngakhale mtundu waposachedwa ndi 2.0.10. Izi ndi zofunika kupewa nsikidzi zatsopano mu Baibulo kusinthidwa.

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

Kenako timayitana pg_chameleon (chameleon ndi lamulo) ndi mkangano wa set_configuration_files kuti pg_chameleon ndikupanga zolemba zosasintha ndi mafayilo osinthira.

(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

Tsopano tikupanga kopi ya config-example.yml monga default.yml kotero kuti ikhale fayilo yosasinthika. Fayilo yosinthira yachitsanzo ichi yaperekedwa pansipa.

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

Fayilo yosinthira muchitsanzo ichi ndi fayilo ya pg_chameleon yokhala ndi zosintha zazing'ono kuti zigwirizane ndi malo oyambira ndi omwe mukufuna, ndipo pansipa pali chithunzithunzi cha magawo osiyanasiyana a fayilo yosinthira.

Mu fayilo yosinthika ya default.yml pali gawo la zoikamo zapadziko lonse lapansi, komwe mungayang'anire zoikamo monga malo a fayilo yotsekera, malo a zipika, nthawi yosungiramo zipika, ndi zina zotero. Kenako pakubwera gawo lowonjezera la mtundu, kumene mndandanda wa malamulo owonjezera mitundu panthawi yobwerezabwereza. Chitsanzocho chimasinthidwa kukhala lamulo lowonjezera lomwe limasintha tinyint(1) kukhala mtengo wa boolean. Mu gawo lotsatira, timafotokozera tsatanetsatane wolumikizana ndi database yomwe mukufuna. Kwa ife, iyi ndi database ya PostgreSQL, yosankhidwa pg_conn. M'gawo lomaliza, tikuwonetsa magwero a data, ndiko kuti, magawo olumikizirana ndi gwero lazinthu, dongosolo la mapu pakati pa gwero ndi ma database omwe mukufuna, matebulo omwe amayenera kudumpha, nthawi yodikira, kukumbukira, kukula kwa phukusi. Dziwani kuti "magwero" ndi ochuluka, kutanthauza kuti titha kuwonjezera nkhokwe zingapo ku database imodzi ya chandamale kuti tikhazikitse masinthidwe ambiri.

Mwachitsanzo database world_x ili ndi matebulo 4 okhala ndi mizere yomwe gulu la MySQL limapereka ngati zitsanzo. Iwo akhoza dawunilodi apa. Tsamba lachitsanzo limabwera ngati malo osungiramo phula komanso oponderezedwa okhala ndi malangizo opangira ndi kutumiza mizere.

M'ma database a MySQL ndi PostgreSQL, wogwiritsa ntchito wapadera amapangidwa ndi dzina lomwelo usr_replica. Mu MySQL, amapatsidwa ufulu wowonjezera wowerengera pamatebulo onse ojambulidwa.

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;

Kumbali ya PostgreSQL, db_replica database imapangidwa yomwe ingavomereze zosintha kuchokera ku database ya MySQL. Wogwiritsa usr_replica mu PostgreSQL amangokhazikitsidwa ngati eni ake ma schemas awiri, pgworld_x ndi sch_chameleon, omwe ali ndi matebulo obwerezabwereza komanso matebulo obwereza, motsatana. The create_replica_schema mkangano ndi amene ali ndi udindo kasinthidwe basi, monga muwona pansipa.

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

Dongosolo la database la MySQL limakonzedwa ndi zosintha zina kuti likonzekere kubwereza monga tawonera pansipa. Muyenera kuyambitsanso seva ya database kuti zosintha zichitike.

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

Tsopano ndikofunikira kuyang'ana kulumikizana kwa ma seva onse a database kuti pasakhale zovuta mukamagwiritsa ntchito pg_chameleon.

Pa PostgreSQL node:

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

Pa MySQL node:

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

Malamulo atatu otsatira a pg_chameleon (chameleon) amakonzekeretsa chilengedwe, onjezani gwero, ndikuyambitsanso chofananacho. Kukangana kwa create_replica_schema kwa pg_chameleon kumapanga schema yokhazikika (sch_chameleon) ndi schema yobwereza (pgworld_x) mu database ya PostgreSQL, monga tafotokozera kale. Mtsutso wa add_source umawonjezera gwero lachidziwitso ku kasinthidwe powerenga fayilo yokonzekera (default.yml), ndipo kwa ife ndi mysql, ndipo init_replica imayambitsa kusinthika kutengera magawo omwe ali mu fayilo yokonzekera.

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

Kutuluka kwa malamulo atatuwa kumasonyeza bwino lomwe kuti anaphedwa bwino. Zowonongeka zilizonse kapena zolakwika za syntax zimanenedwa m'mawu osavuta, omveka bwino okhala ndi malingaliro amomwe mungakonzere vutoli.

Pomaliza, timayamba kubwereza pogwiritsa ntchito start_replica ndikulandila uthenga wopambana.

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

Mkhalidwe wobwereza ukhoza kufunsidwa pogwiritsa ntchito mkangano wa show_status, ndipo zolakwika zitha kuwonedwa pogwiritsa ntchito mkangano wa show_errors.

Zotsatira.

Monga tanenera kale, ntchito iliyonse yobwerezabwereza imayendetsedwa ndi ma daemoni. Kuti tiwone, timafunsa ndondomeko ya ndondomeko ndi Linux ps lamulo, monga momwe tawonetsera pansipa.

Zotsatira.

Kubwereza sikumaganiziridwa kukhala kokonzedweratu mpaka titayesa mu nthawi yeniyeni, monga momwe tawonetsera pansipa. Timapanga tebulo, kuyika zolemba zingapo mu database ya MySQL, ndikuyitanitsa mkangano wa sync_tables mu pg_chameleon kuti tisinthe ma daemoni ndikufanizira tebulo ndi zolemba ku database ya 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.

Kuti titsimikizire zotsatira zoyesa, timafunsa tebulo kuchokera ku database ya PostgreSQL ndikutulutsa mizere.

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

Ngati tikuchita kusamuka, malamulo otsatirawa a pg_chameleon adzakhala mathero ake. Malamulowa akuyenera kuchitidwa titatsimikiza kuti mizere ya matebulo onse omwe akutsata yatsatiridwa, ndipo zotsatira zake zidzakhala nkhokwe ya PostgreSQL yosamutsidwa bwino popanda zonena za nkhokwe kapena dongosolo lobwerezabwereza (sch_chameleon).

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

Ngati mungafune, mutha kugwiritsa ntchito malamulo otsatirawa kuti muchotse dongosolo loyambilira ndi kubwereza.

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

Ubwino wa pg_chameleon

Kukonzekera kosavuta ndi kasinthidwe.
Kuthetsa mavuto mosavuta ndi kuzindikira zolakwika ndi mauthenga omveka bwino.
Matebulo apadera owonjezera akhoza kuwonjezeredwa kubwereza pambuyo poyambitsa popanda kusintha zina zonse.
Ndizotheka kukonza nkhokwe zingapo za database imodzi, ndipo izi ndizothandiza kwambiri ngati mukuphatikiza deta kuchokera ku database imodzi kapena zingapo za MySQL kukhala database imodzi ya PostgreSQL.
Simukuyenera kubwereza matebulo osankhidwa.

Kuipa kwa pg_chameleon

Amangothandizidwa ndi MySQL 5.5 ndi pamwambapa monga gwero ndi PostgreSQL 9.5 komanso pamwamba ngati chosungira chandamale.
Gome lirilonse liyenera kukhala ndi kiyi yoyamba kapena yapadera, apo ayi matebulo amayambika panthawi ya init_replica koma sanabwerezedwe.
Kubwereza kwa njira imodzi - kuchokera ku MySQL kupita ku PostgreSQL. Chifukwa chake, ndizoyenera kudera la "active-passive".
Gwero litha kukhala nkhokwe ya MySQL yokha, komanso chithandizo cha database ya PostgreSQL ngati gwero ndikungoyesa komanso zoperewera (phunzirani zambiri apa)

Zotsatira za pg_chameleon

Njira yobwereza mu pg_chameleon ndi yabwino kusamutsa database kuchokera ku MySQL kupita ku PostgreSQL. Choyipa chachikulu ndichakuti kubwereza ndi njira imodzi yokha, kotero akatswiri odziwa zachinsinsi sangafune kugwiritsa ntchito china chilichonse kupatula kusamuka. Koma vuto la kubwereza njira imodzi likhoza kuthetsedwa ndi chida china chotseguka - SymmetricDS.

Werengani zambiri pazolembedwa zovomerezeka apa. Thandizo la mzere wa lamulo lingapezeke apa.

Chidule cha SymmetricDS

SymmetricDS ndi chida chotseguka chomwe chimasindikizanso nkhokwe iliyonse ku database ina iliyonse yodziwika: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird ndi zochitika zina zamtambo, mwachitsanzo, Redshift, ndi Azure, ndi zina. Zomwe zilipo: kulumikizana kwa database ndi mafayilo, kubwereza kwa database yamitundu yambiri, kulunzanitsa kosefedwa, kusintha ndi zina. Ichi ndi chida cha Java ndipo chimafuna kutulutsa kokhazikika kwa JRE kapena JDK (mtundu wa 8.0 kapena apamwamba). Apa, kusintha kwa data kuzinthu zoyambitsa mu nkhokwe ya gwero kumatha kujambulidwa ndikutumizidwa ku database yoyenera yolowera ngati magulu.

Zolemba za SymmetricDS

Chidachi ndi nsanja yodziyimira pawokha, kutanthauza kuti ma database awiri kapena angapo amatha kusinthana deta.
Zosungirako zaubale zimalumikizidwa pogwiritsa ntchito ma rekodi osintha ma data, pomwe nkhokwe zokhazikitsidwa pamafayilo zimagwiritsa ntchito kulunzanitsa mafayilo.
Kubwerezabwereza njira ziwiri pogwiritsa ntchito njira za Push ndi Kokani kutengera malamulo angapo.
Kutumiza kwa data kumatheka pamanetiweki otetezeka komanso otsika kwambiri.
Kuchira kodziwikiratu pamene ma node ayambiranso kugwira ntchito pambuyo polephera komanso kuthetsa mikangano yokha.
Ma API ogwirizana ndi Cloud komanso amphamvu owonjezera.

Chitsanzo:

SymmetricDS ikhoza kukhazikitsidwa mu imodzi mwazosankha ziwiri:
Mbuye (makolo) mfundo yomwe imagwirizanitsa kubwereza deta pakati pa mfundo ziwiri za kapolo (mwana), ndipo kulankhulana pakati pa mfundo za ana kumachitika kudzera mwa kholo.
Node yogwira (Node 1) imatha kulumikizana kuti ibwerezedwe ndi mfundo ina yogwira (Node 2) popanda mkhalapakati.

Muzosankha zonse ziwiri, kusinthana kwa data kumachitika pogwiritsa ntchito Push ndi Kokani. Muchitsanzo ichi tiwona kasinthidwe kogwira ntchito. Zingatenge nthawi yayitali kuti mufotokoze zomanga zonse, choncho fufuzani. kalozerakuti mudziwe zambiri za chipangizo cha SymmetricDS.

Kuyika SymmetricDS ndikosavuta: tsitsani mtundu wa fayilo ya zip kuchokera pano ndipo tulutsani kulikonse kumene mukufuna. Tebulo ili m'munsiyi limapereka zambiri za malo oyikamo ndi mtundu wa SymmetricDS mu chitsanzo ichi, komanso mitundu ya database, mitundu ya Linux, ma adilesi a IP, ndi madoko a node zonse ziwiri.

Wolandira
vm1
vm2

Mtundu wa OS
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64

Mtundu wa seva wa DB
MySQL 5.7.26
PostgreSQL 10.5

DB port
3306
5832

Adilesi ya IP
192.168.1.107
192.168.1.112

Mtundu wa SymmetricDS
SymmetricDS 3.9
SymmetricDS 3.9

Njira yoyika SymmetricDS
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20

Dzina la nodi ya SymmetricDS
corp-000
sitolo-001

Apa timayika SymmetricDS mu /usr/local/symmetric-server-3.9.20, ndipo ma subdirectories osiyanasiyana ndi mafayilo adzasungidwa pamenepo. Tili ndi chidwi ndi zitsanzo ndi ma subdirectories a injini. Tsamba la zitsanzo lili ndi mafayilo osinthika okhala ndi ma node, komanso zolemba za SQL kuti muyambe mwachangu.

Muzolemba zachitsanzo tikuwona mafayilo atatu osinthika okhala ndi node katundu - dzina likuwonetsa mtundu wa node mu chiwembu china.

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

SymmetricDS ili ndi mafayilo onse ofunikira opangira mapangidwe a 3-node (njira 1), ndipo mafayilo omwewo angagwiritsidwe ntchito pakupanga 2-node (njira 2). Koperani fayilo yofunikira yosinthira kuchokera ku chikwatu cha zitsanzo kupita kumainjini omwe ali pa vm1 host host. Zimakhala motere:

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

Node iyi mu kasinthidwe ka SymmetricDS imatchedwa corp-000, ndipo kugwirizana kwa database kumayendetsedwa ndi dalaivala wa mysql jdbc, yemwe amagwiritsa ntchito chingwe cholumikizira pamwambapa ndi zidziwitso zolowera. Timalumikizana ndi nkhokwe ya replica_db ndipo matebulo adzapangidwa panthawi yopanga schema. sync.url ikuwonetsa komwe mungalumikizane ndi node kuti mulunzanitsidwe.

Node 2 pa host vm2 imakonzedwa ngati store-001 ndipo zina zonse zafotokozedwa mu fayilo ya node.properties pansipa. Node store-001 imayendetsa database ya PostgreSQL ndipo pgdb_replica ndiye nkhokwe yobwerezabwereza. registration.url imalola wolandila vm2 kuti alumikizane ndi vm1 ndikulandila zosintha kuchokera pamenepo.

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

Chitsanzo chomalizidwa cha SymmetricDS chili ndi magawo okhazikitsa kubwereza kwa njira ziwiri pakati pa ma seva awiri a database (node ​​ziwiri). Masitepe omwe ali pansipa amachitidwa pa host vm1 (corp-000), yomwe ipanga schema yachitsanzo yokhala ndi matebulo anayi. Kenako kuthamanga kupanga-sym-tables ndi lamulo la symadmin kumapanga matebulo owongolera pomwe malamulo ndi mayendedwe obwereza pakati pa node adzasungidwa. Pomaliza, deta yachitsanzo imalowetsedwa m'matebulo.

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

Muchitsanzo, matebulo a item_selling_price amasinthidwa okha kuti abwerezedwe kuchokera ku corp-000 kupita ku store-001, ndipo matebulo ogulitsa (sale_transaction and sale_return_line_item) amasinthidwa kuti abwerezedwe kuchokera ku store-001 kupita ku corp-000. Tsopano tikupanga schema mu database ya PostgreSQL pa host vm2 (store-001) kuti ikonzekere kulandira deta kuchokera ku corp-000.

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

Onetsetsani kuti mukuwona kuti database ya MySQL pa vm1 ili ndi matebulo achitsanzo ndi matebulo amtundu wa SymmetricDS. Dziwani kuti matebulo a SymmetricDS system (omwe ali ndi sym_) akupezeka pa node corp-000 chifukwa ndipamene timayendetsa lamulo la make-sym-tables ndipo tikhala tikuwongolera kubwereza. Ndipo mu database pa node store-001 padzakhala 4 zitsanzo matebulo opanda deta.

Zonse. Chilengedwe ndichokonzeka kuyendetsa njira za seva ya sym pamagulu onse awiri monga momwe zilili pansipa.

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

Zolemba zolembera zimatumizidwa ku fayilo yakumbuyo (symmetric.log) mufoda ya zipika mu bukhu lomwe SymmetricDS imayikidwa, komanso kutulutsa kokhazikika. Seva ya sym tsopano ikhoza kukhazikitsidwa pa node store-001.

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

Ngati mutayendetsa ndondomeko ya seva ya sym pa vm2 host host, idzapanganso matebulo a SymmetricDS catalog mu database ya PostgreSQL. Ngati muyendetsa njira ya seva ya sym pamagulu onse awiri, amalumikizana wina ndi mzake kuti abwereze deta kuchokera ku corp-000 kupita ku store-001. Ngati patadutsa masekondi angapo tifunsa matebulo onse 4 mbali zonse ziwiri, tiwona kuti kubwereza kunapambana. Kapena mutha kutumiza bootstrap ku node store-001 kuchokera ku corp-000 ndi lamulo ili.

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

Pakadali pano, mbiri yatsopano imayikidwa patebulo lazinthu mu database ya MySQL pa node corp-000 (host: vm1), ndipo mutha kuyang'ana kubwereza kwake ku database ya PostgreSQL pa node store-001 (host: vm2). Tikuwona ntchito ya Pull kusuntha deta kuchokera ku corp-000 kupita 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)

Kuti tichite ntchito ya Push kuti musunthire data kuchokera ku store-001 kupita ku corp-000, timayika zolembedwa mu sale_transaction table ndikuwonetsetsa kuti kubwereza kwabwino.

Zotsatira.

Tikuwona kukhazikitsidwa kopambana kwa njira ziwiri zobwerezabwereza za matebulo achitsanzo pakati pa ma database a MySQL ndi PostgreSQL. Kuti mukhazikitse kubwereza kwa matebulo atsopano, tsatirani izi: Timapanga tebulo t1 mwachitsanzo ndikukonzekera malamulo ake obwereza motere. Mwanjira iyi timakonza kubwereza kokha kuchokera ku corp-000 kupita 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)

Kukonzekera kumadziwitsidwa za kusintha kwa schema, ndiko kuti, kuwonjezera pa tebulo latsopano, pogwiritsa ntchito lamulo la symadmin ndi sync-triggers mkangano, womwe umapanganso zoyambitsa kuti zifotokoze matanthauzo a tebulo. send-schema imachitidwa kuti itumize kusintha kwa schema ku node store-001, ndipo kubwereza kwa tebulo t1 kumakonzedwa.

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

Ubwino wa SymmetricDS

Kukhazikitsa kosavuta ndi kasinthidwe, kuphatikiza mafayilo opangidwa okonzeka okhala ndi magawo opangira ma node atatu kapena ma node awiri.
Ma database a nsanja ndi kudziyimira pawokha, kuphatikiza ma seva, ma laputopu ndi zida zam'manja.
Lembaninso nkhokwe iliyonse ku database ina iliyonse kwanuko, pa WAN kapena pamtambo.
Kuthekera kwa ntchito yabwino yokhala ndi nkhokwe zingapo kapena masauzande angapo kuti mubwereze bwino.
Mtundu wolipidwa ndi GUI komanso chithandizo chabwino kwambiri.

Zoyipa za SymmetricDS

Muyenera kufotokozera pamanja malamulo ndi mayendedwe obwereza pamzere wamalamulo kudzera mu mawu a SQL kuti mutsegule matebulo a catalog, zomwe zingakhale zovuta.
Kukhazikitsa matebulo ambiri obwerezabwereza kungakhale kovuta pokhapokha mutagwiritsa ntchito malemba kuti mupange mawu a SQL omwe amatanthauzira malamulo ndi malangizo obwereza.
Pali zambiri zomwe zimalembedwa m'zipika, ndipo nthawi zina mumafunika kukonza fayilo ya chipika kuti isatenge malo ochulukirapo.

Zotsatira za SymmetricDS

SymmetricDS imakupatsani mwayi wokhazikitsa njira ziwiri, zitatu, kapena masauzande angapo kuti mubwereze ndikugwirizanitsa mafayilo. Ichi ndi chida chapadera chomwe chimagwira ntchito zambiri pawokha, monga kubwezeretsa deta yodziwikiratu pakatha nthawi yayitali pa node, kusinthanitsa deta yotetezeka komanso yothandiza pakati pa ma node kudzera pa HTTPS, kuyendetsa mikangano yodziwikiratu potengera ndondomeko ya malamulo, etc. SymmetricDS imachita kubwerezabwereza pakati pa nkhokwe iliyonse, motero, kungagwiritsidwe ntchito pazinthu zosiyanasiyana, kuphatikizapo kusamuka, kusamuka, kugawa, kusefa, ndi kusintha kwa deta pamapulatifomu.

Chitsanzo chachokera pa mkuluyo kalozera wofulumira ndi SymmetricDS. MU buku la ogwiritsa ntchito Imafotokoza mwatsatanetsatane malingaliro osiyanasiyana omwe akukhudzidwa pakukhazikitsa kubwereza ndi SymmetricDS.

Source: www.habr.com

Kuwonjezera ndemanga