Ristrepikatsioon PostgreSQL-i ja MySQL-i vahel

Ristrepikatsioon PostgreSQL-i ja MySQL-i vahel

Annan ĂŒlevaate ristrepikatsioonist PostgreSQL-i ja MySQL-i vahel ning meetoditest nende andmebaasisĂŒsteemide vahelise ristrepikatsiooni seadistamiseks. Üldiselt peetakse ristrepikatsiooni allikaid homogeenseteks, ning see on mugav meetod liikuda ĂŒhest relatsioonilisest andmebaasisĂŒsteemist teise.

PostgreSQL-i ja MySQL-i andmebaasid peetakse relatsioonilisteks, kuid koos lisandustega pakuvad nad ka NoSQL vĂ”imalusi. RÀÀgime PostgreSQL-i ja MySQL-i vahelisest repikatsioonist relatsiooniliste andmebaasisĂŒsteemide perspektiivist.

Me ei kirjeldada kogu sisemist toimingut, vaid ainult pÔhialuseid, et te saaksite aimu andmebaasiserverite vahelise repikatsiooni seadistamisest, selle eelistest, piirangutest ja kasutusstsenaariumidest.

Replikatsioon kahe identse andmebaasiserveri vahel toimub tavaliselt kas binaarses reĆŸiimis vĂ”i pĂ€ringute kaudu peamise sĂ”lme (tuntud ka kui vĂ€ljaandja, peamine vĂ”i aktiivne) ja alam-sĂ”lme (tellija, oote- vĂ”i passiivne) vahel. Replikatsiooni eesmĂ€rk on reaalajas edastada peamise andmebaasi koopia alam-sĂ”lmele. Andmed edastatakse peamiselt alammele, see tĂ€hendab aktiivsest passiivsesse, kuna replikatsioon toimub ainult ĂŒhes suunas. Siiski on vĂ”imalik seadistada replikatsioon kahe andmebaasi vahel mĂ”lemas suunas, nii et andmed edastatakse alam-sĂ”lmest peamisele, luues „aktiivne-aktiivne” konfiguratsiooni. KĂ”ik see, sealhulgas kaskaad-replikatsioon, on vĂ”imalik kahe vĂ”i enama identse andmebaasiserveri vahel. „Aktiivne-aktiivne” vĂ”i „aktiivne-passiivne” konfiguratsioon sĂ”ltub vajadusest, nende vĂ”imaluste olemasolust algses konfiguratsioonis vĂ”i vĂ€listest lahendustest, mis on vajalikud seadistamiseks ja olemasolevate kompromisside tegemiseks.

Kirjeldatud konfiguratsioon on vÔimalik erinevate andmebaasi serverite vahel. Serverit saab seadistada teiste andmebaasi serverite replitseeritud andmete vastuvÔtmiseks, sÀilitades samas reaalajas replitseeritud andmete stseenid. MySQL ja PostgreSQL pakuvad enamikku neist konfiguratsioonidest oma jÔududega vÔi kolmandate osapoolte laienduste abil, sealhulgas binaarsete logide, kettalukkude ja operaatorite ning ridade pÔhiste meetodite abil.

Ristreplikatsioon MySQL ja PostgreSQL vahel on vajalik ĂŒhekordseks migreerimiseks ĂŒhelt andmebaasi serverilt teisele. Need andmebaasid kasutavad erinevaid protokolle, seetĂ”ttu ei saa neid otse siduda. Andmete vahetamiseks saab kasutada vĂ€liseid avatud lĂ€htekoodiga tööriistu, nĂ€iteks pg_chameleon.

Mis on pg_chameleon

pg_chameleon on replikatsiooni sĂŒsteem MySQL'ist PostgreSQL'i, mis on loodud Python 3 peal. See kasutab avatud lĂ€htekoodiga mysql-replication teeki, samuti Pythonis. Ridade pildid tĂ”mmatakse MySQL tabelitest ja salvestatakse PostgreSQL andmebaasis JSONB objektidena, seejĂ€rel deĆĄifreeritakse pl/pgsql funktsiooni abil ja taastatakse PostgreSQL andmebaasis.

