Kryžminė PostgreSQL ir MySQL replikacija

Kryžminė PostgreSQL ir MySQL replikacija

Aprašysiu kryžminį PostgreSQL ir MySQL replikavimą, taip pat kryžminio replikavimo tarp dviejų duomenų bazių serverių nustatymo metodus. Paprastai kryžminės replikacijos duomenų bazės vadinamos vienarūšėmis ir tai yra patogus būdas perkelti iš vieno RDBMS serverio į kitą.

PostgreSQL ir MySQL duomenų bazės paprastai laikomos reliacinėmis, tačiau su papildomais plėtiniais jos siūlo NoSQL galimybes. Čia aptarsime „PostgreSQL“ ir „MySQL“ replikavimą iš reliacinės DBVS perspektyvos.

Mes neaprašysime viso vidinio veikimo, tik pagrindinius principus, kad susidarytumėte supratimą apie replikacijos tarp duomenų bazių serverių konfigūravimą, pranašumus, apribojimus ir naudojimo atvejus.

Paprastai replikacija tarp dviejų identiškų duomenų bazių serverių atliekama dvejetainiu režimu arba naudojant užklausas tarp pagrindinio (dar žinomo kaip leidėjas, pagrindinis arba aktyvus) ir pavaldinio (abonento, budėjimo arba pasyvaus). Replikacijos tikslas yra pateikti pagrindinės duomenų bazės kopiją realiuoju laiku vergo pusėje. Tokiu atveju duomenys perduodami iš pagrindinio į vergą, tai yra iš aktyvaus į pasyvųjį, nes replikacija atliekama tik viena kryptimi. Tačiau galite nustatyti replikaciją tarp dviejų duomenų bazių abiem kryptimis, kad duomenys būtų perduodami iš pavaldinio į pagrindinį aktyvią-aktyvią konfigūraciją. Visa tai, įskaitant pakopinį replikavimą, yra įmanoma tarp dviejų ar daugiau identiškų duomenų bazių serverių. Aktyvus-aktyvus arba aktyvus-pasyvus konfigūravimas priklauso nuo poreikio, tokių galimybių prieinamumo pradinėje konfigūracijoje arba išorinių konfigūravimo sprendimų naudojimo ir esamų kompromisų.

Aprašyta konfigūracija galima tarp skirtingų duomenų bazių serverių. Serveris gali būti sukonfigūruotas taip, kad priimtų replikuotus duomenis iš kito duomenų bazės serverio ir vis tiek išlaikytų atkartojamų duomenų momentines kopijas realiuoju laiku. „MySQL“ ir „PostgreSQL“ siūlo daugumą šių konfigūracijų viduje arba per trečiųjų šalių plėtinius, įskaitant dvejetainio žurnalo metodus, disko užrakinimą ir pareiškimais bei eilutėmis pagrįstus metodus.

Kryžminis MySQL ir PostgreSQL replikavimas reikalingas vienkartiniam perkėlimui iš vieno duomenų bazės serverio į kitą. Šios duomenų bazės naudoja skirtingus protokolus, todėl jų tiesiogiai susieti neįmanoma. Norėdami nustatyti duomenų mainus, galite naudoti išorinį atvirojo kodo įrankį, pvz., pg_chameleon.

Kas yra pg_chameleon

pg_chameleon yra replikavimo sistema iš MySQL į PostgreSQL Python 3. Ji naudoja atvirojo kodo mysql replikacijos biblioteką, taip pat Python. Eilučių vaizdai ištraukiami iš MySQL lentelių ir saugomi kaip JSONB objektai PostgreSQL duomenų bazėje, o po to iššifruojami naudojant pl/pgsql funkciją ir atkuriami PostgreSQL duomenų bazėje.

pg_chameleon savybės

Kelios MySQL schemos iš to paties klasterio gali būti kopijuojamos į vieną tikslinę PostgreSQL duomenų bazę konfigūracijoje „vienas su daugeliu“
Šaltinio ir tikslinio schemų pavadinimai negali būti vienodi.
Replikacijos duomenis galima gauti iš pakopinės MySQL kopijos.
Lentelės, kurių negalima pakartoti ar sukelti klaidų, neįtraukiamos.
Kiekvieną replikacijos funkciją valdo demonai.
Valdymas per YAML pagrįstus parametrus ir konfigūracijos failus.

