Replikazzjoni inkroċjata bejn PostgreSQL u MySQL

Replikazzjoni inkroċjata bejn PostgreSQL u MySQL

Ser niddeskrivi r-replikazzjoni inkroċjata bejn PostgreSQL u MySQL, kif ukoll metodi għat-twaqqif ta 'replikazzjoni inkroċjata bejn iż-żewġ servers tad-database. Tipikament, id-databases inkro-replikati jissejħu omoġenji, u huwa metodu konvenjenti ta 'ċaqliq minn server RDBMS għal ieħor.

Id-databases PostgreSQL u MySQL ġeneralment jitqiesu relazzjonali, iżda b'estensjonijiet addizzjonali joffru kapaċitajiet NoSQL. Hawnhekk ser niddiskutu r-replikazzjoni bejn PostgreSQL u MySQL minn perspettiva ta 'DBMS relazzjonali.

Aħna mhux se niddeskrivu l-ħidma interna kollha, biss il-prinċipji bażiċi sabiex ikollok idea tal-konfigurazzjoni tar-replikazzjoni bejn is-servers tad-database, il-vantaġġi, il-limitazzjonijiet u l-każijiet ta 'użu.

Tipikament, ir-replikazzjoni bejn żewġ servers ta' database identiċi ssir jew f'modalità binarja jew bl-użu ta' mistoqsijiet bejn kaptan (magħruf ukoll bħala pubblikatur, kaptan, jew attiv) u slave (abbonat, standby, jew passiv). L-iskop tar-replikazzjoni huwa li tipprovdi kopja f'ħin reali tad-database prinċipali fuq in-naħa tal-iskjavi. F'dan il-każ, id-dejta tiġi trasferita minn kaptan għal slave, jiġifieri minn attiv għal passiv, minħabba li r-replikazzjoni titwettaq biss f'direzzjoni waħda. Imma tista 'twaqqaf replikazzjoni bejn żewġ databases fiż-żewġ direzzjonijiet, sabiex id-data tiġi trasferita minn slave għal kaptan f'konfigurazzjoni attiva-attiva. Dan kollu, inkluż replikazzjoni kaskata, huwa possibbli bejn żewġ servers ta 'database identiċi jew aktar. Konfigurazzjoni attiva-attiva jew attiva-passiva tiddependi fuq il-ħtieġa, id-disponibbiltà ta' tali kapaċitajiet fil-konfigurazzjoni inizjali jew l-użu ta 'soluzzjonijiet ta' konfigurazzjoni esterna u kompromessi eżistenti .

Il-konfigurazzjoni deskritta hija possibbli bejn servers ta' database differenti. Is-server jista' jiġi kkonfigurat biex jaċċetta data replikata minn server ta' database ieħor u xorta jżomm snapshots f'ħin reali tad-data replikata. MySQL u PostgreSQL joffru ħafna minn dawn il-konfigurazzjonijiet internament jew permezz ta 'estensjonijiet ta' partijiet terzi, inklużi metodi ta 'log binarji, qfil tad-disk, u metodi bbażati fuq stqarrijiet u ringieli.

Replikazzjoni inkroċjata bejn MySQL u PostgreSQL hija meħtieġa għal migrazzjoni ta' darba minn server ta' database għal ieħor. Dawn id-databases jużaw protokolli differenti, u għalhekk mhux possibbli li jgħaqqduhom direttament. Biex tistabbilixxi l-iskambju tad-dejta, tista 'tuża għodda esterna ta' sors miftuħ, pereżempju pg_chameleon.

X'inhu pg_chameleon

pg_chameleon hija sistema ta 'replikazzjoni minn MySQL għal PostgreSQL f'Python 3. Hija tuża l-librerija ta' replikazzjoni mysql ta 'sors miftuħ, ukoll f'Python. Immaġini ta 'ringiela huma estratti mit-tabelli MySQL u maħżuna bħala oġġetti JSONB fid-database PostgreSQL, u mbagħad decrypted mill-funzjoni pl/pgsql u riprodotti fid-database PostgreSQL.

Karatteristiċi ta' pg_chameleon

Skemi MySQL multipli mill-istess cluster jistgħu jiġu replikati għal database PostgreSQL ta' mira waħda f'konfigurazzjoni waħda għal ħafna
L-ismijiet ta' l-iskemi tas-sors u tal-mira ma jistgħux ikunu l-istess.
Id-dejta tar-replikazzjoni tista' tiġi rkuprata minn replika MySQL cascaded.
Tabelli li ma jistgħux jirreplikaw jew jipproduċu żbalji huma esklużi.
Kull funzjoni ta 'replikazzjoni hija kkontrollata minn daemons.
Kontroll permezz ta 'parametri bbażati fuq YAML u fajls ta' konfigurazzjoni.

Eżempju

Ospitanti
vm1
vm2

Verżjoni OS
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64

Verżjoni tas-server DB
MySQL 5.7.26
PostgreSQL 10.5

Port DB
3306
5433

Indirizz IP
192.168.56.102
192.168.56.106

Biex tibda, ipprepara l-komponenti kollha meħtieġa biex tinstalla pg_chameleon. Dan l-eżempju jinstalla Python 3.6.8, li joħloq u jattiva l-ambjent virtwali.

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

Wara li tinstalla b'suċċess Python3.6, trid tlesti r-rekwiżiti li jifdal, bħall-ħolqien u l-attivazzjoni ta 'ambjent virtwali. Barra minn hekk, il-modulu pip huwa aġġornat għall-aħħar verżjoni u użat biex jinstalla pg_chameleon. Il-kmandi hawn taħt jinstallaw intenzjonalment pg_chameleon 2.0.9, għalkemm l-aħħar verżjoni hija 2.0.10. Dan huwa meħtieġ biex jiġu evitati bugs ġodda fil-verżjoni aġġornata.

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

Imbagħad insejħu pg_chameleon (chameleon huwa kmand) bl-argument set_configuration_files biex nippermettu pg_chameleon u toħloq direttorji u fajls tal-konfigurazzjoni default.

(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

Issa noħolqu kopja ta 'config-example.yml bħala default.yml sabiex issir il-fajl tal-konfigurazzjoni default. Fajl ta' konfigurazzjoni kampjun għal dan l-eżempju huwa pprovdut hawn taħt.

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

Il-fajl tal-konfigurazzjoni f'dan l-eżempju huwa kampjun ta' fajl pg_chameleon b'modifiki minuri biex ikun adattat għall-ambjenti tas-sors u tal-mira, u hawn taħt hemm ħarsa ġenerali lejn it-taqsimiet differenti tal-fajl tal-konfigurazzjoni.

Fil-fajl tal-konfigurazzjoni default.yml hemm sezzjoni ta 'settings globali, fejn tista' timmaniġġja l-issettjar bħall-post tal-fajl tal-lock, il-post ta 'zkuk, il-perjodu ta' ħażna għal zkuk, eċċ. Wara tiġi s-sezzjoni tat-tip override, fejn sett ta' regoli għat-tipi prevalenti waqt ir-replikazzjoni. L-eżempju default għal regola tip overriding li tikkonverti tinyint(1) għal valur boolean. Fit-taqsima li jmiss, aħna nispeċifikaw id-dettalji tal-konnessjoni mad-database fil-mira. Fil-każ tagħna, din hija database PostgreSQL, nominata pg_conn. Fl-aħħar taqsima, aħna nindikaw id-data tas-sors, jiġifieri, il-parametri tal-konnessjoni tad-database tas-sors, l-iskema ta 'mapping bejn id-databases tas-sors u tal-mira, tabelli li jeħtieġ li jinqabżu, ħin ta' stennija, memorja, daqs tal-pakkett. Innota li "sorsi" hija plural, li jfisser li nistgħu nżidu databases ta' sorsi multipli ma' database ta' mira waħda biex inwaqqfu konfigurazzjoni ħafna għal wieħed.

Id-database eżempju world_x fiha 4 tabelli b'ringieli li l-komunità MySQL toffri bħala eżempji. Jista 'jitniżżel hawn. Id-database tal-kampjun tiġi bħala arkivju qatran u kompressat b'struzzjonijiet għall-ħolqien u l-importazzjoni ta 'ringieli.

Fid-databases MySQL u PostgreSQL, jinħoloq utent speċjali bl-istess isem usr_replica. Fil-MySQL, jingħata drittijiet ta' qari addizzjonali għat-tabelli kollha replikati.

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;

Fuq in-naħa PostgreSQL, tinħoloq database db_replica li se taċċetta bidliet mid-database MySQL. L-utent usr_replica f'PostgreSQL huwa kkonfigurat awtomatikament bħala s-sid ta 'żewġ skemi, pgworld_x u sch_chameleon, li fihom it-tabelli replikati attwali u t-tabelli tad-direttorju tar-replikazzjoni, rispettivament. L-argument create_replica_schema huwa responsabbli għall-konfigurazzjoni awtomatika, kif se tara hawn taħt.

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

Id-database MySQL hija kkonfigurata b'xi bidliet fil-parametri biex tippreparaha għar-replikazzjoni kif muri hawn taħt. Ikollok bżonn terġa' tibda s-server tad-database biex il-bidliet jidħlu fis-seħħ.

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

Issa huwa importanti li tiċċekkja l-konnessjoni maż-żewġ servers tad-database sabiex ma jkunx hemm problemi meta tħaddem il-kmandi pg_chameleon.

Fuq in-node PostgreSQL:

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

Fuq in-node MySQL:

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

It-tliet kmandi pg_chameleon (chameleon) li jmiss jippreparaw l-ambjent, żid is-sors, u inizjalizza r-replika. L-argument create_replica_schema għal pg_chameleon joħloq skema default (sch_chameleon) u skema ta 'replikazzjoni (pgworld_x) fid-database PostgreSQL, kif diġà ddiskutejna. L-argument add_source iżid database tas-sors mal-konfigurazzjoni billi jaqra l-fajl tal-konfigurazzjoni (default.yml), u fil-każ tagħna huwa mysql, u init_replica inizjalizza l-konfigurazzjoni bbażata fuq il-parametri fil-fajl tal-konfigurazzjoni.

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

L-output ta 'dawn it-tliet kmandi jindika b'mod ċar li ġew esegwiti b'suċċess. Kwalunkwe ħabtiet jew żbalji ta' sintassi huma rrappurtati f'messaġġi sempliċi u ċari b'ideat dwar kif tissewwa l-problema.

Fl-aħħarnett, nibdew ir-replikazzjoni billi tuża start_replica u nirċievu messaġġ ta 'suċċess.

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

L-istatus tar-replikazzjoni jista’ jiġi mistoqsi bl-użu tal-argument show_status, u l-iżbalji jistgħu jitqiesu bl-użu tal-argument show_errors.

Ir-riżultat.

Kif diġà għidna, kull funzjoni ta 'replikazzjoni hija kkontrollata minn daemons. Biex tarahom, aħna nistaqsu t-tabella tal-proċess bil-kmand Linux ps, kif muri hawn taħt.

Ir-riżultat.

Ir-replikazzjoni mhix ikkunsidrata kkonfigurata sakemm nittestjawha f'ħin reali, kif muri hawn taħt. Aħna noħolqu tabella, daħħal ftit rekords fid-database MySQL, u nsejħu l-argument sync_tables f'pg_chameleon biex taġġorna d-daemons u nirreplika t-tabella bir-rekords fid-database 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.

Biex nikkonfermaw ir-riżultati tat-test, aħna nistaqsu t-tabella mid-database PostgreSQL u noħorġu r-ringieli.

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

Jekk qed nagħmlu migrazzjoni, il-kmandi pg_chameleon li ġejjin se jkunu t-tmiem tagħha. Il-kmandi jeħtieġ li jiġu eżegwiti wara li nkunu ċerti li r-ringieli tat-tabelli kollha fil-mira jkunu ġew replikati, u r-riżultat ikun database PostgreSQL emigrata pulit mingħajr referenzi għad-database tas-sors jew l-iskema ta 'replikazzjoni (sch_chameleon).

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

Jekk mixtieq, tista 'tuża l-kmandi li ġejjin biex tħassar il-konfigurazzjoni oriġinali u l-iskema ta' replikazzjoni.

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

Vantaġġi ta 'pg_chameleon

Setup u konfigurazzjoni faċli.
Issolvi l-problemi u identifika l-anomaliji b'messaġġi ċari ta 'żball.
Tabelli speċjali addizzjonali jistgħu jiġu miżjuda mar-replikazzjoni wara l-inizjalizzazzjoni mingħajr ma jinbidel il-bqija tal-konfigurazzjoni.
Huwa possibbli li jiġu kkonfigurati databases ta' sorsi multipli għal database ta' mira waħda, u dan huwa utli ħafna jekk qed tgħaqqad data minn database MySQL waħda jew aktar f'database PostgreSQL waħda.
M'għandekx għalfejn tirreplika t-tabelli magħżula.

Żvantaġġi ta' pg_chameleon

Appoġġjat biss b'MySQL 5.5 u ogħla bħala sors u PostgreSQL 9.5 u ogħla bħala database fil-mira.
Kull tabella jrid ikollha ċavetta primarja jew unika, inkella t-tabelli jiġu inizjalizzati waqt il-proċess init_replica iżda ma jiġux replikati.
Replikazzjoni f'direzzjoni waħda - biss minn MySQL għal PostgreSQL. Għalhekk, huwa adattat biss għaċ-ċirkwit "attiv-passiv".
Is-sors jista' jkun biss database MySQL, u l-appoġġ għal database PostgreSQL bħala sors huwa biss sperimentali u b'limitazzjonijiet (tgħallem aktar hawn)

Riżultati għal pg_chameleon

Il-metodu ta 'replikazzjoni f'pg_chameleon huwa kbir għall-migrazzjoni ta' database minn MySQL għal PostgreSQL. L-iżvantaġġ sinifikanti huwa li r-replikazzjoni hija f'direzzjoni waħda biss, għalhekk il-professjonisti tad-database x'aktarx ma jridux jużawha għal xi ħaġa oħra għajr il-migrazzjoni. Iżda l-problema tar-replikazzjoni one-way tista 'tiġi solvuta b'għodda oħra ta' sors miftuħ - SymmetricDS.

Aqra aktar fid-dokumentazzjoni uffiċjali hawn. Tista 'tinstab għajnuna tal-linja tal-kmand hawn.

Ħarsa ġenerali lejn SymmetricDS

SymmetricDS hija għodda ta' sors miftuħ li tirreplika kwalunkwe database għal kwalunkwe database komuni oħra: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird u każijiet oħra ta' database tas-sħab, eż. Redshift, u Azure, eċċ Karatteristiċi disponibbli: sinkronizzazzjoni tad-database u tal-fajls, replikazzjoni tad-database multi-master, sinkronizzazzjoni ffiltrata, trasformazzjoni u oħrajn. Din hija għodda Java u teħtieġ rilaxx standard tal-JRE jew JDK (verżjoni 8.0 jew ogħla). Hawnhekk, il-bidliet tad-dejta għal triggers fid-database tas-sors jistgħu jiġu rreġistrati u mibgħuta fid-database fil-mira xierqa fil-forma ta 'lottijiet.

Karatteristiċi SymmetricDS

L-għodda hija indipendenti mill-pjattaforma, jiġifieri żewġ databases differenti jew aktar jistgħu jiskambjaw data.
Id-databases relazzjonali huma sinkronizzati bl-użu tar-rekords tal-bidla tad-data, filwaqt li d-databases ibbażati fuq is-sistema tal-fajls jużaw is-sinkronizzazzjoni tal-fajls.
Replikazzjoni f’żewġ direzzjonijiet bl-użu ta’ metodi Push and Pull ibbażati fuq sett ta’ regoli.
It-trasferiment tad-dejta huwa possibbli fuq netwerks sikuri u b'bandwidth baxx.
Irkupru awtomatiku meta n-nodi jerġgħu jibdew joperaw wara falliment u riżoluzzjoni awtomatika tal-kunflitt.
APIs ta' estensjoni kompatibbli u qawwija mas-cloud.

Eżempju

SymmetricDS jista 'jiġi kkonfigurat f'waħda minn żewġ għażliet:
Node prinċipali (ġenitur) li jikkoordina b'mod ċentrali r-replikazzjoni tad-dejta bejn żewġ nodi skjavi (minuri), u l-komunikazzjoni bejn nodi sekondarji sseħħ biss permezz tal-ġenitur.
Nodu attiv (Node 1) jista 'jikkomunika għar-replikazzjoni ma' nodu attiv ieħor (Node 2) mingħajr intermedjarju.

Fiż-żewġ għażliet, l-iskambju tad-dejta jseħħ bl-użu Push and Pull. F'dan l-eżempju se nħarsu lejn konfigurazzjoni attiva-attiva. Ikun jieħu wisq żmien biex tiddeskrivi l-arkitettura kollha, għalhekk tagħmel ir-riċerka tiegħek. gwidabiex titgħallem aktar dwar l-apparat SymmetricDS.

L-installazzjoni ta’ SymmetricDS hija sempliċi ħafna: niżżel il-verżjoni open source tal-fajl zip għalhekk u oħroġ fejn trid. It-tabella hawn taħt tipprovdi informazzjoni dwar il-post tal-installazzjoni u l-verżjoni ta’ SymmetricDS f’dan l-eżempju, kif ukoll il-verżjonijiet tad-database, il-verżjonijiet tal-Linux, l-indirizzi IP, u l-portijiet għaż-żewġ nodi.

Ospitanti
vm1
vm2

Verżjoni OS
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64

Verżjoni tas-server DB
MySQL 5.7.26
PostgreSQL 10.5

Port DB
3306
5832

Indirizz IP
192.168.1.107
192.168.1.112

Verżjoni SymmetricDS
SymmetricDS 3.9
SymmetricDS 3.9

Mogħdija ta' installazzjoni SymmetricDS
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20

Isem tan-nodu SymmetricDS
corp-000
maħżen-001

Hawnhekk ninstallaw SymmetricDS f'/usr/local/symmetric-server-3.9.20, u diversi subdirettorji u fajls se jinħażnu hemmhekk. Aħna interessati fis-subdirettorji tal-kampjuni u l-magni. Id-direttorju tal-kampjuni fih fajls ta 'konfigurazzjoni ta' eżempju bi proprjetajiet ta 'node, kif ukoll skripts SQL ta' eżempju biex tibda malajr.

Fid-direttorju tal-kampjuni naraw tliet fajls ta 'konfigurazzjoni bi proprjetajiet tan-node - l-isem juri n-natura tan-nodu f'ċerta skema.

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

SymmetricDS għandu l-fajls kollha ta 'konfigurazzjoni meħtieġa għal disinn bażiku ta' 3 nodi (għażla 1), u l-istess fajls jistgħu jintużaw għal disinn ta '2 nodi (għażla 2). Ikkopja l-fajl tal-konfigurazzjoni meħtieġ mid-direttorju tal-kampjuni għall-magni fuq l-host vm1. Jirriżulta hekk:

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

Dan in-node fil-konfigurazzjoni SymmetricDS jissejjaħ corp-000, u l-konnessjoni tad-database hija mmaniġġjata mis-sewwieq mysql jdbc, li juża s-sekwenza ta 'konnessjoni hawn fuq u l-kredenzjali tal-login. Aħna nikkonnettjaw mad-database replica_db u se jinħolqu tabelli waqt il-ħolqien ta 'skema. sync.url juri fejn għandek tikkuntattja n-node għas-sinkronizzazzjoni.

Node 2 fuq host vm2 huwa kkonfigurat bħala store-001 u l-bqija huwa speċifikat fil-fajl node.properties hawn taħt. Node store-001 imexxi d-database PostgreSQL u pgdb_replica hija d-database tar-replikazzjoni. registration.url jippermetti lill-host vm2 li jikkuntattja lill-host vm1 u jirċievi dettalji tal-konfigurazzjoni minnu.

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

L-eżempju SymmetricDS komplut fih parametri għat-twaqqif ta' replikazzjoni f'żewġ direzzjonijiet bejn żewġ servers ta' database (żewġ nodi). Il-passi hawn taħt jitwettqu fuq host vm1 (corp-000), li se toħloq skema ta 'eżempju b'4 tabelli. Imbagħad it-tħaddim ta' create-sym-tables bil-kmand symadmin joħloq tabelli tad-direttorju fejn se jinħażnu r-regoli u d-direzzjoni tar-replikazzjoni bejn in-nodi. Fl-aħħarnett, id-dejta tal-kampjun titgħabba fit-tabelli.

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

Fl-eżempju, it-tabelli item u item_selling_price huma awtomatikament konfigurati biex jirreplikaw minn corp-000 għal store-001, u t-tabelli tal-bejgħ (sale_transaction u sale_return_line_item) huma awtomatikament konfigurati biex jirreplikaw minn store-001 għal corp-000. Issa noħolqu skema fid-database PostgreSQL fuq il-host vm2 (store-001) biex nippreparaha biex tirċievi data minn corp-000.

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

Kun żgur li tivverifika li d-database MySQL fuq vm1 għandha tabelli ta’ eżempju u tabelli ta’ katalgu SymmetricDS. Innota li t-tabelli tas-sistema SymmetricDS (prefissati b'sym_) bħalissa huma disponibbli biss fuq in-node corp-000 għaliex hemmhekk għamilna l-kmand create-sym-tables u se nkunu qed nimmaniġġjaw ir-replikazzjoni. U fid-database fuq in-node store-001 se jkun hemm biss 4 tabelli ta 'eżempji mingħajr data.

Kollha. L-ambjent huwa lest biex imexxi proċessi sym server fuq iż-żewġ nodi kif muri hawn taħt.

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

L-entrati tar-reġistri jintbagħtu f'fajl log ta' l-isfond (symmetric.log) fil-folder tar-zkuk fid-direttorju fejn SymmetricDS huwa installat, kif ukoll għall-output standard. Is-server sym issa jista' jinbeda fuq in-node store-001.

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

Jekk tmexxi l-proċess tas-server sym fuq il-host vm2, se toħloq ukoll tabelli tal-katalgu SymmetricDS fid-database PostgreSQL. Jekk tmexxi l-proċess tas-server sym fuq iż-żewġ nodi, huma jikkoordinaw ma 'xulxin biex jirreplikaw id-dejta minn corp-000 għal store-001. Jekk wara ftit sekondi nistaqsu l-4 tabelli kollha fuq iż-żewġ naħat, naraw li r-replikazzjoni kienet suċċess. Jew tista 'tibgħat il-bootstrap lin-node store-001 minn corp-000 bil-kmand li ġej.

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

F'dan il-punt, rekord ġdid jiddaħħal fit-tabella tal-oġġett fid-database MySQL fuq in-node corp-000 (host: vm1), u tista 'tiċċekkja r-replikazzjoni tiegħu fid-database PostgreSQL fuq in-node store-001 (host: vm2). Naraw operazzjoni Pull biex timxi d-dejta minn corp-000 għal 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)

Biex twettaq operazzjoni Push biex tiċċaqlaq id-dejta minn store-001 għal corp-000, aħna daħħal rekord fit-tabella sale_transaction u nivverifikaw li r-replikazzjoni tkun ta 'suċċess.

Ir-riżultat.

Naraw is-setup b'suċċess ta 'replikazzjoni f'żewġ direzzjonijiet tat-tabelli ta' eżempju bejn databases MySQL u PostgreSQL. Biex twaqqaf replikazzjoni għal tabelli ta' utenti ġodda, segwi dawn il-passi: Aħna noħolqu tabella t1 per eżempju u kkonfigurat ir-regoli ta 'replikazzjoni tagħha kif ġej. Dan il-mod aħna kkonfigurat biss replikazzjoni minn corp-000 għal 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)

Il-konfigurazzjoni mbagħad tiġi notifikata bil-bidla fl-iskema, jiġifieri, iż-żieda ta 'tabella ġdida, bl-użu tal-kmand symadmin bl-argument sync-triggers, li jirrikrea l-iskattar biex jimmappa d-definizzjonijiet tat-tabella. send-schema hija eżegwita biex tibgħat bidliet fl-iskema għan-node store-001, u r-replikazzjoni tat-tabella t1 hija kkonfigurata.

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

Benefiċċji ta 'SymmetricDS

Installazzjoni u konfigurazzjoni faċli, inkluż sett lest ta 'fajls b'parametri għall-ħolqien ta' ċirkwit ta 'tliet nodi jew żewġ nodi.
Databases bejn pjattaformi u indipendenza tal-pjattaforma, inklużi servers, laptops u apparat mobbli.
Irreplika kwalunkwe database għal kwalunkwe database oħra lokalment, fuq il-WAN jew fil-cloud.
Possibbiltà ta 'ħidma ottimali ma' ftit databases jew diversi eluf għal replikazzjoni konvenjenti.
Verżjoni mħallsa b'GUI u appoġġ eċċellenti.

Żvantaġġi ta 'SymmetricDS

Għandek bżonn tiddefinixxi manwalment ir-regoli u d-direzzjoni tar-replikazzjoni fuq il-linja tal-kmand permezz ta 'dikjarazzjonijiet SQL biex tagħbija tabelli tal-katalgu, li jistgħu jkunu inkonvenjenti.
It-twaqqif ta 'ħafna tabelli għar-replikazzjoni jista' jkun tedious sakemm ma tużax skripts biex toħloq dikjarazzjonijiet SQL li jiddefinixxu r-regoli u d-direzzjoni tar-replikazzjoni.
Hemm wisq informazzjoni li qed tiġi rreġistrata fir-zkuk, u xi kultant ikollok bżonn tirranġa l-fajl tar-reġistru sabiex ma jieħux wisq spazju.

Riżultati għal SymmetricDS

SymmetricDS jippermettilek li twaqqaf replikazzjoni f'żewġ direzzjonijiet bejn żewġ, tlieta, jew saħansitra diversi eluf ta 'nodi biex tirreplika u tissinkronizza fajls. Din hija għodda unika li twettaq b'mod indipendenti ħafna kompiti, bħall-irkupru awtomatiku tad-dejta wara perjodu twil ta' waqfien fuq nodu, skambju ta' data sigur u effiċjenti bejn in-nodi permezz ta' HTTPS, ġestjoni awtomatika tal-kunflitti bbażata fuq sett ta' regoli, eċċ. SymmetricDS twettaq replikazzjoni bejn kwalunkwe databases, għalhekk, tista 'tintuża għal varjetà wiesgħa ta' xenarji, inklużi migrazzjoni, migrazzjoni, distribuzzjoni, filtrazzjoni, u trasformazzjoni ta 'data fuq pjattaformi.

L-eżempju huwa bbażat fuq l-uffiċjal gwida ta 'malajr minn SymmetricDS. IN manwal għall-utent Jiddeskrivi fid-dettall il-kunċetti varji involuti fit-twaqqif ta 'replikazzjoni ma' SymmetricDS.

Sors: www.habr.com

Żid kumment