pg_chameleon omadused

Ühe klaster MySQL-i mitu skeemi saab replitseerida ĂŒhte siht PostgreSQL andmebaasi konfiguratsiooniga â€žĂŒks-ĂŒhele”.
Algse ja sihiskeemi nimed ei saa kattuda.
Replitseeritud andmeid saab saada MySQL-i kaskaadiga replika kaudu.
Tabelid, mis ei saa replitseerida vÔi pÔhjustavad vigu, jÀetakse vÀlja.
Iga replitseerimisfunktsiooni haldavad daemonid.
Kontroll YAML-pÔhiste parameetrite ja konfiguratsioonifailide abil.

NĂ€ide

Host
vm1
vm2

OS-i versioon
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64

Andmebaasi serveri versioon
MySQL 5.7.26
PostgreSQL 10.5

Andmebaasi port
3306
5433

IP-aadress
192.168.56.102
192.168.56.106

Esiteks valmistage kÔik vajalikud komponendid pg_chameleon'i installimiseks. Selles nÀites on installitud Python 3.6.8, mis loob virtuaalse keskkonna ja aktiveerib selle.

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

PĂ€rast Python3.6 edukat installimist tuleb tĂ€ita ĂŒlejÀÀnud nĂ”uded, nĂ€iteks luua ja aktiveerida virtuaalne keskkond. Lisaks uuendatakse pip-moodul viimasele versioonile ja seda kasutatakse pg_chameleon'i installimiseks. Allpool olevates kĂ€skudes installitakse tahtlikult pg_chameleon 2.0.9, kuigi viimane versioon on 2.0.10. See on vajalik, et vĂ€ltida uusi vigu uuendatud versioonis.

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

SeejÀrel kutsume pg_chameleon'i (chameleon on kÀsk) argumentidega set_configuration_files, et aktiveerida pg_chameleon ja luua vaike kataloogid ja konfiguratsioonifailid.

(venv) $ > chameleon set_configuration_files
loome katalooge /root/.pg_chameleon
loome katalooge /root/.pg_chameleon/configuration/
loome katalooge /root/.pg_chameleon/logs/
loome katalooge /root/.pg_chameleon/pid/
kopeerime konfiguratsiooni nÀite failisse /root/.pg_chameleon/configuration//config-example.yml

NĂŒĂŒd loome faili config-example.yml koopia nimega default.yml, et sellest saaks vaike konfiguratsioonifail. Selle nĂ€idisfaili konfiguratsioon on toodud allpool.

$> cat default.yml
---
#globaal seadistused
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 vĂ”imaldab kasutajal muuta vaikimisi tĂŒĂŒbi teisendamine teiseks.
type_override:
  "tinyint(1)":
    override_to: boolean
    override_tables:
      - "*"

#postgresi sihtkoha ĂŒhendus
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 pÀev'
    copy_max_memory: "300M"
    copy_mode: 'file'
    out_dir: /tmp
    sleep_loop: 1
    on_error_replay: continue
    on_error_read: continue
    auto_maintenance: "keelatud"
    gtid_enable: No
    type: mysql
    skip_events:
      insert:
        - delphis_mediterranea.foo #vahetab vÀlja sisestused tabelis delphis_mediterranea.foo
      delete:
        - delphis_mediterranea #vahetab vÀlja kustutused skeemis delphis_mediterranea
      update:

Konfiguratsioonifail selles nĂ€ites on pg_chameleon'i fail, millel on vĂ€ikesed muudatused vastavalt alg- ja sihtkeskkondadele. Allpool on ĂŒlevaade konfiguratsioonifaili erinevatest jaotustest.

