Korsreplikation mellan PostgreSQL och MySQL

Korsreplikation mellan PostgreSQL och MySQL

Jag kommer att ge en översikt över korsreplication mellan PostgreSQL och MySQL, samt metoder för att konfigurera korsreplication mellan dessa tvÄ databasservrar. Vanligtvis kallas databaser i korsreplication homogena, och det Àr en praktisk metod för att överföra data frÄn en relationsdatabasserver till en annan.

PostgreSQL och MySQL betraktas vanligtvis som relationsdatabaser, men med ytterligare tillÀgg erbjuder de NoSQL-funktioner. HÀr kommer vi att diskutera replication mellan PostgreSQL och MySQL utifrÄn ett relationsdatabassyn.

Vi kommer inte att beskriva hela den interna strukturen, bara de grundlÀggande principerna, sÄ att du fÄr en uppfattning om hur man konfigurerar replication mellan databasservrar, deras fördelar, begrÀnsningar och anvÀndningsscenarier.

Normalt utförs replication mellan tvÄ identiska databasservrar antingen i binÀrt lÀge eller genom att skicka förfrÄgningar mellan en primÀr nod (Àven kallad utgivare, huvud- eller aktiv nod) och en sekundÀr nod (abonnent, passiv eller vÀntande). Syftet med replication Àr att tillhandahÄlla en realtidskopi av den primÀra databasen pÄ den sekundÀra sidan. Data överförs frÄn den primÀra till den sekundÀra, det vill sÀga frÄn aktiv till passiv, eftersom replication endast utförs i en riktning. Men det Àr möjligt att konfigurera replication mellan tvÄ databaser i bÄda riktningarna sÄ att data överförs frÄn den sekundÀra till den primÀra i en "aktiv-aktiv" konfiguration. Allt detta, inklusive kaskadreplication, Àr möjligt mellan tvÄ eller flera identiska databasservrar. Konfigurationen "aktiv-aktiv" eller "aktiv-passiv" beror pÄ behovet, tillgÀngligheten av sÄdana möjligheter i den ursprungliga konfigurationen eller anvÀndning av externa lösningar för instÀllning och befintliga kompromisser.

Den beskrivna konfigurationen Àr möjlig mellan olika databasservrar. En server kan konfigureras för att ta emot replikerade data frÄn en annan databasserver och samtidigt spara avbilder av de replikerade data i realtid. MySQL och PostgreSQL erbjuder de flesta av dessa konfigurationer antingen sjÀlva eller genom tredjepartsersÀttning, inklusive metoder för binÀr loggning, diskblockering och metoder som baseras pÄ operatörer och rader.

Korsreplikering mellan MySQL och PostgreSQL behövs för en engÄngsmigrering frÄn en databasserver till en annan. Dessa databaser anvÀnder olika protokoll, sÄ de kan inte kopplas direkt samman. För att möjliggöra datadelning kan man anvÀnda ett externt open source-verktyg, som pg_chameleon.

Vad Àr pg_chameleon

pg_chameleon Àr ett replikationssystem frÄn MySQL till PostgreSQL byggt pÄ Python 3. Det anvÀnder det open source-biblioteket mysql-replication, ocksÄ skrivet i Python. Rader extraheras frÄn MySQL-tabeller och lagras som JSONB-objekt i PostgreSQL-databasen, och avkodas sedan med funktionen pl/pgsql och Äterges i PostgreSQL-databasen.

Möjligheter med pg_chameleon

Flera MySQL-scheman frÄn en kluster kan replikeras till en enda mÄldatabas i PostgreSQL med konfigurationen "ett till mÄnga".
Namn pÄ kÀll- och mÄlscheman fÄr inte vara desamma.
Replikationsdata kan extraheras frÄn en kaskadreplika av MySQL.
Tabeller som inte kan replikeras eller som orsakar fel exkluderas.
Varje replikationsfunktion hanteras av demoner.
Övervakning med hjĂ€lp av parametrar och konfigurationsfiler baserade pĂ„ YAML.

Exempel

VĂ€rd
vm1
vm2

OS-version
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64

DB-serverversion
MySQL 5.7.26
PostgreSQL 10.5

DB-port
3306
5433

IP-adress
192.168.56.102
192.168.56.106

Börja med att förbereda alla nödvÀndiga komponenter för att installera pg_chameleon. I detta exempel Àr Python 3.6.8 installerat, vilket skapar en virtuell miljö och aktiverar den.

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

Efter en framgÄngsrik installation av Python3.6 behöver man uppfylla övriga krav, som att skapa och aktivera den virtuella miljön. Dessutom uppdateras pip-modulen till den senaste versionen och anvÀnds för att installera pg_chameleon. I kommandona nedan installerar vi avsiktligt pg_chameleon 2.0.9, Àven om den senaste versionen Àr 2.0.10. Detta görs för att undvika nya buggar i den uppdaterade versionen.

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

Sedan anropar vi pg_chameleon (chameleon Àr kommandot) med argumentet set_configuration_files för att aktivera pg_chameleon och skapa kataloger och konfigurationsfiler enligt standard.

(venv) $> chameleon set_configuration_files
skapar katalog /root/.pg_chameleon
skapar katalog /root/.pg_chameleon/configuration/
skapar katalog /root/.pg_chameleon/logs/
skapar katalog /root/.pg_chameleon/pid/
kopierar konfigurationsexempel till /root/.pg_chameleon/configuration//config-example.yml

Nu skapar vi en kopia av config-example.yml som default.yml, sÄ att den blir standardkonfigurationsfilen. Ett exempel pÄ konfigurationsfil för detta exempel ges nedan.

$> cat default.yml
---
#globala instÀllningar
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 tillÄter anvÀndaren att överskrida den standard typkonverteringen till en annan.
type_override:
  "tinyint(1)":
    override_to: boolean
    override_tables:
      - "*"

#postgres mÄlanslutning
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 #skippa insÀttningar pÄ tabellen delphis_mediterranea.foo
      delete:
        - delphis_mediterranea #skippa borttagningar i schemat delphis_mediterranea
      update:

Konfigurationsfilen i detta exempel Àr ett exempel pÄ en fil med pg_chameleon med smÄ Àndringar i enlighet med de ursprungliga och mÄlmiljöerna, och nedan ges en översikt över de olika avsnitten i konfigurationsfilen.

I konfigurationsfilen default.yml finns ett avsnitt för globala parametrar (global settings), dÀr du kan hantera instÀllningar som lÄsfilsplacering, loggar, loggförvaringsperiod och sÄ vidare. Sedan följer avsnittet för typöverskrivning (type override), dÀr ett antal regler för typöverskrivning under replikering anges. I standardexemplet anvÀnds en typöverskrivningsregel som konverterar tinyint(1) till ett boolean-vÀrde. I nÀsta avsnitt anger vi uppgifterna för anslutning till mÄldatabasen. I vÄrt fall handlar det om en PostgreSQL-databas som kallas pg_conn. I det sista avsnittet anger vi datakÀllor, det vill sÀga parametrar för anslutning till ursprungsdatabasen, schemaöversÀttning mellan ursprungs- och mÄldatabas, tabeller som ska hoppas över, tidsgrÀnser, minne, batchstorlek. Observera att "sources" anges i plural, vilket innebÀr att vi kan lÀgga till flera kÀlldatabaser för en mÄl för att konfigurera en "mÄnga till en"-instÀllning.

Databasen world_x i exemplet innehÄller 4 tabeller med rader som MySQL-communityn erbjuder som exempel. Den kan laddas ner hÀr. Exemplet pÄ databasen levereras som en tar-fil och i en komprimerad arkiv med instruktioner för hur man skapar och importerar rader.

I MySQL- och PostgreSQL-databaser skapas en speciell anvÀndare med samma namn usr_replica. I MySQL tilldelas den ytterligare rÀttigheter att lÀsa alla replikerade tabeller.

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;

PÄ PostgreSQL-sidan skapas en databas db_replica, som kommer att ta emot Àndringar frÄn MySQL-databasen. AnvÀndaren usr_replica i PostgreSQL konfigureras automatiskt som Àgare till de tvÄ scheman pgworld_x och sch_chameleon, som innehÄller de faktiska replikerade tabellerna och tabellerna med replikeringskataloger respektive. Den automatiska konfigurationen styrs av argumentet create_replica_schema, som du kommer att se nedan.

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

MySQL-databasen konfigureras med Àndringar av vissa parametrar för att förbereda den för replikering, som visas nedan. Databasservern mÄste startas om för att Àndringarna ska trÀda i kraft.

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

Det Àr nu viktigt att kontrollera anslutningen till bÄda databasserverna sÄ att det inte uppstÄr problem nÀr kommandon körs med pg_chameleon.

PĂ„ PostgreSQL-noden:

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

PĂ„ MySQL-noden:

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

De följande tre kommandona i pg_chameleon (chameleon) förbereder miljön, lÀgger till kÀllan och initierar repliken. Argumentet create_replica_schema i pg_chameleon skapar standardenschema (sch_chameleon) och replikeringsschemat (pgworld_x) i PostgreSQL-databasen, som vi tidigare nÀmnt. Argumentet add_source lÀgger till den ursprungliga databasen i konfigurationen genom att lÀsa konfigurationsfilen (default.yml), och i vÄrt fall Àr det mysql, och init_replica initierar konfigurationen baserat pÄ parametrarna i konfigurationsfilen.

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

Resultaten frÄn de tre kommandona indikerar tydligt att de har genomförts framgÄngsrikt. Alla fel eller syntaxproblem rapporteras i enkla och förstÄeliga meddelanden med förslag pÄ hur man ÄtgÀrdar problemen.

Slutligen ska vi starta replikeringen med hjÀlp av start_replica och fÄ ett meddelande om att den har genomförts framgÄngsrikt.

$> chameleon start_replica --config default --source mysql 
output: Startar replikationsprocessen för kÀllan mysql

Replikationsstatus kan begÀras med argumentet show_status, medan fel kan granskas med argumentet show_errors.

Result.

Som vi redan nÀmnt styrs varje replikationsfunktion av demoner. För att visa dem kan vi begÀra processens tabell med kommandot Linux ps, som visas nedan.

Result.

Replikeringen anses inte vara konfigurerad förrÀn vi testar den i realtid, som visas nedan. Vi skapar en tabell, infogar ett par poster i databasen MySQL och anropar argumentet sync_tables i pg_chameleon för att uppdatera demonerna och replikera tabellen med posterna till databasen PostgreSQL.

mysql> create table t1 (n1 int primary key, n2 varchar(10));
FrÄga OK, 0 rader pÄverkade (0.01 sek)
mysql> insert into t1 values (1,'one');
FrÄga OK, 1 rad pÄverkad (0.00 sek)
mysql> insert into t1 values (2,'two');
FrÄga OK, 1 rad pÄverkad (0.00 sek)

$> chameleon sync_tables --tables world_x.t1 --config default --source mysql
Synkronisering av tabeller process för kÀllan mysql startad.

För att bekrÀfta testresultaten, begÀr vi tabellen frÄn PostgreSQL-databasen och skriver ut raderna.

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

Om vi utför migrering, kommer följande kommandon pg_chameleon att avsluta den. Kommandona ska utföras efter att vi har verifierat att raderna i alla mÄltabeller har replikeras, och resultatet kommer att bli en noggrant överförd PostgreSQL-databas utan hÀnvisningar till den ursprungliga databasen eller replikeringens schema (sch_chameleon).

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

Vid behov kan du med följande kommandon ta bort den ursprungliga konfigurationen och replikationsschemat.

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

Fördelar med pg_chameleon

Enkel installation och konfiguration.
LÀtt att felsöka och upptÀcka avvikelser med tydliga felmeddelanden.
Det gÄr att lÀgga till ytterligare specialtabeller till replikationen efter initiering, utan att Àndra den övriga konfigurationen.
Du kan konfigurera flera kÀlldatabaser för en mÄl databas, vilket Àr mycket bekvÀmt om du samlar data frÄn en eller flera MySQL-databaser till en PostgreSQL-databas.
Det gÄr att utesluta valda tabeller frÄn replikeringen.

Nackdelar med pg_chameleon

Stöder endast MySQL 5.5 och senare som kÀlla och PostgreSQL 9.5 och senare som mÄldatabas.
Varje tabell mÄste ha en primÀr eller unik nyckel, annars initieras tabellerna under init_replica-processen men replikeras inte.
Enkelriktad replikering — endast frĂ„n MySQL till PostgreSQL. DĂ€rför passar den endast för en "aktiv-passiv"-modell.
KÀllan kan endast vara en MySQL-databas, och stöd för PostgreSQL som kÀlla Àr endast experimentellt och med begrÀnsningar (lÀs mer) hÀr)

Sammanfattning av pg_chameleon

Replikationsmetoden i pg_chameleon Ă€r utmĂ€rkt för migrering av databasen frĂ„n MySQL till PostgreSQL. En betydande nackdel Ă€r att replikeringen Ă€r enkelriktad, vilket gör att databasspecialister sĂ€llan kommer att vilja anvĂ€nda den för nĂ„got annat Ă€n migrering. Men problemet med enkelriktad replikering kan lösas med ett annat open source-verktyg — SymmetricDS.

LÀs mer i den officiella dokumentationen hÀr. HjÀlpen för kommandoraden finns tillgÀnglig hÀr.

Översikt av SymmetricDS

SymmetricDS Àr ett open source-verktyg som replikera vilken databas som helst till vilken annan populÀr databas som helst: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird och andra molnbaserade databasinstanser, sÄsom Redshift, Azure etc. TillgÀngliga funktioner: databas- och filsynkronisering, replikering av flera ledande databaser, filtrerad synkronisering, transformering och mer. Det Àr ett verktyg i Java, och standardutgÄvan av JRE eller JDK (version 8.0 eller senare) krÀvs. HÀr kan du registrera databasÀndringar via triggers i kÀlldatabasen och skicka dem till motsvarande mÄldatabas i form av paket.

Funktioner i SymmetricDS

Verktyget Àr plattformsoberoende, vilket innebÀr att tvÄ eller flera olika databaser kan utbyta data.
Relationsdatabaser synkroniseras genom databasÀndringsregistrering, medan filsystembaserade databaser anvÀnder filsynkronisering.
Dubbelriktad replikering med anvÀndning av Push- och Pull-metoder baserat pÄ regler.
Dataöverföring Àr möjlig över skyddade nÀtverk och nÀtverk med lÄg bandbredd.
Automatisk ÄterstÀllning vid Äterstart av noder efter ett fel och automatisk konfliktlösning.
Kompatibilitet med molnet och effektiva API:er för tillÀgg.

Exempel

SymmetricDS kan konfigureras pÄ ett av tvÄ sÀtt:
En ledande (parent) nod som centralt koordinerar datareplication mellan tvÄ följande (child) noder, och datautbyte mellan de följande noderna sker endast genom den ledande noden.
Den aktiva noden (nod 1) kan utbyta data för replikering med en annan aktiv nod (nod 2) utan mellanhand.

I bÄda konfigurationerna sker datautbyte med hjÀlp av Push och Pull. I detta exempel kommer vi att titta pÄ konfigurationen "aktiv-aktiv". Att beskriva hela arkitekturen tar för lÄng tid, sÄ titta pÄ en guide, för att lÀra dig mer om SymmetricDS.

Att installera SymmetricDS Àr mycket enkelt: ladda ner den öppen kÀllkodsversionen av zip-filen hÀrifrÄn och extrahera den vart du vill. I tabellen nedan ger vi information om installationsstÀlle och version av SymmetricDS i detta exempel, liksom databasversioner, Linux-versioner, IP-adresser och portar för bÄda noder.

VĂ€rd
vm1
vm2

OS-version
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64

DB-serverversion
MySQL 5.7.26
PostgreSQL 10.5

DB-port
3306
5832

IP-adress
192.168.1.107
192.168.1.112

Version av SymmetricDS
SymmetricDS 3.9
SymmetricDS 3.9

InstallationsvÀg för SymmetricDS
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20

Namn pÄ SymmetricDS-nod
corp-000
store-001

HÀr installerar vi SymmetricDS i /usr/local/symmetric-server-3.9.20, och olika underkataloger och filer kommer att lagras hÀr. Vi Àr intresserade av underkatalogerna samples och engines. I katalogen samples lagras exempelkonfigurationsfiler med nodens egenskaper samt exempel pÄ SQL-skript för en snabb start av demonstrationer.

I katalogen samples ser vi tre konfigurationsfiler med nodens egenskaper — namnen visar nodens karaktĂ€r i en viss schem.

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

SymmetricDS levererar alla nödvÀndiga konfigurationsfiler för ett grundschema med 3 noder (alternativ 1), och samma filer kan anvÀndas för ett schema med 2 noder (alternativ 2). Kopiera den nödvÀndiga konfigurationsfilen frÄn katalogen samples till engines pÄ vÀrden vm1. Det blir sÄ hÀr:

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

Denna nod i SymmetricDS-konfigurationen kallas corp-000, och anslutningen till databasen hanteras av mysql jdbc-drivrutinen, som anvÀnder den ovan angivna anslutningsstrÀngen och inloggningsuppgifterna. Vi ansluter till databasen replica_db, och under skapandet av schemat kommer tabeller att skapas. sync.url visar platsen för att koppla samman med noden för synkronisering.

Nod 2 pÄ vÀrden vm2 Àr konfigurerad som store-001, och resten anges i filen node.properties, som Äterges nedan. Nod store-001 anvÀnder PostgreSQL-databasen, och pgdb_replica Àr databasen för replikering. registration.url tillÄter vÀrden vm2 att koppla upp sig mot vÀrden vm1 och hÀmta konfigurationsdetaljer.

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

Ett fÀrdigt exempel pÄ SymmetricDS innehÄller parametrar för att konfigurera tvÄvÀgs replikering mellan tvÄ databasserverar (tvÄ noder). Stegen nedan utförs pÄ vÀrden vm1 (corp-000), som kommer att skapa ett exempel pÄ schema med 4 tabeller. DÀrefter kommer kommandot create-sym-tables i symadmin att skapa katalogtabeller dÀr regler och riktning för replikering mellan noder kommer att lagras. Slutligen laddas exempeldata upp i tabellerna.

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

I exemplet Àr tabellerna item och item_selling_price automatiskt konfigurerade för replikering frÄn corp-000 till store-001, och tabellerna sale (sale_transaction och sale_return_line_item) Àr automatiskt konfigurerade för replikering frÄn store-001 till corp-000. Nu skapar vi ett schema i PostgreSQL-databasen pÄ vÀrden vm2 (store-001) för att förbereda den för att ta emot data frÄn corp-000.

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

Det Àr viktigt att kontrollera att det finns exempeldata i MySQL-databasen pÄ vm1, liksom katalogtabellerna för SymmetricDS. Observera att systemtabellerna för SymmetricDS (med prefikset sym_) för nÀrvarande endast Àr tillgÀngliga pÄ noden corp-000, eftersom vi dÀr har utfört kommandot create-sym-tables och kommer att hantera replikeringen. Dessutom kommer databasen pÄ noden store-001 att ha totalt 4 exempel tabeller utan data.

Klart. Miljön Àr redo för att köra serverprocesserna sym pÄ bÄda noderna, som visas nedan.

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

Loggning av registreringar skickas till filen för bakgrundsloggen (symmetric.log) i loggmappen i katalogen dÀr SymmetricDS Àr installerat, samt till standardutdata. Sym-servern kan nu initieras pÄ noden store-001.

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

Om man startar serverprocessen sym pÄ vÀrden vm2 kommer det att skapa SymmetricDS-katalogtabeller Àven i PostgreSQL-databasen. Om serverprocessen sym körs pÄ bÄda noderna kommer de att samordna sig med varandra för att replikera data frÄn corp-000 till store-001. Om vi efter nÄgra sekunder begÀr alla 4 tabeller pÄ bÄda sidor kommer vi att se att replikeringen har genomförts framgÄngsrikt. Alternativt kan vi skicka en initial laddning till noden store-001 frÄn corp-000 med följande kommando.

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

Vid det hÀr laget sÀtts en ny post in i item-tabellen i MySQL-databasen pÄ noden corp-000 (vÀrd: vm1), och vi kan kontrollera dess replikering till PostgreSQL-databasen pÄ noden store-001. Vi ser en Pull-operation för att flytta data frÄn corp-000 till 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)

För att utföra Push-operationen för att flytta data frÄn store-001 till corp-000, sÀtter vi in en post i sale_transaction-tabellen och kontrollerar att replikeringen har genomförts.

Result.

Vi ser en framgÄngsrik instÀllning av tvÄvÀgsreplikering av exempeltabellerna mellan MySQL- och PostgreSQL-databaserna. För att stÀlla in replikering för nya anvÀndartabeller följer vi dessa steg. Vi skapar tabellen t1 som ett exempel och stÀller in reglerna för dess replikering pÄ följande sÀtt. SÄ stÀller vi endast in replikering frÄn corp-000 till 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)

Konfigurationen fÄr sedan ett meddelande om Àndring av schemat, det vill sÀga tillÀgg av en ny tabell, via kommandot symadmin med argumentet sync-triggers, som Äterskapar triggers för att matcha tabelldefinitionerna. send-schema körs för att skicka schemaÀndringarna till noden store-001, och replikeringen av tabellen t1 konfigureras.

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

Fördelar med SymmetricDS

Enkel installation och konfiguration, inklusive en fÀrdig uppsÀttning filer med parametrar för att skapa scheman med tre eller tvÄ noder.
Plattformsoberoende databas och oberoende av plattform, inklusive servrar, bÀrbara datorer och mobila enheter.
Replikering av vilken databas som helst till vilken annan databas som helst lokalt, i WAN eller i molnet.
Möjligheten till optimal drift med ett par databaser eller flera tusen för bekvÀm replikering.
Betald version med grafiskt grÀnssnitt och utmÀrkt support.

Nackdelar med SymmetricDS

Man behöver manuellt ange regler och riktning för replikering via SQL-operatörer för att ladda katalogtabeller, vilket kan vara besvÀrligt.
Att konfigurera mÄnga tabeller för replikering kan vara tröttsamt om man inte anvÀnder skript för att skapa SQL-operatörer som definierar regler och riktning för replikeringen.
Det skrivs för mycket information i loggarna, och ibland mÄste man stÀda upp loggfilen sÄ att den inte tar för mycket plats.

Sammanfattning av SymmetricDS

SymmetricDS möjliggör konfiguration av tvÄvÀgsreplikering mellan tvÄ, tre och till och med flera tusen noder för att utföra replikering och synkronisera filer. Detta Àr ett unikt verktyg som sjÀlv utför mÄnga uppgifter, sÄsom automatisk ÄterstÀllning av data efter lÄngvarigt driftstopp pÄ en nod, sÀker och effektiv dataöverföring mellan noder över HTTPS, automatisk hantering av konflikter baserat pÄ ett regelsystem etc. SymmetricDS utför replikering mellan valfria databaser, vilket gör att den kan anvÀndas för en mÀngd olika scenarier, inklusive migrering, uppgradering, distribution, filtrering och omvandling av data pÄ olika plattformar.

Exemplet Àr skapat baserat pÄ den officiella kortguiden till SymmetricDS. I anvÀndarhandboken detaljerat beskrivs olika begrepp relaterade till att konfigurera replikering med SymmetricDS.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster