Di navbera PostgreSQL û MySQL de dubarekirina xaçê

Di navbera PostgreSQL û MySQL de dubarekirina xaçê

Ez ê di navbera PostgreSQL û MySQL de, û hem jî awayên sazkirina hevberdanê di navbera her du serverên databasê de xêz bikim. Bi gelemperî, databasên xaça-kopîkirî wekî homojen têne gotin, û ew rêbazek hêsan e ku ji serverek RDBMS berbi yekî din ve diçe.

Databasên PostgreSQL û MySQL bi gelemperî têkildar têne hesibandin, lê bi pêvekên din re ew kapasîteyên NoSQL pêşkêş dikin. Li vir em ê dubarekirina di navbera PostgreSQL û MySQL de ji perspektîfek DBMS-ya têkildar nîqaş bikin.

Em ê tevahiya xebata hundurîn, tenê prensîbên bingehîn rave nekin, da ku hûn ramanek mîhengkirina dubarekirinê di navbera serverên databasê de, avantaj, sînorkirin û dozên bikar bînin.

Bi gelemperî, dubarekirina di navbera du serverên databasê yên yeksan de di moda binary de an jî bi karanîna pirsnameyên di navbera masterek (navdêr, weşanger, master, an çalak) û xulamek (aboneyek, standby, an pasîf) de tête kirin. Armanca dubarekirinê peydakirina kopiyek rast-ê ya databasa masterê li ser milê xulam e. Di vê rewşê de, dane ji master bo xulamê, ango, ji çalak berbi pasîf tê veguheztin, ji ber ku dubarekirin tenê di yek alî de tête kirin. Lê hûn dikarin di navbera du databasan de di her du rêgezan de dubarekirinê saz bikin, da ku dane ji xulamê veguhezînin masterê di veavakirinek çalak-aktîf de. Hemî van, di nav de replikasyona cascading, di navbera du an bêtir pêşkêşkerên databasê yên wekhev de mimkun e. Veavakirina çalak-aktîf an çalak-pasîf bi hewcedarî, hebûna van kapasîteyên di veavakirina destpêkê de an jî karanîna çareseriyên veavakirina derveyî û danûstandinên heyî ve girêdayî ye.

Veavakirina diyarkirî di navbera serverên databasê yên cihêreng de gengaz e. Pêşkêşkar dikare were mîheng kirin da ku daneyên dubarekirî ji serverek databasa din qebûl bike û hîn jî dîmenên rast-demê yên daneyên dubare biparêze. MySQL û PostgreSQL piraniya van veavakirinan di hundurê malê de an bi pêvekên partiya sêyemîn re pêşkêş dikin, di nav de rêbazên têketinê yên binary, girtina dîskê, û rêbazên binavkirî û rêzikan.

Ji bo veguheztina yek-carî ji serverek databasê ber bi ya din ve dubarekirina xaçê di navbera MySQL û PostgreSQL de hewce ye. Van databases protokolên cihêreng bikar tînin, ji ber vê yekê ne gengaz e ku meriv rasterast bi wan ve girêbide. Ji bo danûstendina daneyan, hûn dikarin amûrek çavkaniyek vekirî ya derveyî bikar bînin, mînakî pg_chameleon.

pg_chameleon çi ye

pg_chameleon di Python 3-ê de pergalek dubarekirinê ye ji MySQL ber PostgreSQL. Ew pirtûkxaneya çavkaniya vekirî ya mysql-replication bikar tîne, di Python de jî. Wêneyên rêzê ji tabloyên MySQL têne derxistin û wekî tiştên JSONB di databasa PostgreSQL de têne hilanîn, û dûv re ji hêla fonksiyona pl/pgsql ve têne şîfrekirin û di databasa PostgreSQL de têne hilberandin.

Taybetmendiyên pg_chameleon

Gelek şemayên MySQL yên ji heman komê dikarin di veavakirinek yek-bi-gelek de li databasa PostgreSQL-ya yek-armanc werin dubare kirin.
Navên şema çavkanî û armanc nikarin yek bin.
Daneyên dubarekirinê dikare ji kopiyek MySQL-ya kaskadî were derxistin.
Tabloyên ku nikaribin dubare bikin an xeletiyan çêbikin têne derxistin.
Her fonksiyonek dubarekirinê ji hêla şeytan ve tê kontrol kirin.
Bi rêgezên YAML-based û pelên vesazkirinê ve kontrol bikin.

