Urudiaji mtambuka kati ya PostgreSQL na MySQL

Urudiaji mtambuka kati ya PostgreSQL na MySQL

Nitaangazia urudufu kati ya PostgreSQL na MySQL, na pia njia za kusanidi urudiaji mtambuka kati ya seva mbili za hifadhidata. Kwa kawaida, hifadhidata zilizoigwa huitwa homogeneous, na ni njia rahisi ya kuhama kutoka kwa seva moja ya RDBMS hadi nyingine.

Hifadhidata za PostgreSQL na MySQL kwa ujumla huzingatiwa kuwa za uhusiano, lakini kwa viendelezi vya ziada hutoa uwezo wa NoSQL. Hapa tutajadili urudufishaji kati ya PostgreSQL na MySQL kutoka kwa mtazamo wa uhusiano wa DBMS.

Hatutaelezea utendakazi wote wa ndani, kanuni za msingi tu ili upate wazo la kusanidi replication kati ya seva za hifadhidata, faida, mapungufu na kesi za utumiaji.

Kwa kawaida, urudufishaji kati ya seva mbili za hifadhidata zinazofanana hufanywa ama katika hali ya jozi au kwa kutumia maswali kati ya bwana (a.k.a. mchapishaji, bwana, au anayefanya kazi) na mtumwa (msajili, kusubiri, au passiv). Madhumuni ya urudufishaji ni kutoa nakala ya wakati halisi ya hifadhidata kuu kwenye upande wa watumwa. Katika kesi hii, data huhamishwa kutoka kwa bwana hadi mtumwa, ambayo ni, kutoka kwa kazi hadi kwa passiv, kwa sababu replication inafanywa tu kwa mwelekeo mmoja. Lakini unaweza kusanidi urudufishaji kati ya hifadhidata mbili katika pande zote mbili, ili data ihamishwe kutoka kwa mtumwa hadi kwa bwana katika usanidi unaofanya kazi. Yote haya, ikiwa ni pamoja na urudufishaji wa kasi, inawezekana kati ya seva mbili au zaidi za hifadhidata zinazofanana. Usanidi unaotumika au amilifu unategemea hitaji, upatikanaji wa uwezo kama huo katika usanidi wa awali au utumiaji wa suluhu za usanidi wa nje na ubadilishanaji uliopo .

Usanidi ulioelezewa unawezekana kati ya seva tofauti za hifadhidata. Seva inaweza kusanidiwa ili kukubali data iliyoigwa kutoka kwa seva nyingine ya hifadhidata na bado kudumisha vijipicha vya wakati halisi vya data iliyorudiwa. MySQL na PostgreSQL hutoa usanidi mwingi wa hii ndani ya nyumba au kupitia viendelezi vya watu wengine, ikijumuisha mbinu za kumbukumbu za binary, kufunga diski, na mbinu kulingana na taarifa na safu mlalo.

Urudiaji mtambuka kati ya MySQL na PostgreSQL inahitajika kwa uhamaji wa mara moja kutoka seva moja ya hifadhidata hadi nyingine. Hifadhidata hizi hutumia itifaki tofauti, kwa hivyo haiwezekani kuziunganisha moja kwa moja. Ili kuanzisha ubadilishanaji wa data, unaweza kutumia zana huria ya nje, kwa mfano pg_chameleon.

pg_kinyonga ni nini

pg_chameleon ni mfumo wa urudufishaji kutoka kwa MySQL hadi PostgreSQL katika Python 3. Inatumia maktaba ya chanzo huria ya mysql-replication, pia katika Python. Picha za safu mlalo hutolewa kutoka kwa jedwali la MySQL na kuhifadhiwa kama vipengee vya JSONB katika hifadhidata ya PostgreSQL, na kisha kufutwa kwa kazi ya pl/pgsql na kutolewa tena katika hifadhidata ya PostgreSQL.

Sifa za pg_kinyonga

Miradi mingi ya MySQL kutoka kwa nguzo moja inaweza kuigwa kwa hifadhidata moja inayolengwa ya PostgreSQL katika usanidi wa moja hadi nyingi.
Majina ya chanzo na lengwa hayawezi kuwa sawa.
Data ya urudufishaji inaweza kupatikana kutoka kwa nakala iliyofichwa ya MySQL.
Majedwali ambayo hayawezi kurudia au kutoa makosa yanatengwa.
Kila kazi ya urudufishaji inadhibitiwa na daemoni.
Dhibiti kupitia vigezo na faili za usanidi kulingana na YAML.

Mfano

Mwenyeji
vm1
vm2

Toleo la OS
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64

Toleo la seva ya DB
MySQL 5.7.26
PostgreSQL 10.5

bandari ya DB
3306
5433

Anwani ya IP
192.168.56.102
192.168.56.106

Kuanza, jitayarisha vipengele vyote muhimu vya kufunga pg_chameleon. Mfano huu husakinisha Python 3.6.8, ambayo huunda na kuamilisha mazingira ya mtandaoni.

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

Baada ya kusakinisha Python3.6 kwa mafanikio, unahitaji kukamilisha mahitaji yaliyobaki, kama vile kuunda na kuwezesha mazingira ya mtandaoni. Zaidi ya hayo, moduli ya bomba inasasishwa hadi toleo la hivi karibuni na kutumika kusakinisha pg_chameleon. Amri zilizo hapa chini sakinisha kwa makusudi pg_chameleon 2.0.9, ingawa toleo la hivi punde ni 2.0.10. Hii ni muhimu ili kuzuia hitilafu mpya katika toleo lililosasishwa.

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

Kisha tunaita pg_chameleon (kinyonga ni amri) kwa hoja ya set_configuration_files kuwezesha pg_chameleon na kuunda saraka chaguo-msingi na faili za usanidi.

(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

Sasa tunaunda nakala ya config-example.yml kama default.yml ili iwe faili ya usanidi chaguo-msingi. Sampuli ya faili ya usanidi kwa mfano huu imetolewa hapa chini.

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

Faili ya usanidi katika mfano huu ni sampuli ya faili ya pg_chameleon iliyo na marekebisho madogo ili kukidhi mazingira ya chanzo na lengwa, na hapa chini ni muhtasari wa sehemu tofauti za faili ya usanidi.

Katika faili ya usanidi ya default.yml kuna sehemu ya mipangilio ya kimataifa, ambapo unaweza kudhibiti mipangilio kama vile eneo la faili ya kufuli, eneo la kumbukumbu, muda wa kuhifadhi kumbukumbu, n.k. Inayofuata inakuja sehemu ya kubatilisha aina, ambapo seti ya sheria za kupitisha aina wakati wa kurudia. Mfano huo hubadilika kuwa aina ya kanuni ya ubatilishaji inayobadilisha tinyint(1) kuwa thamani ya boolean. Katika sehemu inayofuata, tunataja maelezo ya uunganisho kwenye hifadhidata inayolengwa. Kwa upande wetu, hii ni hifadhidata ya PostgreSQL, iliyoteuliwa pg_conn. Katika sehemu ya mwisho, tunaonyesha data ya chanzo, ambayo ni, vigezo vya uunganisho wa hifadhidata ya chanzo, mpango wa ramani kati ya chanzo na hifadhidata inayolengwa, meza ambazo zinahitaji kuruka, wakati wa kungojea, kumbukumbu, saizi ya kifurushi. Kumbuka kuwa "vyanzo" ni wingi, kumaanisha kwamba tunaweza kuongeza hifadhidata nyingi za vyanzo kwenye hifadhidata moja lengwa ili kusanidi usanidi wa nyingi-kwa-moja.

Mfano hifadhidata world_x ina majedwali 4 yenye safu mlalo ambayo jumuiya ya MySQL inatoa kama mifano. Inaweza kupakuliwa hapa. Sampuli ya hifadhidata inakuja kama kumbukumbu ya lami na iliyobanwa na maagizo ya kuunda na kuagiza safu.

Katika hifadhidata za MySQL na PostgreSQL, mtumiaji maalum huundwa kwa jina sawa usr_replica. Katika MySQL, inapewa haki za ziada za kusoma kwa meza zote zilizoigwa.

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;

Kwa upande wa PostgreSQL, hifadhidata ya db_replica imeundwa ambayo itakubali mabadiliko kutoka kwa hifadhidata ya MySQL. Mtumiaji usr_replica katika PostgreSQL husanidiwa kiotomatiki kama mmiliki wa taratibu mbili, pgworld_x na sch_chameleon, ambazo zina majedwali halisi yaliyoigwa na jedwali za saraka za urudufishaji, mtawalia. Hoja ya create_replica_schema inawajibika kwa usanidi otomatiki, kama utakavyoona hapa chini.

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

Hifadhidata ya MySQL imesanidiwa na baadhi ya mabadiliko ya kigezo ili kuitayarisha kwa urudufishaji kama inavyoonyeshwa hapa chini. Utahitaji kuanzisha upya seva ya hifadhidata ili mabadiliko yaanze kutumika.

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

Sasa ni muhimu kuangalia uunganisho kwa seva zote mbili za database ili hakuna matatizo wakati wa kuendesha amri za pg_chameleon.

Kwenye nodi ya PostgreSQL:

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

Kwenye nodi ya MySQL:

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

Amri tatu zinazofuata za pg_chameleon (kinyonga) hutayarisha mazingira, kuongeza chanzo, na kuanzisha nakala. Hoja ya create_replica_schema kwa pg_chameleon huunda schema chaguo-msingi (sch_chameleon) na schema ya urudufishaji (pgworld_x) katika hifadhidata ya PostgreSQL, kama tulivyojadili tayari. Hoja ya add_source inaongeza hifadhidata ya chanzo kwa usanidi kwa kusoma faili ya usanidi (default.yml), na kwa upande wetu ni mysql, na init_replica inaanzisha usanidi kulingana na vigezo katika faili ya usanidi.

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

Matokeo ya amri hizi tatu inaonyesha wazi kwamba zilitekelezwa kwa mafanikio. Hitilafu zozote za kuacha kufanya kazi au sintaksia huripotiwa katika ujumbe rahisi na wazi wenye vidokezo kuhusu jinsi ya kurekebisha tatizo.

Hatimaye, tunaanza kurudia kwa kutumia start_replica na kupokea ujumbe wa mafanikio.

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

Hali ya urudufishaji inaweza kuulizwa kwa kutumia hoja_status, na makosa yanaweza kutazamwa kwa kutumia hoja ya show_errors.

Matokeo.

Kama tulivyokwisha sema, kila kazi ya urudufishaji inadhibitiwa na damoni. Ili kuzitazama, tunauliza jedwali la mchakato kwa kutumia amri ya Linux ps, kama inavyoonyeshwa hapa chini.

Matokeo.

Uigaji hauzingatiwi kuwa umesanidiwa hadi tuijaribu kwa wakati halisi, kama inavyoonyeshwa hapa chini. Tunaunda jedwali, kuingiza rekodi kadhaa kwenye hifadhidata ya MySQL, na kuita hoja ya sync_tables katika pg_chameleon ili kusasisha damoni na kunakili jedwali na rekodi kwenye hifadhidata 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.

Ili kuthibitisha matokeo ya jaribio, tunauliza jedwali kutoka kwa hifadhidata ya PostgreSQL na kutoa safu mlalo.

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

Ikiwa tunafanya uhamiaji, pg_chameleon amri zifuatazo zitakuwa mwisho wake. Amri zinahitaji kutekelezwa baada ya kuwa na uhakika kwamba safu mlalo za majedwali yote yanayolengwa zimenakiliwa, na matokeo yake yatakuwa hifadhidata ya PostgreSQL iliyohamishwa kwa ustadi bila marejeleo ya hifadhidata ya chanzo au mpango wa urudufishaji (sch_chameleon).

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

Ikiwa inataka, unaweza kutumia amri zifuatazo kufuta usanidi wa asili na mpango wa urudufishaji.

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

Faida za pg_kinyonga

Rahisi kuweka na usanidi.
Tatua kwa urahisi na utambue hitilafu ukitumia ujumbe wazi wa hitilafu.
Majedwali maalum ya ziada yanaweza kuongezwa kwa urudufishaji baada ya kuanzishwa bila kubadilisha usanidi uliobaki.
Inawezekana kusanidi hifadhidata za vyanzo vingi kwa hifadhidata lengwa moja, na hii ni muhimu sana ikiwa unachanganya data kutoka kwa hifadhidata moja au zaidi za MySQL hadi hifadhidata moja ya PostgreSQL.
Sio lazima kuiga majedwali uliyochagua.

Hasara za pg_kinyonga

Inatumika tu na MySQL 5.5 na hapo juu kama chanzo na PostgreSQL 9.5 na zaidi kama hifadhidata inayolengwa.
Kila jedwali lazima liwe na ufunguo msingi au wa kipekee, vinginevyo jedwali huanzishwa wakati wa mchakato wa init_replica lakini hazijaigwa.
Urudufu wa njia moja - kutoka MySQL hadi PostgreSQL pekee. Kwa hiyo, inafaa tu kwa mzunguko wa "active-passive".
Chanzo kinaweza kuwa hifadhidata ya MySQL pekee, na usaidizi wa hifadhidata ya PostgreSQL kama chanzo ni wa majaribio tu na una mapungufu ( jifunze zaidi hapa)

Matokeo ya pg_kinyonga

Njia ya kurudia katika pg_chameleon ni nzuri kwa kuhamisha hifadhidata kutoka MySQL hadi PostgreSQL. Upande mbaya muhimu ni kwamba urudufishaji ni wa njia moja tu, kwa hivyo wataalamu wa hifadhidata hawataki kuitumia kwa kitu kingine chochote isipokuwa uhamiaji. Lakini tatizo la urudufishaji wa njia moja linaweza kutatuliwa na chombo kingine cha chanzo wazi - SymmetricDS.

Soma zaidi katika nyaraka rasmi hapa. Msaada wa mstari wa amri unaweza kupatikana hapa.

Muhtasari wa SymmetricDS

SymmetricDS ni zana ya chanzo huria inayonakili hifadhidata yoyote kwa hifadhidata nyingine yoyote ya kawaida: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird na matukio mengine ya hifadhidata ya wingu, k.m. Redshift, na Azure, n.k. Vipengele vinavyopatikana: hifadhidata na ulandanishi wa faili, urudufishaji wa hifadhidata nyingi, ulandanishi uliochujwa, mabadiliko na mengine. Hiki ni zana ya Java na inahitaji toleo la kawaida la JRE au JDK (toleo la 8.0 au la juu zaidi). Hapa, mabadiliko ya data kwa vichochezi katika hifadhidata ya chanzo yanaweza kurekodiwa na kutumwa kwa hifadhidata inayofaa lengwa kwa njia ya bechi.

Vipengele vya SymmetricDS

Chombo hiki kinajitegemea kwa jukwaa, kumaanisha hifadhidata mbili au zaidi tofauti zinaweza kubadilishana data.
Hifadhidata za uhusiano husawazishwa kwa kutumia rekodi za mabadiliko ya data, wakati hifadhidata za mfumo wa faili hutumia usawazishaji wa faili.
Urudufu wa njia mbili kwa kutumia njia za Kushinikiza na Vuta kulingana na seti ya sheria.
Uhamisho wa data unawezekana kupitia mitandao salama na ya chini-bandwidth.
Urejeshaji kiotomatiki wakati nodi zinapoanza tena operesheni baada ya kutofaulu na utatuzi wa migogoro otomatiki.
API za kiendelezi zinazotumika na wingu.

Mfano

SymmetricDS inaweza kusanidiwa katika moja ya njia mbili:
Nodi kuu (ya mzazi) ambayo huratibu urudufu wa data kati ya nodi mbili za mtumwa (mtoto), na mawasiliano kati ya nodi za watoto hutokea tu kupitia mzazi.
Nodi amilifu (Njia 1) inaweza kuwasiliana kwa kurudiwa na nodi nyingine inayotumika (Njia 2) bila mpatanishi.

Katika chaguo zote mbili, kubadilishana data hutokea kwa kutumia Push na Vuta. Katika mfano huu tutazingatia usanidi-amilifu. Itachukua muda mrefu sana kuelezea usanifu mzima, kwa hivyo fanya utafiti wako. mwongozoili kupata maelezo zaidi kuhusu kifaa cha SymmetricDS.

Kusakinisha SymmetricDS ni rahisi sana: pakua toleo la chanzo huria la faili ya zip hivyo na uitoe popote unapotaka. Jedwali lililo hapa chini linatoa taarifa kuhusu eneo la usakinishaji na toleo la SymmetricDS katika mfano huu, pamoja na matoleo ya hifadhidata, matoleo ya Linux, anwani za IP, na bandari za nodi zote mbili.

Mwenyeji
vm1
vm2

Toleo la OS
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64

Toleo la seva ya DB
MySQL 5.7.26
PostgreSQL 10.5

bandari ya DB
3306
5832

Anwani ya IP
192.168.1.107
192.168.1.112

Toleo la SymmetricDS
SymmetricDS 3.9
SymmetricDS 3.9

Njia ya usakinishaji ya SymmetricDS
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20

Jina la nodi ya SymmetricDS
ushirika-000
duka-001

Hapa tunasakinisha SymmetricDS katika /usr/local/symmetric-server-3.9.20, na subdirectories mbalimbali na faili zitahifadhiwa huko. Tunavutiwa na sampuli na subdirectories za injini. Saraka ya sampuli ina faili za usanidi za mfano zilizo na sifa za nodi, na vile vile hati za SQL za mfano ili uanze haraka.

Katika saraka ya sampuli tunaona faili tatu za usanidi na mali ya node - jina linaonyesha asili ya node katika mpango fulani.

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

SymmetricDS ina faili zote muhimu za usanidi kwa muundo wa msingi wa nodi 3 (chaguo 1), na faili sawa zinaweza kutumika kwa muundo wa nodi 2 (chaguo la 2). Nakili faili ya usanidi inayohitajika kutoka kwa saraka ya sampuli hadi injini kwenye seva pangishi ya vm1. Inageuka kama hii:

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

Nodi hii katika usanidi wa SymmetricDS inaitwa corp-000, na muunganisho wa hifadhidata unashughulikiwa na kiendeshi cha mysql jdbc, ambacho hutumia kamba ya uunganisho hapo juu na vitambulisho vya kuingia. Tunaunganisha kwenye hifadhidata ya replica_db na majedwali yataundwa wakati wa kuunda schema. sync.url huonyesha mahali pa kuwasiliana na nodi kwa ulandanishi.

Node 2 kwenye seva pangishi vm2 imesanidiwa kama store-001 na iliyosalia imebainishwa katika faili ya node.properties hapa chini. Node store-001 huendesha hifadhidata ya PostgreSQL na pgdb_replica ni hifadhidata ya urudufishaji. registration.url huruhusu seva pangishi vm2 kuwasiliana na seva pangishi vm1 na kupokea maelezo ya usanidi kutoka kwayo.

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

Mfano uliokamilishwa wa SymmetricDS una vigezo vya kusanidi urudiaji wa njia mbili kati ya seva mbili za hifadhidata (nodi mbili). Hatua zilizo hapa chini zinafanywa kwa mwenyeji vm1 (corp-000), ambayo itaunda schema ya mfano na jedwali 4. Kisha kukimbia create-sym-tables kwa amri ya symadmin huunda majedwali ya saraka ambapo sheria na mwelekeo wa urudufishaji kati ya nodi zitahifadhiwa. Hatimaye, data ya sampuli hupakiwa kwenye jedwali.

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

Katika mfano, jedwali la bidhaa na bei_ya_kuuza husanidiwa kiotomatiki ili kunakiliwa kutoka corp-000 hadi store-001, na jedwali la mauzo (sale_transaction na sale_return_line_item) husanidiwa kiotomatiki ili kunakiliwa kutoka store-001 hadi corp-000. Sasa tunaunda schema katika hifadhidata ya PostgreSQL kwenye seva pangishi vm2 (store-001) ili kuitayarisha kupokea data kutoka kwa corp-000.

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

Hakikisha umeangalia kuwa hifadhidata ya MySQL kwenye vm1 ina majedwali ya mfano na majedwali ya orodha ya SymmetricDS. Kumbuka kuwa majedwali ya mfumo wa SymmetricDS (yaliyoangaziwa na sym_) yanapatikana tu kwenye node corp-000 kwa sasa kwa sababu ndipo tulipoendesha amri ya create-sym-tables na tutakuwa tunadhibiti urudufishaji. Na katika hifadhidata kwenye duka la nodi-001 kutakuwa na meza 4 tu za mfano bila data.

Wote. Mazingira yako tayari kuendesha michakato ya seva ya sym kwenye nodi zote mbili kama inavyoonyeshwa hapa chini.

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

Maingizo ya kumbukumbu yanatumwa kwa faili ya kumbukumbu ya usuli (symmetric.log) katika folda ya kumbukumbu katika saraka ambapo SymmetricDS imesakinishwa, pamoja na toto la kawaida. Seva ya sym sasa inaweza kuanzishwa kwenye nodi store-001.

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

Ukiendesha mchakato wa seva ya sym kwenye seva pangishi ya vm2, pia itaunda majedwali ya katalogi ya SymmetricDS katika hifadhidata ya PostgreSQL. Ukiendesha mchakato wa seva ya sym kwenye nodi zote mbili, zinaratibu na kila mmoja kuiga data kutoka corp-000 hadi store-001. Ikiwa baada ya sekunde chache tutauliza jedwali zote 4 pande zote mbili, tutaona kwamba urudufishaji ulifanikiwa. Au unaweza kutuma bootstrap kwa nodi store-001 kutoka corp-000 na amri ifuatayo.

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

Katika hatua hii, rekodi mpya inaingizwa kwenye jedwali la bidhaa kwenye hifadhidata ya MySQL kwenye node corp-000 (mwenyeji: vm1), na unaweza kuangalia urudufu wake kwa hifadhidata ya PostgreSQL kwenye nodi store-001 (mwenyeji: vm2). Tunaona operesheni ya Vuta kuhamisha data kutoka corp-000 hadi 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)

Ili kutekeleza operesheni ya Push kuhamisha data kutoka store-001 hadi corp-000, tunaingiza rekodi kwenye jedwali la sale_transaction na kuthibitisha kuwa urudufishaji umefaulu.

Matokeo.

Tunaona usanidi uliofaulu wa urudufishaji wa njia mbili wa jedwali la mfano kati ya hifadhidata za MySQL na PostgreSQL. Ili kusanidi marudio ya jedwali mpya za watumiaji, fuata hatua hizi: Tunaunda jedwali t1 kwa mfano na kusanidi sheria zake za kurudia kama ifuatavyo. Kwa njia hii tunasanidi uigaji pekee kutoka corp-000 hadi 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)

Kisha usanidi huarifiwa kuhusu mabadiliko ya schema, yaani, kuongezwa kwa jedwali jipya, kwa kutumia amri ya symadmin na hoja ya vichochezi vya kusawazisha, ambayo inaunda upya vichochezi ili kuweka ufafanuzi wa jedwali. send-schema inatekelezwa kutuma mabadiliko ya schema kwa nodi store-001, na uigaji wa jedwali t1 umesanidiwa.

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

Faida za SymmetricDS

Ufungaji rahisi na usanidi, ikiwa ni pamoja na seti iliyopangwa tayari ya faili na vigezo vya kuunda mzunguko wa node tatu au mbili.
Hifadhidata za majukwaa mtambuka na uhuru wa jukwaa, ikijumuisha seva, kompyuta za mkononi na vifaa vya rununu.
Rudia hifadhidata yoyote kwa hifadhidata nyingine yoyote ndani ya nchi, kwenye WAN au katika wingu.
Uwezekano wa kazi bora na hifadhidata kadhaa au elfu kadhaa kwa urudufishaji rahisi.
Toleo la kulipwa na GUI na usaidizi bora.

Hasara za SymmetricDS

Unahitaji kufafanua mwenyewe sheria na mwelekeo wa urudufishaji kwenye mstari wa amri kupitia taarifa za SQL ili kupakia meza za katalogi, ambayo inaweza kuwa ngumu.
Kuweka majedwali mengi ya urudufishaji kunaweza kuchosha isipokuwa utumie hati kuunda taarifa za SQL zinazofafanua sheria na mwelekeo wa urudufishaji.
Kuna habari nyingi sana zinazorekodiwa kwenye kumbukumbu, na wakati mwingine unahitaji kupanga faili ya kumbukumbu ili isichukue nafasi nyingi.

Matokeo ya SymmetricDS

SymmetricDS hukuruhusu kusanidi uigaji wa njia mbili kati ya nodi mbili, tatu, au hata elfu kadhaa ili kunakili na kusawazisha faili. Hiki ni zana ya kipekee ambayo hufanya kazi nyingi kwa kujitegemea, kama vile urejeshaji data kiotomatiki baada ya muda mrefu wa kukatika kwenye nodi, ubadilishanaji salama na bora wa data kati ya nodi kupitia HTTPS, udhibiti wa migogoro otomatiki kulingana na seti ya sheria, n.k. SymmetricDS hufanya kazi. replication kati ya hifadhidata zozote, kwa hivyo, inaweza kutumika kwa anuwai ya matukio, ikijumuisha uhamiaji, uhamiaji, usambazaji, uchujaji, na ubadilishaji wa data kwenye majukwaa.

Mfano ni msingi wa afisa mwongozo wa haraka kwa SymmetricDS. KATIKA mwongozo wa mtumiaji Inaelezea kwa undani dhana mbalimbali zinazohusika katika kuanzisha urudufishaji na SymmetricDS.

Chanzo: mapenzi.com

Kuongeza maoni