Pavyzdys

Šeimininkas
vm1
vm2

OS versija
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64

DB serverio versija
MySQL 5.7.26
„PostgreSQL“ 10.5

DB prievadas
3306
5433

IP adresas
192.168.56.102
192.168.56.106

Norėdami pradėti, paruoškite visus reikalingus komponentus, kad įdiegtumėte pg_chameleon. Šiame pavyzdyje įdiegiama Python 3.6.8, kuri sukuria ir suaktyvina virtualią aplinką.

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

Sėkmingai įdiegus Python3.6, reikia įvykdyti likusius reikalavimus, pavyzdžiui, sukurti ir suaktyvinti virtualią aplinką. Be to, pip modulis atnaujinamas į naujausią versiją ir naudojamas diegti pg_chameleon. Toliau pateiktos komandos sąmoningai įdiegia pg_chameleon 2.0.9, nors naujausia versija yra 2.0.10. Tai būtina norint išvengti naujų klaidų atnaujintoje versijoje.

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

Tada iškviečiame pg_chameleon (chameleon yra komanda) su argumentu set_configuration_files, kad įjungtume pg_chameleon ir sukurtume numatytuosius katalogus bei konfigūracijos failus.

(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

Dabar sukuriame config-example.yml kopiją kaip default.yml, kad ji taptų numatytuoju konfigūracijos failu. Žemiau pateikiamas šio pavyzdžio konfigūracijos failo pavyzdys.

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

Šiame pavyzdyje konfigūracijos failas yra pg_chameleon failo pavyzdys su nedideliais pakeitimais, kad atitiktų šaltinio ir tikslinę aplinką, o toliau pateikiama skirtingų konfigūracijos failo skyrių apžvalga.

Numatytajame.yml konfigūracijos faile yra visuotinių nustatymų skiltis, kurioje galite tvarkyti tokius parametrus kaip užrakto failo vieta, žurnalų vieta, žurnalų saugojimo laikotarpis ir tt Toliau ateina tipo nepaisymo skyrius, kuriame taisyklių rinkinys, skirtas nepaisyti tipų replikacijos metu. Pavyzdyje numatytoji tipo nepaisymo taisyklė, kuri konvertuoja tinyint(1) į loginę reikšmę. Kitame skyriuje nurodome ryšio su tiksline duomenų baze detales. Mūsų atveju tai yra PostgreSQL duomenų bazė, pažymėta pg_conn. Paskutiniame skyriuje nurodome šaltinio duomenis, tai yra šaltinio duomenų bazės ryšio parametrus, atvaizdavimo schemą tarp šaltinio ir tikslinės duomenų bazių, lenteles, kurias reikia praleisti, laukimo laiką, atmintį, paketo dydį. Atminkite, kad „šaltiniai“ yra daugiskaita, o tai reiškia, kad į vieną tikslinę duomenų bazę galime įtraukti kelias šaltinio duomenų bazes, kad nustatytume „daug su vienu“ konfigūraciją.

Pavyzdinėje duomenų bazėje world_x yra 4 lentelės su eilutėmis, kurias MySQL bendruomenė siūlo kaip pavyzdžius. Jį galima parsisiųsti čia. Pavyzdinė duomenų bazė pateikiama kaip tar ir suspaustas archyvas su eilučių kūrimo ir importavimo instrukcijomis.

MySQL ir PostgreSQL duomenų bazėse sukuriamas specialus vartotojas tuo pačiu pavadinimu usr_replica. „MySQL“ jai suteikiamos papildomos skaitymo teisės į visas replikuotas lenteles.

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 pusėje sukuriama db_replica duomenų bazė, kuri priims pakeitimus iš MySQL duomenų bazės. Vartotojas usr_replica sistemoje PostgreSQL automatiškai sukonfigūruojamas kaip dviejų schemų pgworld_x ir sch_chameleon, kuriose yra atitinkamai tikrosios replikuotos lentelės ir replikacijos katalogų lentelės, savininkas. Argumentas create_replica_schema yra atsakingas už automatinę konfigūraciją, kaip matysite toliau.

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

MySQL duomenų bazė sukonfigūruota su tam tikrais parametrų pakeitimais, kad būtų paruošta replikacijai, kaip parodyta toliau. Kad pakeitimai įsigaliotų, turėsite iš naujo paleisti duomenų bazės serverį.

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

Dabar svarbu patikrinti ryšį su abiem duomenų bazės serveriais, kad vykdant pg_chameleon komandas nekiltų problemų.

PostgreSQL mazge:

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

MySQL mazge:

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

Kitos trys pg_chameleon (chameleon) komandos paruošia aplinką, prideda šaltinį ir inicijuoja kopiją. Argumentas create_replica_schema pg_chameleon sukuria numatytąją schemą (sch_chameleon) ir replikacijos schemą (pgworld_x) PostgreSQL duomenų bazėje, kaip jau aptarėme. Argumentas add_source prie konfigūracijos prideda šaltinio duomenų bazę, nuskaitęs konfigūracijos failą (default.yml), o mūsų atveju tai yra mysql, o init_replica inicijuoja konfigūraciją pagal konfigūracijos failo parametrus.

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

Šių trijų komandų išvestis aiškiai rodo, kad jos buvo sėkmingai įvykdytos. Apie bet kokias strigtis ar sintaksės klaidas pranešama paprastais, aiškiais pranešimais su patarimais, kaip išspręsti problemą.

Galiausiai pradedame replikaciją naudodami start_replica ir gauname sėkmės pranešimą.

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

Replikacijos būsenos užklausą galima pateikti naudojant argumentą show_status, o klaidas galima peržiūrėti naudojant argumentą show_errors.

Rezultatas.

Kaip jau minėjome, kiekvieną replikacijos funkciją valdo demonai. Norėdami juos peržiūrėti, užklausiame proceso lentelę naudodami Linux ps komandą, kaip parodyta toliau.

Rezultatas.

Replikacija nelaikoma sukonfigūruota, kol jos neišbandome realiuoju laiku, kaip parodyta toliau. Sukuriame lentelę, įterpiame kelis įrašus į MySQL duomenų bazę ir iškviečiame pg_chameleon argumentą sync_tables, kad atnaujintume demonus ir atkartotume lentelę su įrašais į PostgreSQL duomenų bazę.

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.

Norėdami patvirtinti testo rezultatus, pateikiame lentelės užklausą iš PostgreSQL duomenų bazės ir išvedame eilutes.

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

Jei atliekame perkėlimą, šios pg_chameleon komandos bus jo pabaiga. Komandos turi būti vykdomos įsitikinus, kad visų tikslinių lentelių eilutės buvo pakartotos, ir rezultatas bus tvarkingai perkelta PostgreSQL duomenų bazė be nuorodų į šaltinio duomenų bazę ar replikacijos schemą (sch_chameleon).

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

Jei norite, galite naudoti šias komandas, kad pašalintumėte pradinę konfigūraciją ir replikacijos schemą.

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

pg_chameleon privalumai

Lengvas nustatymas ir konfigūravimas.
Lengvai šalinkite triktis ir nustatykite anomalijas naudodami aiškius klaidų pranešimus.
Į replikaciją po inicijavimo galima pridėti papildomų specialių lentelių, nekeičiant likusios konfigūracijos.
Galima sukonfigūruoti kelias šaltinio duomenų bazes vienai tikslinei duomenų bazei, o tai labai naudinga, jei duomenis iš vienos ar kelių MySQL duomenų bazių sujungiate į vieną PostgreSQL duomenų bazę.
Jums nereikia kartoti pasirinktų lentelių.

pg_chameleon trūkumai

Palaikoma tik naudojant MySQL 5.5 ir naujesnę versiją kaip šaltinį ir PostgreSQL 9.5 ir naujesnę versiją kaip tikslinę duomenų bazę.
Kiekviena lentelė turi turėti pirminį arba unikalų raktą, kitu atveju lentelės inicijuojamos proceso init_replica metu, bet nėra pakartojamos.
Vienpusis replikavimas – tik iš MySQL į PostgreSQL. Todėl jis tinka tik „aktyviajai-pasyviajai“ grandinei.
Šaltinis gali būti tik MySQL duomenų bazė, o PostgreSQL duomenų bazės kaip šaltinio palaikymas yra tik eksperimentinis ir su apribojimais (sužinokite daugiau čia)

Rezultatai pagal pg_chameleon

Pg_chameleon replikacijos metodas puikiai tinka perkelti duomenų bazę iš MySQL į PostgreSQL. Reikšmingas trūkumas yra tas, kad replikacija yra tik vienpusė, todėl duomenų bazių specialistai vargu ar norės jos naudoti kitiems, išskyrus perkėlimą. Tačiau vienpusio replikavimo problemą galima išspręsti naudojant kitą atvirojo kodo įrankį – SymmetricDS.

Daugiau skaitykite oficialiuose dokumentuose čia. Galima rasti komandinės eilutės pagalbos čia.

„SymmetricDS“ apžvalga

SymmetricDS yra atvirojo kodo įrankis, pakartojantis bet kurią duomenų bazę į bet kurią kitą įprastą duomenų bazę: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird ir kitus debesų duomenų bazių egzempliorius, pvz., Redshift ir Azure ir kt. Galimos funkcijos: duomenų bazių ir failų sinchronizavimas, kelių pagrindinių duomenų bazės replikacija, filtruotas sinchronizavimas, transformavimas ir kt. Tai yra „Java“ įrankis, kuriam reikalingas standartinis JRE arba JDK leidimas (8.0 ar naujesnė versija). Čia šaltinio duomenų bazės trigerių duomenų pakeitimai gali būti įrašyti ir išsiųsti į atitinkamą tikslinę duomenų bazę paketų pavidalu.

SymmetricDS funkcijos

Priemonė nepriklauso nuo platformos, tai reiškia, kad dvi ar daugiau skirtingų duomenų bazių gali keistis duomenimis.
Reliacinės duomenų bazės sinchronizuojamos naudojant duomenų keitimo įrašus, o failų sistemos duomenų bazėse naudojamas failų sinchronizavimas.
Dvipusis replikavimas naudojant „Push“ ir „Pull“ metodus, pagrįstus taisyklių rinkiniu.
Duomenų perdavimas galimas saugiais ir mažo pralaidumo tinklais.
Automatinis atkūrimas, kai mazgai atnaujina veiklą po gedimo ir automatinis konfliktų sprendimas.
Su debesimi suderinamos ir galingos plėtinių API.

Pavyzdys

SymmetricDS galima konfigūruoti vienu iš dviejų parinkčių:
Pagrindinis (pagrindinis) mazgas, centralizuotai koordinuojantis duomenų replikaciją tarp dviejų pagalbinių (antrų) mazgų, o ryšys tarp antrinių mazgų vyksta tik per pirminį.
Aktyvus mazgas (1 mazgas) gali palaikyti ryšį su kitu aktyviu mazgu (2 mazgas) be tarpininko.

Abiejose parinktyse duomenų mainai vyksta naudojant Push and Pull. Šiame pavyzdyje apžvelgsime aktyvią-aktyvią konfigūraciją. Visą architektūrą aprašyti užtruktų per ilgai, todėl atlikite tyrimą. vadovasNorėdami sužinoti daugiau apie SymmetricDS įrenginį.

„SymmetricDS“ diegimas yra labai paprastas: atsisiųskite atvirojo kodo ZIP failo versiją taigi ir išnešk kur nori. Žemiau esančioje lentelėje pateikiama informacija apie SymmetricDS diegimo vietą ir versiją šiame pavyzdyje, taip pat duomenų bazės versijas, Linux versijas, IP adresus ir abiejų mazgų prievadus.

Šeimininkas
vm1
vm2

OS versija
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64

DB serverio versija
MySQL 5.7.26
„PostgreSQL“ 10.5

DB prievadas
3306
5832

IP adresas
192.168.1.107
192.168.1.112

SymmetricDS versija
SymmetricDS 3.9
SymmetricDS 3.9

SymmetricDS diegimo kelias
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20

SymmetricDS mazgo pavadinimas
corp-000
parduotuvė-001

Čia mes įdiegiame SymmetricDS į /usr/local/symmetric-server-3.9.20, ten bus saugomi įvairūs pakatalogiai ir failai. Mus domina pavyzdžiai ir variklių pakatalogiai. Pavyzdžių kataloge yra pavyzdiniai konfigūracijos failai su mazgo savybėmis, taip pat pavyzdiniai SQL scenarijai, kad galėtumėte greitai pradėti.

Pavyzdžių kataloge matome tris konfigūracijos failus su mazgo savybėmis – pavadinimas parodo mazgo prigimtį tam tikroje schemoje.

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

SymmetricDS turi visus būtinus konfigūracijos failus pagrindiniam 3 mazgų dizainui (1 parinktis), o tuos pačius failus galima naudoti ir 2 mazgų dizainui (2 parinktis). Nukopijuokite reikiamą konfigūracijos failą iš pavyzdžių katalogo į vm1 pagrindinio kompiuterio variklius. Pasirodo taip:

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

Šis SymmetricDS konfigūracijos mazgas vadinamas corp-000, o duomenų bazės ryšį tvarko mysql jdbc tvarkyklė, kuri naudoja aukščiau pateiktą ryšio eilutę ir prisijungimo kredencialus. Prisijungiame prie replica_db duomenų bazės ir lentelės bus sukurtos kuriant schemą. sync.url rodo, kur susisiekti su mazgu dėl sinchronizavimo.

2 mazgas pagrindiniame vm2 sukonfigūruotas kaip store-001, o likusi dalis nurodyta toliau esančiame faile node.properties. Node store-001 paleidžia PostgreSQL duomenų bazę, o pgdb_replica yra replikacijos duomenų bazė. Registration.url leidžia prieglobai vm2 susisiekti su priegloba vm1 ir iš jo gauti išsamią konfigūracijos informaciją.

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

Užbaigtame SymmetricDS pavyzdyje yra parametrai, skirti nustatyti dvipusį replikaciją tarp dviejų duomenų bazės serverių (dviejų mazgų). Toliau nurodyti veiksmai atliekami pagrindiniame vm1 (corp-000), kuris sukurs pavyzdinę schemą su 4 lentelėmis. Tada paleidus create-sym-tables su komanda symadmin sukuriamos katalogų lentelės, kuriose bus saugomos taisyklės ir replikacijos tarp mazgų kryptis. Galiausiai į lenteles įkeliami duomenų pavyzdžiai.

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

Pavyzdyje prekių ir prekių_pardavimo_kainų lentelės yra automatiškai sukonfigūruotos taip, kad būtų dauginamos iš corp-000 į parduotuvę-001, o pardavimo lentelės (pardavimo_transaction ir sale_return_line_item) yra automatiškai sukonfigūruotos taip, kad būtų dauginama iš parduotuvės-001 į corp-000. Dabar sukuriame schemą PostgreSQL duomenų bazėje pagrindinio kompiuterio vm2 (store-001), kad paruoštume ją priimti duomenis iš corp-000.

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

Būtinai patikrinkite, ar MySQL duomenų bazėje vm1 yra lentelių pavyzdžiai ir SymmetricDS katalogų lentelės. Atminkite, kad SymmetricDS sistemos lentelės (priešdėlis sym_) šiuo metu pasiekiamos tik mazge corp-000, nes ten paleidome komandą create-sym-tables ir tvarkysime replikaciją. O node store-001 duomenų bazėje bus tik 4 pavyzdinės lentelės be duomenų.

Visi. Aplinka yra paruošta paleisti sym serverio procesus abiejuose mazguose, kaip parodyta toliau.

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

Žurnalo įrašai siunčiami į fono žurnalo failą (symmetric.log), esantį žurnalų aplanke, esančiame kataloge, kuriame įdiegta SymmetricDS, taip pat į standartinę išvestį. Sym serverį dabar galima paleisti mazgo parduotuvėje-001.

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

Jei paleisite sym serverio procesą vm2 pagrindiniame kompiuteryje, jis taip pat sukurs SymmetricDS katalogo lenteles PostgreSQL duomenų bazėje. Jei paleidžiate sym serverio procesą abiejuose mazguose, jie derina vienas kitą, kad atkartotų duomenis iš corp-000 į store-001. Jei po kelių sekundžių užklaussime visas 4 lenteles iš abiejų pusių, pamatysime, kad replikacija buvo sėkminga. Arba galite nusiųsti įkrovos failą į node store-001 iš corp-000 naudodami šią komandą.

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

Šiuo metu naujas įrašas įterpiamas į elementų lentelę MySQL duomenų bazėje mazge corp-000 (host: vm1), ir jūs galite patikrinti jo replikaciją į PostgreSQL duomenų bazę mazgo parduotuvėje-001 (host: vm2). Matome ištraukimo operaciją, kad perkeltume duomenis iš corp-000 į 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)

Norėdami atlikti „Push“ operaciją ir perkelti duomenis iš parduotuvės-001 į corp-000, įterpiame įrašą į lentelę sale_transaction ir patikriname, ar replikacija sėkminga.

Rezultatas.

Matome sėkmingą dvipusio pavyzdinių lentelių replikavimo tarp MySQL ir PostgreSQL duomenų bazių sąranką. Norėdami nustatyti naujų vartotojų lentelių replikaciją, atlikite šiuos veiksmus: Pavyzdžiui, mes sukuriame lentelę t1 ir konfigūruojame jos replikacijos taisykles taip. Tokiu būdu konfigūruojame tik replikaciją iš corp-000 į 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)

Tada konfigūracijai pranešama apie schemos pakeitimą, tai yra apie naujos lentelės pridėjimą, naudojant symadmin komandą su sinchronizavimo trigerių argumentu, kuri iš naujo sukuria trigerius, kad susietų lentelės apibrėžimus. Send-schema vykdoma norint siųsti schemos pakeitimus į mazgo saugyklą-001, ir sukonfigūruojamas lentelės t1 replikavimas.

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

„SymmetricDS“ pranašumai

Lengvas diegimas ir konfigūravimas, įskaitant paruoštą failų rinkinį su parametrais, skirtais trijų mazgų arba dviejų mazgų grandinei sukurti.
Kelių platformų duomenų bazės ir platformų nepriklausomybė, įskaitant serverius, nešiojamuosius kompiuterius ir mobiliuosius įrenginius.
Pakartokite bet kurią duomenų bazę į bet kurią kitą duomenų bazę vietoje, WAN tinkle arba debesyje.
Galimybė optimaliai dirbti su pora duomenų bazių ar keliais tūkstančiais patogiam replikavimui.
Mokama versija su GUI ir puikiu palaikymu.

SymmetricDS trūkumai

Turite rankiniu būdu apibrėžti taisykles ir replikacijos kryptį komandinėje eilutėje naudodami SQL sakinius, kad įkeltumėte katalogo lenteles, o tai gali būti nepatogu.
Daugelio lentelių nustatymas replikacijai gali būti varginantis, nebent naudojate scenarijus kurdami SQL sakinius, kurie apibrėžia replikacijos taisykles ir kryptį.
Žurnaluose įrašoma per daug informacijos, todėl kartais reikia sutvarkyti žurnalo failą, kad jis neužimtų per daug vietos.

Rezultatai pagal SymmetricDS

SymmetricDS leidžia nustatyti dvipusį replikavimą tarp dviejų, trijų ar net kelių tūkstančių mazgų, kad būtų galima kopijuoti ir sinchronizuoti failus. Tai unikalus įrankis, kuris savarankiškai atlieka daugybę užduočių, tokių kaip automatinis duomenų atkūrimas po ilgo mazgo prastovos, saugus ir efektyvus duomenų mainai tarp mazgų per HTTPS, automatinis konfliktų valdymas, pagrįstas taisyklių rinkiniu ir kt. SymmetricDS atlieka replikacija tarp bet kokių duomenų bazių, todėl gali būti naudojama įvairiems scenarijams, įskaitant perkėlimą, perkėlimą, paskirstymą, filtravimą ir duomenų transformavimą įvairiose platformose.

Pavyzdys pagrįstas pareigūnu trumpas vadovas pateikė SymmetricDS. IN vartotojo vadovas Išsamiai aprašomos įvairios sąvokos, susijusios su replikacijos nustatymu naudojant SymmetricDS.

Šaltinis: www.habr.com

Добавить комментарий