Nimûne:

Mazûban
vm1
vm2

Guhertoya OS
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64

Guhertoya servera DB
MySQL 5.7.26
PostgreSQL 10.5

port DB
3306
5433

Navnîşana IP
192.168.56.102
192.168.56.106

Ji bo destpêkirinê, hemî hêmanên pêwîst amade bikin ku pg_chameleon saz bikin. Ev mînak Python 3.6.8 saz dike, ku hawîrdora virtual diafirîne û çalak dike.

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

Piştî ku bi serfirazî Python3.6 saz kirin, hûn hewce ne ku hewcedariyên mayî temam bikin, wek afirandina û çalakkirina jîngehek virtual. Wekî din, modula pip bi guhertoya herî paşîn tê nûve kirin û ji bo sazkirina pg_chameleon tê bikar anîn. Fermanên jêrîn bi mebest pg_chameleon 2.0.9 saz dikin, her çend guhertoya herî dawî 2.0.10 e. Ev pêdivî ye ku ji xeletiyên nû yên di guhertoya nûvekirî de dûr bikevin.

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

Dûv re em bi argumana set_configuration_files gazî pg_chameleon dikin (chameleon fermanek e) da ku pg_chameleon çalak bike û pelrêçan û pelên vesazkirinê yên xwerû biafirîne.

(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

Naha em kopiyek ji config-example.yml wekî default.yml diafirînin da ku ew bibe pelê veavakirina xwerû. Nimûneyek pelê veavakirinê ji bo vê nimûneyê li jêr tê pêşkêş kirin.

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

Pelê veavakirinê di vê nimûneyê de pelek pg_chameleon-a nimûne ye ku bi guheztinên piçûk ve girêdayî ye ku li gorî hawîrdora çavkanî û armancê ye, û li jêr nihêrînek li ser beşên cihêreng ên pelê veavakirinê heye.

Di pela veavakirina default.yml de beşek mîhengên gerdûnî heye, ku hûn dikarin mîhengan wekî cîhê pelê qefilandinê, cîhê têketinê, heyama hilanînê ji bo têketin û hwd birêve bibin. Piştre beşa sernavkirina tîpan tê, li wir komek qaîdeyên ji bo serdestkirina cûreyên di dema dubarekirinê de. Nimûne ji qaîdeyek serdest a tîpê re vedigere ku tinyint(1) vediguherîne nirxek boolean. Di beşa paşîn de, em hûrguliyên girêdanê bi databasa armancê re diyar dikin. Di doza me de, ev databasek PostgreSQL ye, ku pg_conn hatî destnîşan kirin. Di beşa paşîn de, em daneya çavkaniyê destnîşan dikin, ango pîvanên pêwendiya databasa çavkaniyê, nexşeya nexşeyê di navbera databasên çavkanî û armancê de, tabloyên ku divê werin avêtin, dema bendê, bîranîn, mezinahiya pakêtê destnîşan dikin. Bala xwe bidinê ku "çavkanî" pirjimar e, tê vê wateyê ku em dikarin databasên pir çavkanî li databasek armancek yekane zêde bikin da ku veavakirinek pir-bi-yek saz bikin.

Mînak databasa world_x 4 tabloyên bi rêzan hene ku civata MySQL wekî mînak pêşkêşî dike. Ew dikare were daxistin vir. Databasa nimûne wekî arşîvek tar û pêçandî bi rêwerzên ji bo çêkirin û anîna rêzan tê.

Di databasên MySQL û PostgreSQL de, bikarhênerek taybetî bi heman navî usr_replica tê afirandin. Di MySQL de, ji hemî tabloyên dubarekirî re mafên xwendinê yên zêde tê dayîn.

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;

Li aliyê PostgreSQL, databasek db_replica tê afirandin ku dê guhartinên ji databasa MySQL qebûl bike. Bikarhêner usr_replica ya di PostgreSQL de bixweber wekî xwediyê du şemayan tê mîheng kirin, pgworld_x û sch_chameleon, ku bi rêzê ve tabloyên dubarekirî yên rastîn û tabloyên pelrêça replikasyonê vedigirin. Argumana create_replica_schema ji bo veavakirina otomatîkî berpirsiyar e, wekî ku hûn ê li jêr bibînin.

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

Databasa MySQL bi hin guhertinên parameterê ve hatî mîheng kirin da ku wê ji bo dubarekirinê wekî ku li jêr tê xuyang kirin amade bike. Pêdivî ye ku hûn servera databasê ji nû ve bidin destpêkirin da ku guheztin bi bandor bibin.

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

Naha girîng e ku hûn pêwendiya bi her du serverên databasê re kontrol bikin da ku dema ku emrên pg_chameleon dimeşînin pirsgirêk dernekevin.

Li ser girêka PostgreSQL:

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

Li ser girêka MySQL:

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

Sê fermanên paşîn ên pg_chameleon (chameleon) jîngehê amade dikin, çavkaniyê lê zêde dikin û replikayê dest pê dikin. Argumenta create_replica_schema ji pg_chameleon re di databasa PostgreSQL de şemayek xwerû (sch_chameleon) û şemayek dubarekirinê (pgworld_x) diafirîne, wekî ku me berê jî behs kir. Argumenta add_source bi xwendina pelê veavakirinê (default.yml) databasa çavkaniyekê li veavakirinê zêde dike, û di rewşa me de ew mysql ye, û init_replica veavakirinê li gorî pîvanên di pelê veavakirinê de dest pê dike.

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

Hilberîna van sê fermanan bi eşkere destnîşan dike ku ew bi serfirazî hatine darve kirin. Her têkçûn an xeletiyên hevoksaziyê di peyamên hêsan û zelal de bi serişteyên li ser meriv çawa pirsgirêkê çareser dike têne ragihandin.

Di dawiyê de, em bi karanîna start_replica dest bi dubarekirinê dikin û peyamek serfiraziyê distînin.

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

Rewşa dubarekirinê bi karanîna argumana show_status dikare were pirsîn, û xeletî dikarin bi karanîna argumana show_errors werin dîtin.

Encam

Wekî ku me berê jî got, her fonksiyonek dubarekirinê ji hêla şeytan ve tê kontrol kirin. Ji bo dîtina wan, em li tabloya pêvajoyê bi fermana Linux ps dipirsin, wekî ku li jêr tê xuyang kirin.

Encam

Heya ku em wê di wextê rast de ceribînin, wekî ku li jêr tê xuyang kirin, dubarekirin wekî mîheng nayê hesibandin. Em tabloyek çêdikin, çend tomar têxin nav databasa MySQL, û gazî argumana sync_tables li pg_chameleon dikin da ku şeytan nûve bikin û tabloya bi tomaran re li databasa PostgreSQL dubare bikin.

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.

Ji bo piştrastkirina encamên testê, em tabloyê ji databasa PostgreSQL dipirsin û rêzan derdixin.

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

Ger em koçberiyek dikin, emrên pg_chameleon yên jêrîn dê dawiya wê bin. Pêdivî ye ku ferman piştî ku em pê ewle bin ku rêzikên hemî tabloyên armanc hatine dubare kirin bêne darve kirin, û encam dê bibe databasek PostgreSQL ya bi awakî koçkirî bêyî referansên databasa çavkaniyê an pilana dubarekirinê (sch_chameleon).

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

Ger bixwaze, hûn dikarin fermanên jêrîn bikar bînin da ku pilana veavakirin û dubarekirinê ya orjînal jêbirin.

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

Avantajên pg_chameleon

Sazkirin û veavakirina hêsan.
Bi peyamên xeletiya zelal re bi hêsanî pirsgirêk çareser bikin û nas bikin.
Tabloyên taybetî yên pêvek piştî destpêkirinê bêyî guheztina mîhengên mayî dikarin li dubarekirinê werin zêdekirin.
Mimkun e ku meriv databasên pir çavkaniyê ji bo databasek armancek yekane mîheng bike, û ev pir bikêr e heke hûn daneya ji yek an çend databasên MySQL di databasek yek PostgreSQL de berhev bikin.
Ne hewce ye ku hûn tabloyên hilbijartî dubare bikin.

Dezawantajên pg_chameleon

Tenê bi MySQL 5.5 û jorîn wekî çavkanî û PostgreSQL 9.5 û jorîn wekî databasa armancê piştgirî kirin.
Pêdivî ye ku her tablo xwedan mifteyek bingehîn an yekta be, wekî din tablo di pêvajoya init_replica de têne destpêkirin lê nayên dubare kirin.
Repplication yek-alî - tenê ji MySQL ber PostgreSQL. Ji ber vê yekê, ew tenê ji bo çerxa "aktîf-pasîf" maqûl e.
Çavkanî tenê dikare databasek MySQL be, û piştgirî ji bo databasek PostgreSQL wekî çavkaniyek tenê ceribandin û bi sînor e (bêtir fêr bibin vir)

Encamên ji bo pg_chameleon

Rêbaza dubarekirinê ya di pg_chameleon de ji bo koçkirina databasek ji MySQL bo PostgreSQL mezin e. Nerazîbûna girîng ev e ku dubarekirin tenê yek alî ye, ji ber vê yekê pisporên databasê ne mimkûn e ku bixwazin wê ji bo tiştek din ji koçberiyê bikar bînin. Lê pirsgirêka dubarekirina yek-alî dikare bi amûrek din a çavkaniyek vekirî - SymmetricDS were çareser kirin.

Di belgeya fermî de bêtir bixwînin vir. Alîkariya rêza fermanê dikare were dîtin vir.

Pêşniyara SymmetricDS

SymmetricDS amûrek çavkaniyek vekirî ye ku her databasê li databasek din a hevpar dubare dike: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird û mînakên din ên databasa ewr, mînakî Redshift, û Azure, hwd. Taybetmendiyên berdest: hevdengkirina databas û pelan, dubarekirina databasa pir-master, hevdemkirina parzûnkirî, veguherîn û yên din. Ev amûrek Java-yê ye û pêdivî ye ku serbestberdana standard ya JRE an JDK (guhertoya 8.0 an mezintir). Li vir, guheztinên daneyê yên li ser tetikan di databasa çavkaniyê de dikarin bêne tomar kirin û di forma koman de ji databasa armancê ya guncan re bêne şandin.

taybetmendiyên SymmetricDS

Amûr serbixwe platformê ye, tê vê wateyê ku du an bêtir databasên cûda dikarin daneyan biguhezînin.
Daneyên peywendîdar bi karanîna tomarên guhartina daneyê têne hevdem kirin, dema ku databasên pergala pelan hevdengkirina pelan bikar tînin.
Berevajîkirina du-alî bi karanîna rêbazên Push û Pull-ê li ser bingeha komek qaîdeyan bikar tîne.
Veguheztina daneyê li ser torên ewledar û kêm-bandê gengaz e.
Dema ku girêk piştî têkçûn û çareseriya pevçûnê ya otomatîkî dest bi xebatê dikin vegerandina otomatîk.
API-yên dirêjkirinê yên lihevhatî û hêzdar ên Cloud.

Nimûne:

SymmetricDS dikare bi yek ji du awayan were mîheng kirin:
Girêkek master (dêûbav) ku bi navendî vekirina daneyan di navbera du girêkên xulam (zarok) de hevrêz dike, û ragihandina di navbera girêkên zarok de tenê bi riya dêûbav pêk tê.
Nodek çalak (Node 1) dikare ji bo dubarekirinê bêyî navbeynkar bi girêkek din a çalak (Node 2) re têkilî daynin.

Di her du vebijarkan de, danûstandina daneyê bi karanîna Push û Pull pêk tê. Di vê nimûneyê de em ê veavakirinek çalak-aktîf bifikirin. Ji bo danasîna tevahiya mîmariyê pir dirêj dirêj bibe, ji ber vê yekê lêkolîna xwe bikin. birêvebirîji bo bêtir fêrbûna li ser cîhaza SymmetricDS.

Sazkirina SymmetricDS pir hêsan e: guhertoya çavkaniya vekirî ya pelê zip dakêşin ji vir û li ku derê hûn dixwazin derxînin. Tabloya jêrîn di vê nimûneyê de di derheqê cîhê sazkirinê û guhertoya SymmetricDS de, û her weha guhertoyên databasê, guhertoyên Linux, navnîşanên IP-yê, û portên her du girêkan de agahdar dike.

Mazûban
vm1
vm2

Guhertoya OS
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64

Guhertoya servera DB
MySQL 5.7.26
PostgreSQL 10.5

port DB
3306
5832

Navnîşana IP
192.168.1.107
192.168.1.112

Guhertoya SymmetricDS
SymmetricDS 3.9
SymmetricDS 3.9

Riya sazkirinê ya SymmetricDS
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20

Navê girêka SymmetricDS
corp-000
dikan-001

Li vir em SymmetricDS-ê li /usr/local/symmetric-server-3.9.20 saz dikin, û cûrbecûr binert û pelan dê li wir werin hilanîn. Em bi nimûneyên jêrderhêner û motoran eleqedar in. Di pelrêça nimûneyan de pelên mîhengê yên mînakî yên bi taybetmendiyên nodê, û hem jî tîpên SQL yên mînak hene ku hûn zû dest pê bikin.

Di pelrêça nimûneyan de em sê pelên mîhengê bi taybetmendiyên girêk dibînin - nav di nexşeyek diyar de cewherê girêk nîşan dide.

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

SymmetricDS ji bo sêwirana bingehîn a 3-girêdan (vebijark 1) hemî pelên mîhengê yên pêwîst hene, û heman pelan dikarin ji bo sêwirana 2-girêk (vebijark 2) werin bikar anîn. Pelê veavakirina pêdivî ji pelrêça nimûneyan li motorên li ser mêvandarê vm1 kopî bikin. Bi vî rengî derdikeve:

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

Vê girêka di veavakirina SymmetricDS de jê re corp-000 tê gotin, û girêdana databasê ji hêla ajokera mysql jdbc ve tê rêve kirin, ku rêzika girêdanê li jor û pêbaweriyên têketinê bikar tîne. Em bi databasa replica_db ve girêdidin û dê di dema çêkirina şemayê de tablo werin afirandin. sync.url cîhê girêdana bi nodê re ji bo hevdemkirinê nîşan dide.

Node 2 li ser host vm2 wekî store-001 hatiye mîheng kirin û yên mayî di pelê node.properties li jêr de têne destnîşan kirin. Node store-001 databasa PostgreSQL dimeşîne û pgdb_replica databasa vejandinê ye. register.url destûrê dide host vm2 ku bi host vm1 re têkilî dayne û hûrguliyên veavakirinê jê werbigire.

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

Mînaka SymmetricDS ya qedandî parametreyên ji bo sazkirina dubarekirina du-alî di navbera du serverên databasê de (du girêk) vedihewîne. Pêngavên jêrîn li ser mêvandarê vm1 (corp-000) têne kirin, ku dê bi 4 tabloyan şemayek nimûne biafirîne. Dûv re bi fermana symadmin tabloyên create-sym-tables diafirîne tabloyên pelrêça ku dê rêgez û rêgezên dubarekirinê di navbera girêkan de werin hilanîn. Di dawiyê de, daneyên nimûne di tabloyan de têne barkirin.

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

Di nimûneyê de, tabloyên tişt û item_selling_price bixweber têne mîheng kirin da ku ji corp-000 berbi store-001-ê werin dubare kirin, û tabloyên firotanê (sale_transaction û sale_return_line_item) bixweber têne mîheng kirin ku ji store-001-ê berbi corp-000-ê vebe. Naha em di databasa PostgreSQL de li ser mêvandarê vm2 (store-001) şemayek diafirînin da ku wê ji bo wergirtina daneyan ji corp-000 amade bikin.

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

Bawer bikin ku databasa MySQL li ser vm1 tabloyên nimûne û tabloyên kataloga SymmetricDS hene. Bala xwe bidin ku tabloyên pergalê SymmetricDS (bi pêşgira sym_) niha tenê li ser node corp-000 hene ji ber ku li wir em fermana create-sym-tables dimeşînin û em ê dubarekirinê birêve bibin. Û di databasa li ser node store-001 de dê tenê 4 tabloyên nimûne bêyî daneyan hebin.

Gişt. Jîngeh amade ye ku pêvajoyên servera sym li ser her du girêkan wekî ku li jêr tê xuyang kirin bimeşîne.

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

Têketinên têketinê di peldanka têketinê ya pelrêça ku SymmetricDS lê hatiye saz kirin, ji peldanka têketinê ya paşîn re (symmetric.log) û her weha ji hilberîna standard re têne şandin. Naha servera sym dikare li ser node store-001 were destpêkirin.

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

Ger hûn pêvajoya servera sym-ê li ser mêvandarê vm2 bimeşînin, ew ê di databasa PostgreSQL de tabloyên kataloga SymmetricDS jî biafirîne. Ger hûn pêvajoya servera sym li ser her du girêkan bimeşînin, ew bi hev re hevrêz dikin ku daneyan ji corp-000 berbi store-001-ê dubare bikin. Ger piştî çend saniyan em li her 4 tabloyên her du aliyan bipirsin, em ê bibînin ku dubarekirin serketî bû. An jî hûn dikarin bi fermana jêrîn bootstrap bişînin node store-001 ji corp-000.

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

Di vê nuqteyê de, tomarek nû di tabloya babetê de di databasa MySQL de li ser node corp-000 (mêvandar: vm1) tê danîn, û hûn dikarin vekirina wê li databasa PostgreSQL li ser node store-001 (mêvan: vm2) kontrol bikin. Em operasyonek Pull-ê dibînin ku daneyan ji corp-000 berbi store-001 veguhezîne.

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)

Ji bo pêkanîna operasyonek Push-ê ku daneyan ji store-001-ê berbi corp-000 veguhezîne, em tomarek têxin tabloya sale_transaction û piştrast bikin ku dubarekirin serketî ye.

Encam

Em sazkirina serketî ya dubarekirina du-alî ya tabloyên mînak di navbera databasên MySQL û PostgreSQL de dibînin. Ji bo sazkirina dubarekirinê ji bo tabloyên bikarhênerên nû, van gavan bişopînin: Em ji bo nimûne tabloya t1 diafirînin û qaîdeyên wê yên dubarekirinê wekî jêrîn mîheng dikin. Bi vî rengî em tenê dubarekirina ji corp-000 heya store-001 mîheng dikin.

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)

Dûv re veavakirin ji guheztina şemayê tê agahdar kirin, ango lêzêdekirina tabloyek nû, bi karanîna fermana symadmin bi argumana sync-triggers re, ku tekeran ji nû ve diafirîne ji bo nexşeya pênaseyên tabloyê. send-schema ji bo şandina guhertinên şemayê ji node store-001 re tê darve kirin, û dubarekirina tabloya t1 tê mîheng kirin.

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

Feydeyên SymmetricDS

Sazkirin û veavakirina hêsan, di nav de komek pelan a amadekirî ya bi pîvanan ji bo afirandina çerxek sê-girêk an du-girê.
Databasên cross-platform û serxwebûna platformê, tevî server, laptop û cîhazên mobîl.
Li ser WAN an di ewr de her databasê li databasek din dubare bikin.
Derfeta xebata çêtirîn bi çend databasan an jî çend hezaran ji bo dubarekirina hêsan.
Guhertoya drav bi GUI û piştgiriya hêja.

Dezawantajên SymmetricDS

Pêdivî ye ku hûn bi destan rêgez û rêgezên dubarekirinê li ser xeta fermanê bi navgîniya daxuyaniyên SQL-ê ve diyar bikin da ku tabloyên katalogê bar bikin, ku dibe ku nerehet be.
Sazkirina gelek tabloyên ji bo dubarekirinê dikare westiya be heya ku hûn skrîptan bikar bînin da ku daxuyaniyên SQL-yê ku qaîdeyên û rêgezên dubarekirinê diyar dikin biafirînin.
Di qeydan de gelek agahdarî têne tomar kirin, û carinan hûn hewce ne ku pelê têketinê paqij bikin da ku ew pir cîh negire.

Encamên ji bo SymmetricDS

SymmetricDS destûrê dide te ku hûn dubarekirina du-alî di navbera du, sê, an jî çend hezar nokan de saz bikin da ku pelan dubare bikin û hevdeng bikin. Ev amûrek yekta ye ku bi serbixwe gelek karan pêk tîne, wek vegerandina daneya otomatîkî piştî demek dirêj a li ser girêkekê, pevguhertina daneya ewledar û bikêr di navbera girêkan de bi riya HTTPS, rêveberiya pevçûnê ya otomatîkî li ser bingeha komek rêbazan, hwd. SymmetricDS pêk tîne. dubarekirina di navbera her databasan de, ji ber vê yekê, ew dikare ji bo cûrbecûr senaryoyan were bikar anîn, di nav de koçberî, koçberî, belavkirin, fîlterkirin, û veguherîna daneyan li ser platforman.

Mînak li ser esasê fermî ye rêberê bilez ji hêla SymmetricDS ve. LI manual user Bi berfirehî têgehên cihêreng ên ku di sazkirina dubarekirinê de bi SymmetricDS re têkildar in vedibêje.

Source: www.habr.com

Add a comment