Ristrepilatsioon PostgreSQL ja MySQL vahel

Ristrepilatsioon PostgreSQL ja MySQL vahel

Ma rÀÀgin lĂŒhidalt ristrepist PostgreSQL ja MySQL vahel ning ka meetoditest, kuidas nende kahe andmebaasi serveri vahel ristrepist seadistada. TĂŒĂŒpiliselt nimetatakse ristrepis olevate andmebaaside puhul homogeenseid, ja see on mugav meetod ĂŒleminekuks ĂŒhest relatsioonilisest DB-serverist teise.

PostgreSQL ja MySQL andmebaase peetakse relatsioonilisteks, kuid koos tÀiendavate laiendustega pakuvad nad ka NoSQL vÔimalusi. Siin arutame ristrepist PostgreSQL ja MySQL vahel relatsiooniliste andmebaasi perspektiivist.

Me ei kavatse kirjeldada kogu sisemist toimimist, vaid ainult pĂ”hialuseid, et saaksite ĂŒlevaate andmebaasi serverite vahelise replikatsiooni seadistamisest, eeliste, piirangute ja kasutusstsenaariumide kohta.

Tavaliselt toimub replikatsioon kahe identse andmebaasi serveri vahel kas binaarses reĆŸiimis vĂ”i pĂ€ringute abil peamise sĂ”lme (tuntud ka kui vĂ€ljaandja, peamine vĂ”i aktiivne) ja alam sĂ”lme (tellija, ootav vĂ”i passiivne) vahel. Replikatsiooni eesmĂ€rk on pakkuda reaalajas koopia peamisest andmebaasist alam pooles. Andmed edastatakse peamisest alammeheni, seega aktiivsest passiivsesse, sest replikatsioon toimub ainult ĂŒhes suunas. Kuid saate seadistada ka kahe andmebaasi vaheliseks replikatsiooniks mĂ”lemat pidi, et andmed edastataks alamast peamisele aktiivselt-passiivselt. KĂ”ik see, sealhulgas kaskaadne replikatsioon, on vĂ”imalik kahe vĂ”i enama identse andmebaasi serveri vahel, aktiivne-aktiivne vĂ”i aktiivne-passiivne konfigureerimine sĂ”ltub vajadusest, nende vĂ”imaluste kĂ€ttesaadavusest algses konfiguratsioonis vĂ”i vĂ€limiste lahenduste kasutamisest ning olemasolevatest kompromissidest.

Ülaltoodud konfiguratsioon on vĂ”imalik erinevate andmebaasi serverite vahel. Serverit saab seadistada replikatsiooniandmete vastuvĂ”tmiseks teiselt andmebaasi serverilt ning samal ajal hoida replikatsiooniandmete snapshot'e reaalajas. MySQL ja PostgreSQL pakuvad enamikku neist konfiguratsioonidest oma jĂ”ududega vĂ”i kolmandate osapoolte laiendustega, sealhulgas binaarse pĂ€eviku, ketta lukustamise ning operaatorite ja ridade pĂ”histe meetodite kaudu.

Ristkasutuse replikatsioon MySQL ja PostgreSQL vahel on vajalik andmebaasi serverite ĂŒhekordseks migreerimiseks. Need andmebaasid kasutavad erinevaid protokolle, mistĂ”ttu ei saa neid otse siduda. Andmevahetuse korraldamiseks vĂ”ib kasutada vĂ€list avatud koodiga tööriista, nĂ€iteks pg_chameleon.

Mis on pg_chameleon

pg_chameleon on MySQL-st PostgreSQL-i replikatsioonisĂŒsteem Python 3-l. Sellel on kasutusel avatud koodiga raamatukogu mysql-replication, samuti Pythonis. Ridade pildid eraldatakse MySQL-i tabelitest ja salvestatakse JSONB objektidena PostgreSQL-i andmebaasi, seejĂ€rel deĆĄifreeritakse need pl/pgsql-funktsiooniga ja taastatakse PostgreSQL-i andmebaasis.

pg_chameleon'i vÔimalused

Mitmeid MySQL skeeme ĂŒhelt klastrilt saab replitseerida ĂŒhte siht PostgreSQL andmebaasi 'ĂŒks paljudele' konfiguratsiooniga.
Algse ja sihtskeemi nimed ei tohi kattuda.
Replikatsiooniandmeid saab eemaldada MySQL-i kaskaadse replikatsiooni kaudu.
Tabelid, mis ei saa replitseerida vÔi tekitavad vigu, jÀetakse vÀlja.
Iga replikatsioonifunktsiooni haldavad demonid.
Kontrollimine YAML-pÔhiste parameetrite ja konfiguratsioonifailidega.

NĂ€ide

Host
vm1
vm2

OS 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

Alustamiseks valmistage ette kÔik vajalikud komponendid pg_chameleon'i installimiseks. Selles nÀites on paigaldatud 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 Python 3.6 eduka installimist tuleb tĂ€ita ĂŒlejÀÀnud nĂ”uded, nĂ€iteks luua ja aktiveerida virtuaalne keskkond. Samuti uuendatakse pip moodulit kaheks viimase versioonini, et vĂ€ltida vĂ€rskendatud versiooniga seotud uusi vigu.

$> 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 — see on kĂ€sk) argumendiga set_configuration_files, et aktiveerida pg_chameleon ja luua oletuslikud kataloogid ja konfiguratsioonifailid.

(venv) $> chameleon set_configuration_files
loomas katalooge /root/.pg_chameleon
loomas katalooge /root/.pg_chameleon/configuration/
loomas katalooge /root/.pg_chameleon/logs/
loomas katalooge /root/.pg_chameleon/pid/
kopeerimine konfiguratsiooni nÀitest /root/.pg_chameleon/configuration//config-example.yml

NĂŒĂŒd loome config-example.yml koopia nimega default.yml, et see saaks vaikimisi seadete failiks. Selle nĂ€ite konfiguratsioonifaili nĂ€idis on toodud allpool.

$> cat default.yml
---
#globaalsettings
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 lubab kasutajal vaikimisi tĂŒĂŒpide konversiooni muuta teiseks.
type_override:
  "tinyint(1)":
    override_to: boolean
    override_tables:
      - "*"

#postgresi sihtĂŒhenduse seaded
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 #skipib insertid tabelis delphis_mediterranea.foo
      delete:
        - delphis_mediterranea #skipib kustutamised skeemis delphis_mediterranea
      update:

Antud nĂ€ite konfiguratsioonifail on pg_chameleon'ile kohandatud versioon, millel on vĂ€iksed muudatused vastavalt alg- ja sihtkeskkondadele, ning allpool on antud ĂŒlevaade erinevatest konfiguratsioonifaili jaotustest.

Konfiguratsioonifailis default.yml on globaalsete seade jaotus (global settings), kus saab hallata selliseid seadeid nagu lukustusfaili asukoht, logide asukoht, logide sĂ€ilitamise periood jne. SeejĂ€rel on tĂŒĂŒpide ĂŒlekuulamise jaotus (type override), kus on mÀÀratud reeglite kogum tĂŒĂŒpide ĂŒlekandmiseks replikatsiooni ajal. Vaikimisi reeglina on tĂŒĂŒpide ĂŒlekuulamise reegel, mis konverteerib tinyint(1) booleaniks. JĂ€rgmises jaotuses mÀÀrame sihtandmebaasi ĂŒhenduse ĂŒksikasjad. Meie puhul on see PostgreSQL andmebaas, mida nimetatakse pg_conn-iks. Viimasena mÀÀrame allika andmed, st algandmebaasi ĂŒhenduse parameetrid, alg- ja sihtandmebaasi skeemide vastavuse, tabelid, mida tuleb vahele jĂ€tta, ootamise aja, mĂ€lu, partii suuruse. Pange tĂ€hele, et „sources“ on mitmuses, mis tĂ€hendab, et vĂ”ime lisada mitmeid algandmebaase ĂŒhe sihta jaoks, et seadistada „palju ĂŒhele“ konfiguratsioon.

Andmebaas world_x nÀites sisaldab 4 tabelit ridadega, mida MySQL-i kogukond pakub nÀitena. Seda saab laadida siin. NÀidandmebaas on saadaval tar- ja tihendatud arhiivina koos juhistega ridade loomiseks ja importimiseks.

MySQL-i ja PostgreSQL-i andmebaasides luuakse spetsiaalne kasutaja sama nimega usr_replica. MySQL-is antakse sellele tÀiendavad Ôigused kÔigi replitseeritavate 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;

PostgreSQL-i kĂŒljes luuakse andmebaas db_replica, mis saab muutused MySQL-i andmebaasist. Kasutaja usr_replica PostgreSQL-is konfigureeritakse automaatselt kahele skeemile pgworld_x ja sch_chameleon, mis sisaldavad vastavalt tegelikke replitseeritud tabeleid ja replitseerimise katalooge. Automaatse konfiguratsiooni tagab argument create_replica_schema, nagu allpool nĂ€ete.

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

MySQL-i andmebaas seadistatakse mÔnede parameetrite muutmisega, et valmistada see ette replitseerimiseks, 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 kĂ€ivitamisel ei tekiks probleeme.

PostgreSQL-i sÔlmes:

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

MySQL-i 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 replitseerimise skeemi (pgworld_x) PostgreSQL-i andmebaasis, nagu me juba rÀÀkisime. Argument add_source lisab algse andmebaasi konfiguratsiooni, lugedes konfiguratsioonifaili (default.yml), ja meie juhul on see mysql, ning init_replica initsialiseerib konfiguratsiooni faili parameetrite pÔhjal.

$> 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 ilmselgelt nende eduka tĂ€itmise. KĂ”ik tĂ”rked vĂ”i sĂŒntaktilised vead nĂ€idatakse lihtsate ja arusaadavate sĂ”numitega, mis pakuvad probleemi lahendamise vihjeid.

LÔpuks kÀivitame replikatsiooni kÀsuga start_replica ja saame eduka tÀitmise sÔnumi.

$> chameleon start_replica --config default --source mysql 
out: KĂ€ivitan replikatsiooni protsessi allikast mysql

Replikatsiooni staatust saab kĂŒsida argumentidega show_status ja vead vaadata argumentide show_errors abil.

Tulemus.

Kuidas juba mainitud, iga replikatsioonifunktsiooni haldavad demonid. Nende vaatamiseks kĂŒsime Linuxi protsesside tabelit kĂ€suga ps, nagu allpool nĂ€idatud.

Tulemus.

Replikatsioon ei loeta seadistatud, kuni me ei testi seda reaalajas, nagu allpool nÀidatud. Loome tabeli, sisestame paar kirjet MySQL andmebaasi ja kutsume argumenti sync_tables pg_chameleon'is, et uuendada demonid ja replikeerida tabelit koos kirjetega PostgreSQL andmebaasis.

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

$> chameleon sync_tables --tables world_x.t1 --config default --source mysql
Sync tables protsess allikast mysql on alustatud.

Kuidas testimise tulemusi kinnitada, kĂŒsime tabelit PostgreSQL andmebaasist ja kuvame read.

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

Kui me teeme migreerimist, siis jĂ€rgmised pg_chameleon kĂ€sud lĂ”petavad selle. KĂ€sud tuleb tĂ€ita pĂ€rast seda, kui oleme veendunud, et kĂ”igi siht tabelite read on replikeeritud, ja tulemuseks on korralikult ĂŒle kantud PostgreSQL andmebaas, mis ei viita algsele andmebaasile vĂ”i 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 eemaldada algse konfiguratsiooni ja replikatsiooniskeemi.

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

pg_chameleon eelised

Lihtne seadistus ja konfiguratsioon.
Mugav probleemi lahendamine ja anomaaliate tuvastamine selgete veateadetega.
Replikatsiooni saab lisada tĂ€iendavaid erilise tabelid pĂ€rast initsialiseerimist, ilma et muudaks ĂŒlejÀÀnud konfiguratsiooni.
Saate seadistada mitu algandmebaasi ĂŒhe sihtriba jaoks, mis on vĂ€ga mugav, kui ĂŒhendate andmeid ĂŒhest vĂ”i mitmest MySQL andmebaasist PostgreSQL andmebaasi.
VÔite valida tabelid, mida mitte replitseerida.

pg_chameleon puudused

Toetatakse ainult MySQL 5.5 ja uuemaid versioone allikana ning PostgreSQL 9.5 ja uuemaid versioone sihtandmebaasina.
Igal tabelil peab olema esmase vÔi unikaalne vÔti, vastasel juhul initsialiseeritakse tabelid init_replica protsessis, kuid ei replitseerita.
Ühesuunaline replikatsioon — ainult MySQL-st PostgreSQL-i. SeetĂ”ttu sobib see ainult „aktiivne-passiivne” skeemile.
Allikas vÔib olla ainult MySQL andmebaas, samas kui PostgreSQL andmebaasi toetus allikana on alles katsefaasis ja piirangutega (rohkem teavet) siin)

KokkuvÔtted pg_chameleon kohta

pg_chameleon replikatsioonimeetod sobib suurepĂ€raselt andmebaaside migreerimiseks MySQL-st PostgreSQL-i. Oluline puudus on see, et replikatsioon on ainult ĂŒhesuunaline, mistĂ”ttu andmebaasi spetsialistid tĂ”enĂ€oliselt ei soovi seda kasutada muudeks kui migreerimiseks. Siiski vĂ”ib ĂŒhesuunalise replikatsiooni probleemi lahendada teise avatud lĂ€htekoodiga tööriistaga — SymmetricDS.

Lisainfot leiate ametlikust dokumentatsioonist siin. KĂ€skude viidatud dokumentatsiooni leiate siin.

SymmetricDS ĂŒlevaade

SymmetricDS on avatud lĂ€htekoodiga tööriist, mis replitseerib mistahes andmebaasi mistahes teise laialt levinud andmebaasiga: 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ĂŒnkroonimine, mitme peamise andmebaasi replikatsioon, filtreeritud sĂŒnkroonimine, andmete töötlemine ja muud. See on Java pĂ”hine tööriist ning vajalik on standardsel JRE vĂ”i JDK vĂ€ljalase (versioon 8.0 vĂ”i uuem). Siin saab andmete muudatusi algandmebaasis salvestada triggereid kasutades ja suunata need vastavasse sihtandmebaasi pakettidena.

SymmetricDS vÔimalused

Tööriist ei sÔltu platvormist, st kaks vÔi enam erinevat andmebaasi saavad omavahel andmeid vahetada.
Relatsioonilised andmebaasid sĂŒnkroonitakse andmete muudatuste salvestamise kaudu, samas kui failisĂŒsteemide pĂ”hised andmebaasid kasutavad failide sĂŒnkroonimist.
Kahepoolne replikatsioon, kasutades Push ja Pull meetodeid, pÔhinedes reeglite kogumile.
Andmete edastamine on vÔimalik kaitstud ja madala lÀbilaskevÔimega vÔrkude kaudu.
Automaatne taastamine sÔlmede taaskÀivitamisel pÀrast riket ja automaatne konfliktide lahendamine.
Ühildumine pilve ja tĂ”husad laienduste API-d.

NĂ€ide

SymmetricDS-i saab seadistada ĂŒhes kahest variandist:
JuhtsÔlm, mis keskse pÀringuna koordineerib andmete replikatsiooni kahe alluva sÔlme vahel, ja andmevahetus alluvate sÔlmede vahel toimub ainult lÀbi juhi.
Aktiivne sÔlm (sÔlm 1) saab vahetada andmeid replikatsiooniks teise aktiivse sÔlmega (sÔlm 2) ilma vahendajata.

MÔlemas variandis toimub andmevahetus Push ja Pull abil. Selles nÀites vaatame "aktiivne-aktiivne" konfiguratsiooni. Kirjeldamine kogu arhitektuur oleks liiga pikk, seega uurige juhend, et rohkem teada saada SymmetricDS seadistamise kohta.

SymmetricDS-i paigaldamine on vÀga lihtne: laadige alla avatud lÀhtekoodiga versioon zip-failist siit ja ekstraktige see sinna, kuhu soovite. Allolevas tabelis on toodud teave SymmetricDS-i installimise koha ja versiooni kohta selles nÀites, samuti andmebaasi versioonid, Linuxi versioonid, IP-aadressid ja sadamad mÔlema sÔlme jaoks.

Host
vm1
vm2

OS 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 paigaldusteed
/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-i aadressile /usr/local/symmetric-server-3.9.20, kus on hoiustatavad erinevad alamkaustad ja failid. Meid huvitavad alamkaustad samples ja engines. Kaustas samples hoitakse nÀidiskonfiguratsiooni faile, kus on sÔlme omadused, samuti SQL skripti nÀiteid kiireks demo alustamiseks.

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

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

SymmetricDS-is on kÔik vajalikud konfiguratsiooni failid kolme sÔlme pÔhiskeemi (variant 1) jaoks, ja neid samu faile saab kasutada kahe sÔlme skeemi (variant 2) puhul. Kopeerime vajaliku konfiguratsiooni faili kaustast samples kausta engines hostis vm1. Tulemuseks on:

$> 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 konfiguratsioonis oleva sĂ”lme nimi on corp-000 ning andmebaasi ĂŒhendust haldab mysql jdbc draiver, mis kasutab ĂŒlaltoodud ĂŒhendusstringi ja sisselogimisteavet. Ühendame end andmebaasiga replica_db ning skeemi loomisel luuakse tabelid. sync.url nĂ€itab sĂ”lme asukohta sĂŒnkroniseerimiseks.

SĂ”lm 2, mis asub hostis vm2, on seadistatud nimega store-001, ĂŒlejÀÀnud teave on esitatud allpool node.properties failis. SĂ”lm store-001 kasutab PostgreSQL andmebaasi ning pgdb_replica on replikatsiooniks ettenĂ€htud andmebaas. registration.url vĂ”imaldab hostil vm2 ĂŒhendust vĂ”tta hostiga vm1 ja saada sellelt konfiguratsiooni ĂŒksikasjad.

$> 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 nÀidis sisaldab parameetreid kahe andmebaasi serveeri vahelise kahepoolsuse replikatsiooni seadistamiseks (kahe sÔlme vahel). AlljÀrgnevaid samme tehakse hostis vm1 (corp-000), mis loob nelja tabeliga nÀidisstruktuuri. SeejÀrel kÀivitamine create-sym-tables kÀsuga symadmin loob katalooge, kus hoitakse reegleid ja replikatsiooni suundi sÔlmede vahel. LÔpuks laaditakse tabelitesse nÀidandmed.

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 replikatsiooniks corp-000-st store-001-sse, samas kui tabelid sale (sale_transaction ja sale_return_line_item) on automaatselt seadistatud replikatsiooniks store-001-st corp-000-sse. NĂŒĂŒd loome skeemi PostgreSQL andmebaasis hostis vm2 (store-001), et valmistuda 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

Veenduge, et vm1-s olevas MySQL andmebaasis oleksid olemas nĂ€idetabelid ja SymmetricDS kataloogitabelid. Pange tĂ€hele, et SymmetricDS sĂŒsteemitabelid (prefiksiga sym_) on hetkel saadaval ainult sĂ”lmes corp-000, kuna seal on kĂ€idud lĂ€bi create-sym-tables kĂ€sk ja me haldame replikatsiooni. Samuti, andmebaasis sĂ”lmes store-001 on kokku ainult 4 nĂ€idistabelit ilma andmeteta.

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

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

Logifailide salvestamine toimub SymmetricDS installatsioonikaustas logs kaustas (symmetric.log), samuti standardsetes vĂ€ljundites. Sym serverit saab nĂŒĂŒd algatada sĂ”lmes store-001.

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

Kui kĂ€itada serveriprotsess sym sĂ”lmes vm2, luuakse SymmetricDS kataloogi tabelid ka PostgreSQL andmebaasis. Kui kĂ€itada serveriprotsess sym mĂ”lemal sĂ”lmel, sĂŒnkroonitakse nad omavahel, et replikeerida andmeid corp-000-lt store-001-le. Kui pĂ€rast mĂ”ningaid sekundeid kĂŒsida kĂ”iki 4 tabelit mĂ”lemal poolel, nĂ€eme, et replikatsioon on Ă”nnestunud. VĂ”i saab alglaadi edastada sĂ”lmesse store-001 corp-000-lt jĂ€rgmise kĂ€suga.

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

Selles etapis sisestatake uue kirje andmebaasi MySQL tabelisse item sÔlmes corp-000 (host: vm1) ja saab kontrollida selle replikatsiooni PostgreSQL andmebaasi sÔlmes store-001 (host: vm2). Me nÀeme Pull operatsiooni, et andmeid liikuda corp-000-lt store-001-le.

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)

Andmete liigutamiseks store-001-lt corp-000-le Push operatsiooni teostamiseks sisestame kirje tabelisse sale_transaction ja kontrollime, et replikatsioon on toimunud.

Tulemus.

NÀeme kahepoolse replikatsiooni tabelite seadistuse Ônnestumist MySQL ja PostgreSQL andmebaaside vahel. Uute kasutajatabelite replikatsiooni seadistamiseks teeme jÀrgmised sammud. Loome nÀidisena tabeli t1 ja seadistame replikatsiooni reeglid jÀrgmiselt. SeelÀbi seadistame ainult replikatsiooni corp-000-lt store-001-le.

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 saa konfiguratsioon teate skeemi muutmisest, st uue tabeli lisamisest, kasutades kÀsku symadmin koos argumendiga sync-triggers, mis taaskonstrueerib triggereid tabeli mÀÀratlemise jaoks. KÀivitatakse send-schema, et saata skeemi muudatused sÔlmele store-001, ja tabeli t1 replikeerimine on seadistatud.

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

SymmetricDS eelised

Lihtne paigaldamine ja seadistamine, sealhulgas valmis failikomplekt seadistuste jaoks skeemi loomisel kolmes vÔi kahes sÔlmes.
Andmebaaside platvormideĂŒlene iseseisvus, sealhulgas serverid, sĂŒlearvutid ja mobiilseadmed.
Mis tahes andmebaasi replikeerimine mis tahes teise andmebaasi kohapeal, WAN-is vÔi pilves.
VÔime tÔhusalt hallata paari andmebaasi vÔi isegi tuhandeid mugavaks replikeerimiseks.
Tasuline versioon graafilise liidesega ja suurepÀrane tugi.

SymmetricDS puudused

On vaja kÀsitsi mÀrkida kÀsureal replikeerimise reeglid ja suund SQL-i operaatorite kaudu, et laadida katalooge, mis vÔib olla ebamugav.
Paljude tabelite seadistamine replikeerimiseks on kurnav, kui ei kasutada skripte SQL-i operaatorite loomiseks, mis mÀÀratlevad reeglid ja suuna.
Logitesse kirjutatakse liiga palju teavet ja mÔnikord on vaja logifailis korda luua, et see ei vÔtaks liiga palju ruumi.

SymmetricDS kokkuvÔte

SymmetricDS vĂ”imaldab seadistada kahe, kolme ja isegi tuhandete sĂ”lmede vahel kahepoolset replikeerimist, et teostada replikeerimist ja sĂŒnkroonida faile. See on ainulaadne tööriist, mis tĂ€idab paljusid ĂŒlesandeid automaatselt, nĂ€iteks andmete automaatne taastamine pikaajalise seisaku jĂ€rel sĂ”lmes, turvaline ja efektiivne andmevahetus sĂ”lmede vahel HTTPS-i kaudu, automaatne konfliktide haldamine reeglite pĂ”hjal jne. SymmetricDS teostab replikeerimist kĂ”igi andmebaaside vahel, seega saab seda kasutada kĂ”ige erinevamates stsenaariumites, sealhulgas migreerimisel, uuele versioonile ĂŒlemisel, levitamises, filtreerimises ja andmete muutmises erinevatel platvormidel.

NĂ€ide on loodud ametliku lĂŒhikese juhendi alusel SymmetricDS. V kasutaja juhendis detailne kirjeldatakse erinevaid mĂ”isteid, mis on seotud replikatsiooni seadistamisega SymmetricDS-i abil.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster