Ukuphindaphinda phakathi kwePostgreSQL kunye neMySQL

Ukuphindaphinda phakathi kwePostgreSQL kunye neMySQL

Ndiza kuchaza ukuphindaphinda okunqamlezayo phakathi kwePostgreSQL kunye neMySQL, kunye neendlela zokuseta ukuphindaphinda okunqamlezayo phakathi kweeseva ezimbini zedatha. Ngokuqhelekileyo, i-database ephindwe kabini ibizwa ngokuba yi-homogeneous, kwaye yindlela efanelekileyo yokuhamba ukusuka kwiseva enye ye-RDBMS ukuya kwenye.

I-PostgreSQL kunye ne-MySQL yogcino lweenkcukacha ngokubanzi zijongwa njengezobudlelwane, kodwa ngezongezo ezongezelelweyo zibonelela ngezakhono zeNoSQL. Apha siza kuxubusha ukuphindaphinda phakathi kwe-PostgreSQL kunye ne-MySQL kwimbono yobudlelwane be-DBMS.

Asiyi kuchaza konke ukusebenza kwangaphakathi, imigaqo nje esisiseko ukuze ufumane umbono wokuqwalasela ukuphindaphinda phakathi kweeseva zedatha, izibonelelo, imida kunye namatyala okusebenzisa.

Ngokuqhelekileyo, ukuphindaphinda phakathi kweeseva zesiseko sedatha ezifanayo kwenziwa nokuba kukwimo yokubini okanye kusetyenziswa imibuzo phakathi komshicileli (aka umshicileli, inkosi, okanye esebenzayo) kunye nekhoboka (umrhumi, imo elindileyo, okanye isenziwa). Injongo yokuphindaphinda kukubonelela ngekopi yexesha langempela lesiseko sedatha kwicala lekhoboka. Kule meko, idatha idluliswa ukusuka kwinkosi ukuya kwikhoboka, oko kukuthi, ukusuka kwi-active to passive, kuba ukuphindaphinda kwenziwa kuphela kwicala elinye. Kodwa ungacwangcisa uphindaphindo phakathi kogcino lwedatha kumacala omabini, ukuze idatha idluliselwe ukusuka kwikhoboka ukuya kumphathi kuqwalaselo olusebenzayo olusebenzayo. Konke oku, kubandakanywa ukuphindaphinda kwe-cascading, kunokwenzeka phakathi kweeseva ezimbini okanye ngaphezulu ezifanayo zesiseko sedatha.

Uqwalaselo oluchaziweyo lunokwenzeka phakathi kweeseva zedatabase ezahlukeneyo. Umncedisi unokuqwalaselwa ukuba amkele idatha ephindwe kabini ukusuka kwenye iseva yedatha kwaye igcine i-snapshots yexesha langempela ledatha ephindwe kabini. I-MySQL kunye ne-PostgreSQL zibonelela ngobuninzi bolu lungelelwaniso lwendlu okanye ngezandiso zeqela lesithathu, kubandakanywa iindlela zokungena kwibhinari, ukutshixa idisk, kunye nenkcazo- kunye neendlela ezisekelwe kumqolo.

Ukuphindaphinda okunqamlezayo phakathi kwe-MySQL kunye nePostgreSQL iyafuneka kwimfuduko yexesha elinye ukusuka kwiseva yedatha enye ukuya kwenye. Ezi nkcukacha zolwazi zisebenzisa iiprothokholi ezahlukeneyo, ngoko ke akunakwenzeka ukuzidibanisa ngokuthe ngqo. Ukuseka utshintshiselwano lwedatha, ungasebenzisa isixhobo sangaphandle somthombo ovulekileyo, umzekelo pg_chameleon.

Yintoni pg_chameleon

pg_chameleon yinkqubo yokuphindaphinda ukusuka kwi-MySQL ukuya kwi-PostgreSQL kwi-Python 3. Isebenzisa umthombo ovulekileyo welayibrari ye-mysql-replication, nakwiPython. Imifanekiso yerowu itsalwa kwiitafile ze-MySQL kwaye zigcinwe njengezinto ze-JSONB kwisiseko sedatha ye-PostgreSQL, kwaye emva koko icocwe ngumsebenzi we-pl/pgsql kwaye iveliswe kwisiseko sedatha ye-PostgreSQL.

Iimpawu ze pg_chameleon

Ii-schemas ezininzi ze-MySQL ezivela kwiqela elinye zinokuphinda-phindwa kwindawo enye ekujoliswe kuyo ye-PostgreSQL yedatha kuqwalaselo olunye ukuya kwabaninzi.
Umthombo kunye namagama e-schema ekujoliswe kuwo akanako ukufana.
Idatha yokuphindaphinda inokufunyanwa kwi-replica ye-MySQL efihliweyo.
Iitheyibhile ezingakwazi ukuphindaphinda okanye ukuvelisa iimpazamo azibandakanywa.
Umsebenzi ngamnye wokuphindaphinda ulawulwa ziidemon.
Lawula ngeeparamitha ezisekwe kwi-YAML kunye neefayile zoqwalaselo.

Umzekelo:

Umgcini
vm1
vm2

Uguqulelo lwe-OS
I-CentOS Linux 7.6 x86_64
I-CentOS Linux 7.5 x86_64

Uguqulelo lweseva yeDB
MySQL 5.7.26
IPostgreSQL 10.5

DB port
3306
5433

Idilesi ye-IP
192.168.56.102
192.168.56.106

Ukuqala, lungiselela onke amacandelo ayimfuneko ukufaka pg_chameleon. Lo mzekelo ufaka iPython 3.6.8, eyenza kwaye isebenze 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

Emva kokufaka ngempumelelo iPython3.6, kufuneka ugcwalise iimfuno eziseleyo, ezifana nokudala kunye nokuvula indawo ebonakalayo. Ukongeza, imodyuli yepip ihlaziywa kuhlobo lwamva nje kwaye isetyenziselwa ukufaka i-pg_chameleon. Imiyalelo engezantsi faka ngabom pg_chameleon 2.0.9, nangona inguqulelo yamva nje yi-2.0.10. Oku kuyimfuneko ukuphepha iibhugi ezintsha kuguqulelo oluhlaziyiweyo.

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

Emva koko sibiza i-pg_chameleon (i-chameleon ngumyalelo) kunye ne-set_configuration_files argument ukwenza i-pg_chameleon kunye nokudala abalawuli abangagqibekanga kunye neefayile zoqwalaselo.

(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

Ngoku senza ikopi ye-config-example.yml njenge-default.yml ukuze ibe yifayile yoqwalaselo olungagqibekanga. Isampulu yefayile yoqwalaselo yalo mzekelo inikwe ngezantsi.

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

Ifayile yoqwalaselo kulo mzekelo yisampula pg_chameleon ifayile enezilungiso ezincinci ukuze zihambelane nomthombo kunye neemeko ekujoliswe kuzo, kwaye ngezantsi kukho umboniso wamacandelo ahlukeneyo efayile yoqwalaselo.

Kwifayile yoqwalaselo ye-default.yml kukho icandelo lezicwangciso zehlabathi, apho unokulawula izicwangciso ezifana nendawo yefayile yokutshixa, indawo yeelog, ixesha lokugcinwa kweelogi, njl. Okulandelayo kuza icandelo lokubhala ngaphezulu kohlobo, apho Iseti yemigaqo yodidi olungaphezulu ngexesha lokuphindaphinda. Umzekelo awugqibekanga kuhlobo lolawulo olugqithileyo oluguqulela i-tinyint(1) kwixabiso le boolean. Kwicandelo elilandelayo, sicacisa iinkcukacha zoqhagamshelwano kwi-database ekujoliswe kuyo. Kwimeko yethu, le yi-PostgreSQL database, ekhethiweyo pg_conn. Kwicandelo lokugqibela, sibonisa idatha yomthombo, oko kukuthi, iiparitha zokudibanisa kwisiseko sedatha yomthombo, iskimu semephu phakathi komthombo kunye nogcino lwedatha ekujoliswe kuyo, iitafile ezifuna ukugqithwa, ixesha lokulinda, imemori, ubungakanani bephakheji. Qaphela ukuba "imithombo" isininzi, oku kuthetha ukuba singongeza uvimba weenkcukacha ezininzi kwindawo enye ekujoliswe kuyo ukuseta uqwalaselo oluninzi ukuya kwelinye.

Umzekelo wesiseko sedata world_x uqulathe iitafile ezi-4 ezinemiqolo enikezelwa luluntu lweMySQL njengemizekelo. Inokukhutshelwa apha. Isampulu yedatha egciniweyo iza njengetha kunye nogcino olucinezelweyo olunemiyalelo yokuyila kunye nokungenisa imiqolo.

Kwiinkcukacha ze-MySQL kunye ne-PostgreSQL, umsebenzisi okhethekileyo wenziwa ngegama elifanayo usr_replica. Kwi-MySQL, inikwa amalungelo awongezelelweyo okufunda kuzo zonke iitafile eziphindiweyo.

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;

Kwicala le-PostgreSQL, i-db_replica idatabase yenziwe eya kwamkela utshintsho olusuka kwi-database ye-MySQL. Umsebenzisi usr_replica kwi-PostgreSQL iqwalaselwe ngokuzenzekelayo njengomnini weschemas ezimbini, pgworld_x kunye ne-sch_chameleon, eziqulathe iitafile eziphindiweyo kunye neetafile zophindaphindo lolawulo, ngokulandelelana. I-cregument_replica_schema ingxabano inoxanduva loqwalaselo oluzenzekelayo, njengoko uza kubona ngezantsi.

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 iqwalaselwe ngotshintsho oluthile lweparameter ukuyilungiselela ukuphindaphinda njengoko kubonisiwe ngezantsi. Kuya kufuneka uqalise kwakhona iseva yedatha ukuze utshintsho lusebenze.

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

Ngoku kubalulekile ukujonga uxhulumaniso kubo bobabini abancedisi bedatha ukuze kungabikho iingxaki xa uqhuba imiyalelo ye-pg_chameleon.

Kwi-PostgreSQL node:

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

Kwi node ye-MySQL:

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

Imiyalelo emithathu elandelayo ye-pg_chameleon (i-chameleon) ilungiselela okusingqongileyo, yongeza umthombo, kwaye iqalise ikopi. Ingxabano create_replica_schema ku-pg_chameleon idala i-schema engagqibekanga (sch_chameleon) kunye ne-schema yokuphindaphinda (pgworld_x) kwisiseko sedatha sePostgreSQL, njengoko besesixoxile. Ingxabano ye-add_source yongeza i-database yomthombo kuqwalaselo ngokufunda ifayile yoqwalaselo (default.yml), kwaye kwimeko yethu yi-mysql, kwaye init_replica iqalisa uqwalaselo olusekelwe kwiparameters kwifayile yoqwalaselo.

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

Imveliso yale miyalelo mithathu ibonisa ngokucacileyo ukuba iphunyezwe ngempumelelo. Nakuphi na ukungqubana okanye iimpazamo zesintaksi zixelwa kwimiyalezo elula, ecacileyo enamacebiso ngendlela yokulungisa ingxaki.

Okokugqibela, siqala ukuphindaphinda sisebenzisa start_replica kwaye sifumane umyalezo oyimpumelelo.

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

Ubume bokuphindaphinda bunokubuzwa kusetyenziswa ingxabano ye-show_status, kwaye iimpazamo zinokujongwa kusetyenziswa show_errors argument.

Iziphumo.

Njengoko besesitshilo, umsebenzi ngamnye wokuphindaphinda ulawulwa ziidemon. Ukuzijonga, sibuza itafile yenkqubo kunye nomyalelo weLinux ps, njengoko kubonisiwe ngezantsi.

Iziphumo.

Ukuphindaphinda akuthathwa njengokucwangcisiweyo de sikuvavanye ngexesha lokwenyani, njengoko kubonisiwe ngezantsi. Senza itafile, sifake iirekhodi ezimbalwa kwisiseko sedatha ye-MySQL, kwaye sibize ingxabano ye-sync_tables kwi-pg_chameleon ukuhlaziya iidaemoni kunye nokuphindaphinda itafile kunye neerekhodi kwi-database ye-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 iziphumo zovavanyo, sibuza itafile kwi-database ye-PostgreSQL kwaye sikhupha imigqa.

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

Ukuba senza imfuduko, le miyalelo ilandelayo ye-pg_chameleon iya kuba sisiphelo sayo. Imiyalelo kufuneka iphunyezwe emva kokuba siqinisekile ukuba imiqolo yazo zonke iitheyibhile ekujoliswe kuzo iye yaphinda yaphindwa, kwaye isiphumo siya kuba sisiseko sesiseko se-PostgreSQL esifuduselwe kakuhle ngaphandle kweembekiselo kwisiseko sedatha yemvelaphi okanye iskimu sokuphindaphinda (sch_chameleon).

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

Ukuba uyanqweneleka, ungasebenzisa le miyalelo ilandelayo ukucima uqwalaselo loqobo kunye nesikimu sophindaphindo.

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

Izinto ezilungileyo ze pg_chameleon

Ukuseta lula kunye noqwalaselo.
Ukusombulula ingxaki ngokulula kwaye uchonge izinto ezingaqhelekanga ngemiyalezo ecacileyo yempazamo.
Iitheyibhile ezongezelelweyo ezikhethekileyo zingongezwa kuphindaphindo emva kokuqaliswa ngaphandle kokutshintsha lonke uqwalaselo.
Kuyenzeka ukuba uqwalasele isiseko sedatha yemithombo emininzi yesiseko sedatha ekujoliswe kuyo, kwaye oku kuluncedo kakhulu ukuba udibanisa idatha ukusuka kwi-database enye okanye ngaphezulu kwe-MySQL kwisiseko sedatha ye-PostgreSQL enye.
Awunakuphinda-phinda iitafile ezikhethiweyo.

Ukungalungi kwe pg_chameleon

Ixhaswa kuphela nge-MySQL 5.5 nangaphezulu njengomthombo kunye nePostgreSQL 9.5 nangaphezulu njengesiseko sedatha ekujoliswe kuyo.
Itheyibhile nganye kufuneka ibe nesitshixo sokuqala okanye esisodwa, kungenjalo iitheyibhile ziqaliswa ngexesha lenkqubo ye-init_replica kodwa aziphindaphindwa.
Ukuphindaphinda kwendlela enye - kuphela ukusuka kwi-MySQL ukuya kwi-PostgreSQL. Ngoko ke, ifanelekile kuphela kwisekethe "esebenzayo-esebenzayo".
Umthombo unokuba yi-database ye-MySQL kuphela, kunye nenkxaso yesiseko sedatha ye-PostgreSQL njengomthombo wovavanyo kuphela kunye nemida (funda ngakumbi apha)

Iziphumo ze pg_chameleon

Indlela yokuphindaphinda kwi-pg_chameleon ilungile ekufudukeleni isiseko sedatha ukusuka kwi-MySQL ukuya kwi-PostgreSQL. Icala elisezantsi elibalulekileyo kukuba ukuphindaphinda kuyindlela enye kuphela, ngoko ke abaqeqeshi bedatha abanakufane bafune ukuyisebenzisela nantoni na ngaphandle kokufuduka. Kodwa ingxaki yokuphindaphinda kwendlela enye ingasonjululwa ngesinye isixhobo esivulekileyo somthombo - SymmetricDS.

Funda ngakumbi kumaxwebhu asemthethweni apha. Uncedo lomgca womyalelo lunokufumaneka apha.

Isishwankathelo seSymmetricDS

I-SymmetricDS sisixhobo somthombo ovulekileyo esiphindaphinda nayiphi na isiseko sedatha kuyo nayiphi na enye isiseko sedatha eqhelekileyo: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird kunye nezinye iimeko zesiseko selifu, umz. Redshift, kunye I-Azure, njl. Iimpawu ezifumanekayo: isiseko sedatha kunye nongqamaniso lwefayile, ukuphindaphindwa kwedatha ye-multi-master, ungqamaniso oluhluziweyo, ukuguqulwa kunye nabanye. Esi sisixhobo seJava kwaye sifuna ukukhutshwa okusemgangathweni kwe-JRE okanye i-JDK (inguqulo ye-8.0 okanye ngaphezulu). Apha, utshintsho lwedatha kwi-triggers kwi-database yomthombo lunokurekhodwa kwaye luthunyelwe kwi-database efanelekileyo ekujoliswe kuyo ngendlela yeebhetshi.

Iimpawu ze-SymmetricDS

Isixhobo siqonga elizimeleyo, oku kuthetha ukuba ii-database ezimbini okanye ngaphezulu ezahlukeneyo zinokutshintshisa idatha.
Iidatabase zobudlelwane zilungelelaniswa kusetyenziswa iirekhodi zotshintsho lwedatha, ngelixa iifayile ezisekelwe kwinkqubo yefayile zisebenzisa ukuvumelanisa iifayile.
Iindlela ezimbini zokuphindaphinda usebenzisa iindlela zokuTyhala kunye nokuTsala ngokusekelwe kwiseti yemithetho.
Ugqithiso lwedatha lunokwenzeka kwiinethiwekhi ezikhuselekileyo nezisezantsi.
Ukubuyisela ngokuzenzekelayo xa ii-nodes ziqala ukusebenza emva kokungaphumeleli kunye nesisombululo sengxabano ngokuzenzekelayo.
Cloud ehambelanayo kunye nolwandiso olunamandla APIs.

Umzekelo:

I-SymmetricDS inokumiselwa ngenye yeendlela ezimbini:
Indawo eyintloko (umzali) elungelelanisa ukuphindaphindwa kwedatha phakathi kweendawo ezimbini zekhoboka (zomntwana), kwaye unxibelelwano phakathi kweendawo zomntwana lwenzeka kuphela ngomzali.
I-node esebenzayo (i-Node 1) inokunxibelelana ngokuphindaphinda enye i-node esebenzayo (i-Node 2) ngaphandle komlamli.

Kuzo zombini iinketho, utshintshiselwano lwedatha lwenzeka kusetyenziswa i-Push and Tsala. Kulo mzekelo siza kuqwalasela uqwalaselo olusebenzayo olusebenzayo. Kuya kuthatha ixesha elide ukuchaza lonke uyilo, ke yenza uphando lwakho. ulawuloukufunda ngakumbi malunga nesixhobo se-SymmetricDS.

Ukufakela i-SymmetricDS ilula kakhulu: khuphela inguqulelo yomthombo ovulekileyo wefayile ye-zip kusuka apha uyikhuphe naphi na apho ufuna khona. Itheyibhile engezantsi ibonelela ngolwazi malunga nendawo yofakelo kunye noguqulelo lwe-SymmetricDS kulo mzekelo, kunye neenguqulelo zesiseko sedatha, iinguqulelo ze-Linux, iidilesi ze-IP, kunye namachweba kuzo zombini iindawo.

Umgcini
vm1
vm2

Uguqulelo lwe-OS
I-CentOS Linux 7.6 x86_64
I-CentOS Linux 7.6 x86_64

Uguqulelo lweseva yeDB
MySQL 5.7.26
IPostgreSQL 10.5

DB port
3306
5832

Idilesi ye-IP
192.168.1.107
192.168.1.112

Inguqulelo yeSymmetricDS
I-SymmetricDS 3.9
I-SymmetricDS 3.9

Indlela yokufaka iSymmetricDS
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20

Igama lendawo ye-SymmetricDS
ishishini-000
ivenkile-001

Apha sifaka i-SymmetricDS kwi-/usr/local/symmetric-server-3.9.20, kwaye ii-subdirectories ezahlukeneyo kunye neefayile ziya kugcinwa apho. Sinomdla kwiisampulu kunye neenjini zangaphantsi. Uluhlu lweesampulu luqulethe umzekelo weefayile zoqwalaselo ezineempawu ze-node, kunye nomzekelo wezikripthi zeSQL ukuze uqalise ngokukhawuleza.

Kuluhlu lweesampulu sibona iifayile ezintathu zokucwangcisa ezineempawu ze-node - igama libonisa ubume be-node kwisikimu esithile.

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

I-SymmetricDS inazo zonke iifayile eziyimfuneko zoqwalaselo olusisiseko lwe-3-node design (ukhetho 1), kunye neefayile ezifanayo zingasetyenziselwa ukuyila i-2-node (ukhetho 2). Khuphela ifayile yoqwalaselo efunekayo kuluhlu lweesampulu kwiinjini kwi-vm1 umamkeli. Ivela ngolu hlobo:

$> 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 node kuqwalaselo lwe-SymmetricDS ibizwa ngokuba yi-corp-000, kwaye uqhagamshelo lwedathabheyisi luphathwa ngumqhubi we-mysql jdbc, osebenzisa umtya wodibaniso ongentla kunye neziqinisekiso zokungena. Siqhagamshela kwi-replica_db yedatha kwaye iitafile ziya kwenziwa ngexesha lokwenziwa kweschema. I-sync.url ibonisa ukuba ungaqhagamshelwa phi nendawo yongqamaniso.

I-Node 2 kwi-host vm2 iqwalaselwe njengevenkile-001 kwaye enye ichazwe kwifayile ye-node.properties engezantsi. I-Node store-001 iqhuba i-PostgreSQL database kunye ne-pgdb_replica yi-replication database. registration.url ivumela umamkeli vm2 ukuba aqhagamshelane nomsingathi we-vm1 kwaye afumane iinkcukacha zoqwalaselo 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

Umzekelo ogqityiweyo we-SymmetricDS uqulethe iiparameters zokuseta iindlela ezimbini zokuphindaphinda phakathi kweeseva ezimbini zesiseko sedatha (iinodi ezimbini). La manyathelo angezantsi enziwa kwi-host vm1 (corp-000), eya kwenza umzekelo we-schema kunye neetafile ezi-4. Emva koko ukwenza iitafile ze-sym kunye nomyalelo we-symadmin yenza iitheyibhile zolawulo apho imigaqo kunye nesalathiso sophindaphindo phakathi kweenodi ziya kugcinwa. Ekugqibeleni, idatha yesampulu ilayishwa kwiitheyibhile.

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

Ngokomzekelo, i-item kunye ne-item_selling_price tables ziqwalaselwe ngokuzenzekelayo ukuphindaphinda ukusuka kwi-corp-000 ukuya kwi-store-001, kunye neetafile zentengiso (i-sale_transaction kunye ne-sale_return_line_item) zicwangciswe ngokuzenzekelayo ukuba ziphindaphinde ukusuka kwi-store-001 ukuya kwi-corp-000. Ngoku senza i-schema kwisiseko sedatha ye-PostgreSQL kwi-host vm2 (ivenkile-001) ukuyilungiselela ukufumana idatha evela kwi-corp-000.

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

Qinisekisa ukujonga ukuba i-database ye-MySQL kwi-vm1 ineetafile zemizekelo kunye neetafile zekhathalogu ze-SymmetricDS. Qaphela ukuba iitheyibhile zesistim ye-SymmetricDS (iprefixed with sym_) okwangoku zifumaneka kuphela kwi-node corp-000 kuba kulapho siqhube khona umyalelo we-create-sym-tables kwaye siza kulawula ukuphindaphinda. Kwaye kwi-database kwi-node store-001 kuya kuba neetafile ze-4 kuphela zemizekelo ngaphandle kwedatha.

Konke. Indawo engqongileyo ilungele ukuqhuba iinkqubo zeseva ye-sym kuzo zombini iindawo njengoko kubonisiwe ngezantsi.

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

Amangeno elogi athunyelwa kwifayile yelog yangasemva (symmetric.log) kwifolda yelog kulawulo apho iSymmetricDS ifakiwe, kunye nemveliso eqhelekileyo. Umncedisi we-sym ngoku unokuqaliswa kwi-node store-001.

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

Ukuba usebenzisa inkqubo yomncedisi we-sym kwinginginya ye-vm2, iya kudala iitafile zekhathalogu ye-SymmetricDS kwisiseko sedatha ye-PostgreSQL. Ukuba uqhuba inkqubo yomncedisi we-sym kuzo zombini iindawo, zilungelelanisa enye kwenye ukuphinda idatha ukusuka kwi-corp-000 ukuya kwi-store-001. Ukuba emva kwemizuzwana embalwa sibuza zonke iitafile ezi-4 kumacala omabini, siya kubona ukuba ukuphindaphinda kube yimpumelelo. Okanye ungathumela i-bootstrap kwi-node store-001 ukusuka kwi-corp-000 ngomyalelo olandelayo.

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

Ngeli xesha, irekhodi entsha ifakwe kwitheyibhile yezinto kwi-database ye-MySQL kwi-node corp-000 (host: vm1), kwaye unokujonga ukuphindaphinda kwayo kwi-PostgreSQL database kwi-node store-001 (host: vm2). Sibona umsebenzi wokutsalwa ukuhambisa idatha kwi-corp-000 ukuya kwi-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)

Ukwenza umsebenzi wePush ukuhambisa idatha ukusuka kwivenkile-001 ukuya kwi-corp-000, sifaka irekhodi kwitheyibhile ye-sale_transaction kwaye siqinisekise ukuba ukuphindaphinda kuphumelele.

Iziphumo.

Sibona ukuseta okuyimpumelelo kweendlela ezimbini zokuphindaphinda kwemizekelo yeetafile phakathi kwe-MySQL kunye ne-PostgreSQL yogcino-lwazi. Ukuseta uphindaphindo kwiitafile zabasebenzisi abatsha, landela la manyathelo: Senza itafile t1 ngokomzekelo kwaye siqulunqe imithetho yokuphindaphinda kwayo ngolu hlobo lulandelayo. Ngale ndlela siqwalasela kuphela ukuphindaphinda ukusuka kwi-corp-000 ukuya kwi-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)

Uqwalaselo luya kwaziswa ngotshintsho lwe-schema, oko kukuthi, ukongezwa kwetafile entsha, usebenzisa umyalelo we-symadmin kunye ne-sync-triggers argument, ephinda iphinda ivuselele iinkcazo zetafile. thumela-i-schema senziwa ukuthumela utshintsho lwe-schema kwi-node store-001, kunye nokuphindaphinda kwetheyibhile T1 iqwalaselwe.

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

Iinzuzo ze-SymmetricDS

Ufakelo olulula kunye nokucwangciswa, kubandakanywa isethi esenziwe ngolungelelaniso lweefayile kunye neeparitha zokudala i-node ezintathu okanye i-node-node circuit.
Uluhlu lweenkcukacha ezinqamlezileyo kunye nokuzimela kweqonga, kubandakanya iiseva, iilaptops kunye nezixhobo eziphathwayo.
Phinda kwakhona nayiphi na isiseko sedatha kuyo nayiphi na enye isiseko sedatha yasekhaya, kwi-WAN okanye kwilifu.
Ukubanakho komsebenzi ofanelekileyo kunye neqela ledatha egciniweyo okanye amawaka aliqela ukuze uphindaphindeke.
Uguqulelo oluhlawulweyo kunye ne-GUI kunye nenkxaso egqwesileyo.

Ukungalungi kwe-SymmetricDS

Kufuneka uchaze ngesandla imithetho kunye nolwalathiso lokuphindaphinda kumgca womyalelo ngokusebenzisa iinkcazo zeSQL ukulayisha iitafile zekhathalogu, ezinokuthi ziphazamise.
Ukuseta iitafile ezininzi zokuphindaphinda kunokuba yindinisa ngaphandle kokuba usebenzisa izikripthi ukwenza iinkcazo zeSQL ezichaza imigaqo kunye nesikhokelo sokuphindaphinda.
Kukho ulwazi oluninzi kakhulu olurekhodwa kwiilogi, kwaye ngamanye amaxesha kufuneka ucoce ifayile yelog ukuze ingathathi indawo eninzi.

Iziphumo ze-SymmetricDS

I-SymmetricDS ikuvumela ukuba usete iindlela ezimbini zokuphindaphinda phakathi ezimbini, ezintathu, okanye namawaka aliqela eendawo zokuphinda-phinda kunye nokuvumelanisa iifayile. Esi sixhobo esikhethekileyo esenza ngokuzimeleyo imisebenzi emininzi, njengokubuyiswa kwedatha ngokuzenzekelayo emva kwexesha elide lokunciphisa kwi-node, utshintshiselwano olukhuselekileyo nolusebenzayo lwedatha phakathi kwee-nodes nge-HTTPS, ulawulo lwengxabano oluzenzekelayo olusekelwe kwisethi yemithetho, njl njl. I-SymmetricDS yenza ukuphindaphinda phakathi kwazo naziphi na iinkcukacha zogcino-lwazi, ngoko ke, zinokusetyenziselwa iindidi ngeendidi zeemeko, kubandakanywa ukufuduka, ukufuduka, ukusasazwa, ukuhluza, kunye nokuguqulwa kwedatha kuwo wonke amaqonga.

Umzekelo usekelwe kwigosa isikhokelo esikhawulezayo nge-SymmetricDS. IN incwadi yokusebenzisa Ichaza ngokweenkcukacha iikhonsepthi ezahlukeneyo ezibandakanyekayo ekusekweni kophindaphindo kunye ne-SymmetricDS.

umthombo: www.habr.com

Yongeza izimvo