Faili konfiguratsioonis default.yml on globaalsete parameetrite (global settings) jaotis, kus saab hallata selliseid seadeid nagu lukufaili asukoht, logide asukoht, logide sĂ€ilitamise periood jne. JĂ€rgneb tĂŒĂŒpide ĂŒlekirjutamise (type override) jaotis, kus on mÀÀratud reeglite kogum tĂŒĂŒpide ĂŒlekirjutamiseks replikeerimise ajal. VaikesnĂ€idisena kasutatakse tĂŒĂŒpide ĂŒlekirjutamise reeglit, mis muundab tinyint(1) loogiliseks vÀÀrtuseks. JĂ€rgmisel jaotisel mÀÀrame ĂŒhenduse ĂŒksikasjad sihtandmebaasiga. Meie juhul on see PostgreSQL andmebaas, mille tĂ€histamine on pg_conn. Viimases jaotises mÀÀrame lĂ€hteandmete andmed, st lĂ€htandmebaasi ĂŒhenduse parameetrid, lĂ€hte- ja sihtandmebaasi skeemi vastavuse, tabelid, mida tuleb vahele jĂ€tta, ooteaeg, mĂ€lu, pakendi suurus. Pange tĂ€hele, et „sources” on mitmuses, seega saame lisada mitu lĂ€hteandmebaasi ĂŒhe sihtandmebaasi jaoks, et seadistada „mitu ĂŒhele” konfiguratsioon.

NÀidis andmebaas world_x sisaldab 4 tabelit ridadega, mille MySQLi kogukond on nÀitena pakkunud. Selle saab alla laadida. siit. NÀidis andmebaas tuleb tar- ja pakitud arhiivina koos juhistega ridade loomise ja importimise kohta.

MySQLis ja PostgreSQLis luuakse eriline kasutaja nimega usr_replica. MySQLis antakse talle tÀiendavad Ôigused kÔigi replikeeritavate tabelite lugemiseks.

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;

PostgreSQLi poolel luuakse andmebaas db_replica, mis aktsepteerib muudatusi MySQLi andmebaasist. Kasutaja usr_replica PostgreSQLis konfigureeritakse automaatselt kahe skeemi pgworld_x ja sch_chameleon omanikuks, mis sisaldavad vastavalt tegelikke replikeeritud tabeleid ja replikatsiooni katalooge. Automaatse konfiguratsiooni eest vastutab argument create_replica_schema, nagu nÀete allpool.

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

MySQL andmebaas konfigureeritakse mÔningate parameetrite muutmisega, et valmistada see ette replikatsiooniks, nagu allpool nÀidatud. Andmebaasi server tuleb taaskÀivitada, et muudatused jÔustuksid.

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

Praegu on oluline kontrollida ĂŒhendust mĂ”lema andmebaasi serveriga, et pg_chameleon'i kĂ€ivitamisel ei tekiks probleeme.

PostgreSQL sÔlmes:

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

MySQL sÔlmes:

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

JÀrgmised kolm kÀsku pg_chameleon (chameleon) valmistavad keskkonna ette, lisavad allika ja initsialiseerivad replikatsiooni. Argument create_replica_schema pg_chameleon'is loob vaikimisi skeemi (sch_chameleon) ja replikatsiooniskeemi (pgworld_x) PostgreSQL andmebaasis, nagu oleme juba maininud. Argument add_source lisab allika andmebaasi konfiguratsiooni, lugedes konfiguratsioonifaili (default.yml), ja meie juhul on see mysql, ning init_replica initsialiseerib konfiguratsiooni, lÀhtudes failis mÀÀratud parameetritest.

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

Nende kolme kĂ€su vĂ€ljund nĂ€itab selgelt nende eduka tĂ€itmise. KĂ”ik tĂ”rked vĂ”i sĂŒntaksivead kuvatakse lihtsate ja arusaadavate sĂ”numitega koos vihjete jaotamiseks probleemide parandamiseks.

LÔpuks alustame replikatsiooni start_replica abil ja saame sÔnumi eduka tÀitmise kohta.

$> chameleon start_replica --config default --source mysql 
output: Alustamine replikatsiooni protsessi allika mysql jaoks

Replikatsiooni staatust saab kĂŒsida show_status argumendi abil ja vigu vaadata show_errors argumendi kaudu.

Tulemus.

Kuidas juba mainitud, kontrollivad iga replikatsiooni funktsiooni deemonid. Deemonite vaatamiseks kĂŒsime Linuxi protsesside tabelit kĂ€suga ps, nagu allpool nĂ€idatud.

Tulemus.

Replikatsioon ei loeta seadistunuks, kui me ei testi seda reaalajas, nagu allpool nÀidatud. Loome tabeli, sisestame paar kirjeid MySQL andmebaasi ja kutsume pg_chameleon'is vÀlja sync_tables argumendi, et vÀrskendada deemonid ja replitseerimise tabel andmetega PostgreSQL andmebaasis.

mysql> create table t1 (n1 int primary key, n2 varchar(10));
KĂŒsimus OK, 0 rida mĂ”jutatud (0.01 sek)
mysql> insert into t1 values (1,'one');
KĂŒsimus OK, 1 rida mĂ”jutatud (0.00 sek)
mysql> insert into t1 values (2,'two');
KĂŒsimus OK, 1 rida mĂ”jutatud (0.00 sek)

$> chameleon sync_tables --tables world_x.t1 --config default --source mysql
Andmete sĂŒnkroniseerimise protsess allikast mysql on alanud.

Testitulemuste kinnitamiseks kĂŒsime tabelit PostgreSQL andmebaasist ja vĂ€ljundime read.

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

Kui teeme migreerimist, siis jĂ€rgmised pg_chameleoni kĂ€sud lĂ”petavad selle. KĂ€sud tuleb tĂ€ita pĂ€rast seda, kui oleme kinnitanud, et kĂ”iki sihttabeleid on replitseeritud, ja tulemuseks on korralikult ĂŒle viidud PostgreSQL andmebaas, millel ei ole viiteid algsele andmebaasile ega replikatsiooniskeemile (sch_chameleon).

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

Soovi korral saab jÀrgmiste kÀskudega algse konfiguratsiooni ja replikatsiooniskeemi eemaldada.

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

pg_chameleoni eelised

Lihtne seadistamine ja konfigureerimine.
Mugav tÔrkeotsing ja anomaaliate tuvastamine arusaadavate veateadete abil.
Replikatsiooni saab lisada tĂ€iendavaid spetsiaalseid tabeleid pĂ€rast initsialiseerimist, muutes ĂŒlejÀÀnud konfiguratsiooni.
Saate seadistada mitu lĂ€hteandmebaasi ĂŒhe sihtandmebaasi jaoks, mis on vĂ€ga mugav, kui ĂŒhendate andmeid ĂŒhest vĂ”i mitmest MySQL andmebaasist PostgreSQL andmebaasis.
Valitud tabeleid ei ole vÔimalik replikeerida.

pg_chameleon puudused

Toetatakse ainult MySQL 5.5 ja uuemaid versioone allikaks ning PostgreSQL 9.5 ja uuemaid versioone sihtandmebaasina.
Igal tabelil peab olema peamine vÔi unikaalne vÔti, vastasel juhul initsialiseeritakse tabelid init_replica protsessi kÀigus, kuid neid ei replikeerita.
Ühesuunaline replikeerimine — ainult MySQL-st PostgreSQL-i. SeetĂ”ttu sobib see ainult 'aktiivne-passiivne' skeemile.
Allikas vÔib olla ainult MySQL andmebaas, samas on PostgreSQL andmebaasi toetamine allikana alles katsetamisfaasis ja piirangutega (saate rohkem teada siit)

KokkuvÔtted pg_chameleonist

pg_chameleon replikeerimismeetod sobib suurepĂ€raselt andmebaasi migreerimiseks MySQL-ist PostgreSQL-i. Oluline puudus on see, et replikeerimine on ainult ĂŒhesuunaline, mistĂ”ttu andmebaasi spetsialistid tĂ”enĂ€oliselt ei soovi seda kasutada millegi muu jaoks peale migreerimise. Kuid ĂŒhesuunalise replikeerimise probleemi saab lahendada veel ĂŒhe avatud lĂ€htekoodiga tööriista — SymmetricDS.

Lisage rohkem teavet ametlikus dokumentatsioonis siit. KĂ€skude rida aitab leida siit.

SymmetricDS ĂŒlevaade

SymmetricDS on avatud lĂ€htekoodiga tööriist, mis replikeerib mis tahes andmebaasi igasse teise tuntud andmebaasi: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird ja teised pilveandmebaasid, nĂ€iteks Redshift ja Azure jne. Saadaval on funktsioonid: andmebaaside ja failide sĂŒnkroniseerimine, mitme juhtiva andmebaasi replikatsioon, filtreeritud sĂŒnkroniseerimine, andmete muutmine ja palju muud. See on Java tööriist ja nĂ”uab standardset JRE vĂ”i JDK versiooni 8.0 vĂ”i kĂ”rgemat. Siin on vĂ”imalik salvestada andme muutusi algandmebaasi trikkide kaudu ja edastada need vastavasse sihtandmebaasi pakettidena.

SymmetricDS funktsioonid

Tööriist ei sÔltu platvormist, see tÀhendab, et kaks vÔi enam erinevat andmebaasi saavad vahetada andmeid.
Relatiivsed andmebaasid sĂŒnkroniseeritakse andme muudatuste salvestamise teel, samas kui failisĂŒsteemide pĂ”hised andmebaasid kasutavad failide sĂŒnkroniseerimist.
Kahepoolne replikatsioon Push ja Pull meetodite kaudu, mis pÔhinevad reeglite kogumil.
Andmete edastus on vÔimalik kaitstud vÔrkudes ja madala lÀbilaskevÔimega vÔrkudes.
Automaatne taastamine pÀrast sÔlmede tööd taasalkavandamist ja automaatne konfliktide lahendamine.
Ühildatavus pilves ja efektiivsed API laiendusi.

NĂ€ide

SymmetricDS-i saab seadistada ĂŒhe kahest variandist:
Juht (vanem) sĂ”lm, mis keskset koordineerib andmete replikatsiooni kahe alam (tĂŒtar) sĂ”lme vahel ning andmevahetus tĂŒtar sĂ”lmede vahel toimub ainult vanema kaudu.
Aktiivne sÔlm (sÔlm 1) saab andmeid replikatsiooni jaoks vahetada teise aktiivse sÔlmega (sÔlm 2) ilma vahendajata.

MÔlemal variandil toimub andmevahetus Push ja Pull kaudu. KÀesolevas nÀites vaatame 'aktiivne-aktiivne' konfiguratsiooni. Kogu arhitektuuri kirjeldamine vÔtaks liiga kaua aega, seetÔttu uurige juhend, et rohkem teada saada SymmetricDS-i seadistusest.

SymmetricDS-i paigaldamine on vÀga lihtne: laadige alla avatud lÀhtekoodiga zip-faili versioon. siit ja tÔmmake see vÀlja, kuhu soovite. Allolevas tabelis on toodud SymmetricDS paigalduskoht ja versioon antud nÀites, samuti andmebaaside versioonid, Linuxi versioonid, IP-aadressid ja sadamad mÔlemale sÔlmele.

Host
vm1
vm2

OS-i versioon
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64

Andmebaasi serveri versioon
MySQL 5.7.26
PostgreSQL 10.5

Andmebaasi port
3306
5832

IP-aadress
192.168.1.107
192.168.1.112

SymmetricDS versioon
SymmetricDS 3.9
SymmetricDS 3.9

SymmetricDS paigaldusteekond
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20

SymmetricDS sÔlme nimi
corp-000
store-001

Siin paigaldame SymmetricDS aadressile /usr/local/symmetric-server-3.9.20, kus hoitakse erinevaid alakaustu ja faile. Meid huvitavad alakaustad samples ja engines. Kaustas samples leidub nÀidis konfiguratsioonifaile sÔlme omadustega ning SQL skriptide nÀidiseid kiireks demonstratsiooniks.

Kaustas samples nĂ€eme kolme konfiguratsioonifaili sĂ”lme omadustega — nimi nĂ€itab sĂ”lme iseloomu teatud skeemis.

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

SymmetricDS-l on kÔik vajalikud konfiguratsioonifailid kolme sÔlmega pÔhiskeemi jaoks (valik 1), ja samu faile saab kasutada ka kahe sÔlmega skeemis (valik 2). Kopsime vajaliku konfiguratsioonifaili kaustast samples kausta engines hostis vm1. Tulemus on jÀrgmine:

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

Selle SymmetricDS konfiguratsiooni sĂ”lm on nimetatud corp-000, ja andmebaasi ĂŒhendust haldab mysql jdbc draiver, mis kasutab ĂŒlaltoodud ĂŒhendusstringi ja sissepÀÀsukrediite. Oleme ĂŒhendatud database replica_db ja skeemi loomisel luuakse tabelid. sync.url nĂ€itab sildumispaika sĂ”lmega sĂŒnkroonimise jaoks.

SĂ”lm 2 hostil vm2 seadistatakse kui store-001, ja kĂ”ik muu on mÀÀratud failis node.properties, mis on toodud allpool. SĂ”lm store-001 töötab PostgreSQL andmebaasiga, ja pgdb_replica on replika jaoks mĂ”eldud andmebaas. registration.url vĂ”imaldab hostil vm2 ĂŒhenduda hostiga vm1 ja saada konfiguratsiooni ĂŒksikasju.

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

Valmis SymmetricDS-i nÀide sisaldab seadeid kahe andmebaasi serveri (kaks sÔlme) vaheline kahepoolse replikatsiooni seadistamiseks. Allolevad sammud tÀidetakse hostis vm1 (corp-000), kus luuakse nelja tabeliga skeem. SeejÀrel kÀivitab kÀsu create-sym-tables kasutamine symadmin, et luua kataloogitabelid, kuhu salvestatakse replikatsioonireeglid ja -suunad sÔlmede vahel. LÔpuks laaditakse tabelitesse nÀidisandmed.

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

NĂ€ites on tabelid item ja item_selling_price automaatselt seadistatud replikeerimiseks corp-000-st store-001-i, samas kui tabelid sale (sale_transaction ja sale_return_line_item) on automaatselt seadistatud replikeerimiseks store-001-st corp-000-sse. NĂŒĂŒd loome andmebaasis PostgreSQL skeemi hostis vm2 (store-001), et valmistada see ette andmete vastuvĂ”tmiseks corp-000-lt.

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

Kontrollime kindlasti, et MySQL andmebaasis vm1 on olemas SymmetricDS-i tabelite ja kataloogide tabelid. Pange tĂ€hele, et SymmetricDS-i sĂŒsteemitabelid (prefiksiga sym_) on praegu saadaval ainult sĂ”lmes corp-000, sest seal tĂ€itsime kĂ€su create-sym-tables ja haldame replikatsiooni. Lisaks on sĂ”lmes store-001 ainult 4 nĂ€idetabelit, milles andmeid ei ole.

KÔik. Keskkond on serveriprotsesside sym kÀivitamiseks valmis mÔlemal sÔlmel, nagu allpool nÀidatud.

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

Logikirjed saadetakse taustalogifaili (symmetric.log) logikausta, kus SymmetricDS on paigaldatud, ja ka standardvĂ€ljundisse. Serverit sym saab nĂŒĂŒd algatada sĂ”lmes store-001.

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

Kui kĂ€ivitada sym serveri protsess vm2 hostis, loob see SymmetricDS katalooge PostgreSQL andmebaasis. Kui sym serveri protsess kĂ€ivitada mĂ”lemal sĂ”lmel, sĂŒnkroniseerivad nad andmeid corp-000-st store-001-esse. Kui paarisekundilise ooteaja pĂ€rast pĂ€rime kĂ”iki 4 tabelit mĂ”lemalt poolt, nĂ€eme, et replikatsioon on edukalt toimunud. VĂ”i vĂ”ime edastada esialgse koormuse sĂ”lmele store-001 corp-000-st jĂ€rgmise kĂ€suga.

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

Sellel etapil sisestatakse andmebaasi MySQL tabelisse item uus rekord sÔlmes corp-000 (host: vm1) ning kontrollime selle replikatsiooni PostgreSQL andmebaasi sÔlmes store-001 (host: vm2). Me nÀeme Pull operatsiooni andmete edastamiseks corp-000-st store-001-esse.

mysql> insert into item values ('22000002','Jelly Bean');
KĂŒsimus OK, 1 rida mĂ”jutatud (0.00 sek)

vm2$> psql -p 5832 -U postgres pgdb_replica -c "select * from item"
 item_id  |   name
----------+-----------
 11000001 | Yummy Gum
 22000002 | Jelly Bean
(2 rida)

Andmete edastamiseks store-001-st corp-000-sse Push operatsiooni teostamiseks sisestage rekord tabelisse sale_transaction ja kontrollige, et replikatsioon on toimunud.

Tulemus.

NÀeme edukat kahe suunalise replikatsiooni seadistamist MySQL ja PostgreSQL andmebaaside vahel. Uute kasutaja tabelite replikatsiooni seadistamiseks teeme jÀrgmised sammud. Loome nÀidisena tabeli t1 ja seadistame selle replikatsiooni reeglid jÀrgmiselt. Nii seadistame me replikatsiooni ainult corp-000-st store-001-ks.

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)

SeejÀrel saab konfiguratsioon teate schéma muutusest, st uue tabeli lisamisest, kasutades kÀsku symadmin koos argumendiga sync-triggers, mis taasluua trigger'id tabelite mÀÀratlemiseks. KÀivitatakse send-schema, et saata schéma muudatusi sÔlmele store-001, ja tabeli t1 replikatsioon on seadistatud.

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

SymmetricDS eelised

Lihtne seadistamine ja konfigureerimine, sealhulgas valmisfailide komplekt parameetritega kolme vÔi kahe sÔlme skeemi loomiseks.
Andmebaaside platvormideĂŒlene töö ja sĂ”ltumatus, sealhulgas serverid, sĂŒlearvutid ja mobiilseadmed.
Iga andmebaasi replikatsioon igasse teise andmebaasi lokaalselt, WAN-is vÔi pilves.
VÔime optimaalselt töötada paari andmebaasi vÔi mitme tuhande andmebaasiga mugavaks replikatsiooniks.
Tasuline versioon, millel on graafiline liides ja suurepÀrane tugi.

SymmetricDS puudused

Replikatsiooni reeglid ja suund tuleb kÀsitsi mÀÀrata kÀsurealt SQL-operatsioonide abil katalooge laadides, mis vÔib olla ebamugav.
Paljude tabelite replikatsiooni seadmine vÔib olla kurnav, kui skripte SQL-operatsioonide loomiseks ei kasutata, mis mÀÀravad replikatsiooni reeglid ja suuna.
Logidesse kantakse liiga palju teavet ning mÔnikord on vajalik logifailis korda luua, et see ei vÔtaks liiga palju ruumi.

KokkuvÔtted SymmetricDS kohta

SymmetricDS vĂ”imaldab seadistada kaheastmelist replikatsiooni kahe, kolme vĂ”i isegi tuhandete sĂ”lme vahel failide replikatsiooni ja sĂŒnkroonimist. See on ainulaadne tööriist, mis tĂ€idab ise mitmeid ĂŒlesandeid, nĂ€iteks andmete automaatne taastamine pĂ€rast pikka seisakut sĂ”lmes, turvaline ja efektiivne andmevahetus sĂ”lmede vahel HTTPSi kaudu, konfliktide automaatne haldamine reeglite komplekti pĂ”hjal jne. SymmetricDS teostab replikatsiooni mis tahes andmebaaside vahel, seetĂ”ttu saab seda kasutada erinevates stsenaariumites, sealhulgas migratsioon, ĂŒle minemine uuele versioonile, levitamine, andmete filtreerimine ja vormindamine erinevates platvormides.

NĂ€ide on loodud ametliku lĂŒhijuhendi pĂ”hjal. See kasutajajuhendist kirjeldab ĂŒksikasjalikult erinevaid mĂ”isteid, mis on seotud replikatsiooni seadistamisega SymmetricDS-i abil.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster