Replicazione incruciata trà PostgreSQL è MySQL

Replicazione incruciata trà PostgreSQL è MySQL

Parlaraghju brevemente di a replicazione incruciata trà PostgreSQL è MySQL, è ancu di i metudi per stabilisce a replicazione incruciata trà questi dui servitori di basa di dati. I basa di dati replicati incrociati sò cumunimenti chjamati basa di dati omogenei, è questu hè un metudu convenientu per a migrazione da un servitore RDBMS à un altru.

E basa di dati PostgreSQL è MySQL sò tradizionalmente cunsiderate relazionali, ma cù estensioni supplementari offrenu capacità NoSQL. Quì discutemu a replicazione trà PostgreSQL è MySQL da una perspettiva di gestione di basa di dati relazionale.

Ùn scriveremu micca tutti l'internu, solu i principii basi, per avè una idea di stallà a replicazione trà i servitori di basa di dati, vantaghji, limitazioni è casi d'usu.

Di genere, a replicazione trà dui servitori di basa di dati identici hè fatta in modu binariu o per dumande trà un maestru (aka editore, maestru o attivu) è un slave (abbonatu, standby, o passiu). U scopu di a replicazione hè di furnisce una copia in tempu reale di a basa di dati maestru in u latu standby. In questu casu, i dati sò trasferiti da maestru à schiavu, vale à dì da attivu à passivu, perchè a replicazione hè realizata solu in una direzzione. Ma pudete stabilisce a replicazione trà duie basa di dati in e duie direzzione, perchè e dati sò trasferiti da u schiavu à u maestru in una cunfigurazione attiva-attiva. Tuttu chistu, cumpresa a replicazione in cascata, hè pussibule trà dui o più servitori di basa di dati idèntici. A cunfigurazione attiva-attiva o attiva-passiva dipende da a necessità, a dispunibilità di tali capacità in a cunfigurazione iniziale o l'usu di suluzioni di sintonizazione esterna è u cummerciu esistenti. - off .

A cunfigurazione descritta hè pussibule trà diversi servitori di basa di dati. U servitore pò esse cunfiguratu per riceve dati replicati da un altru servitore di basa di dati è mantene sempre snapshots in tempu reale di e dati replicati. MySQL è PostgreSQL offrenu a maiò parte di sti cunfigurazioni in modu nativu o attraversu estensioni di terzu, cumprese i metudi di log binari, i blocchi di discu, è i metudi basati in dichjarazione è fila.

A replicazione incruciata trà MySQL è PostgreSQL hè necessaria per una migrazione unica da un servitore di basa di dati à l'altru. Queste basa di dati utilizanu protokolli diffirenti, perchè ùn pudete micca ligà direttamente. Per facilità u scambiu di dati, pudete aduprà un strumentu di fonte aperta esterna, cum'è pg_chameleon.

Cosa hè pg_chameleon

pg_chameleon hè un sistema di replicazione da MySQL à PostgreSQL in Python 3. Utiliza a biblioteca open source mysql-replication, ancu in Python. L'imaghjini di fila sò recuperati da e tavule MySQL è guardati cum'è oggetti JSONB in ​​a basa di dati PostgreSQL, è dopu decodificati da a funzione pl / pgsql è riproduci in a basa di dati PostgreSQL.

Caratteristiche di pg_chameleon

Diversi schemi MySQL da u stessu cluster ponu esse replicati à una sola basa di dati di destinazione PostgreSQL cù una cunfigurazione unu à parechji.
I nomi di schema fonte è destinazione ùn ponu esse listessi.
I dati di replicazione ponu esse recuperati da una replica in cascata MySQL.
I tavule chì ùn ponu micca riplicà o generà errori sò esclusi.
Ogni funzione di replicazione hè cuntrullata da i demoni.
Cuntrolla cù i paràmetri è i schedarii di cunfigurazione basatu in YAML.

Esempiu:

Òspite
vm1
vm2

versione OS
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64

Versione di u servitore di basa di dati
MySQL 5.7.26
PostgreSQL 10.5

portu DB
3306
5433

Indirizzu IP
192.168.56.102
192.168.56.106

Prima, preparanu tutti i cumpunenti necessarii per installà pg_chameleon. Questu esempiu hà installatu Python 3.6.8, chì crea un ambiente virtuale è l'attiva.

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

Una volta chì Python3.6 hè stallatu cù successu, u restu di e esigenze deve esse cumpletu, cum'è a creazione è l'attivazione di un ambiente virtuale. Inoltre, u modulu pip hè aghjurnatu à l'ultima versione è utilizatu per installà pg_chameleon. I cumandamenti sottu intenzionalmente installanu pg_chameleon 2.0.9, ancu s'è l'ultima versione hè 2.0.10. Questu hè necessariu per evità novi bugs in a versione aghjurnata.

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

Allora chjamemu pg_chameleon (chameleon hè un cumandamentu) cù l'argumentu set_configuration_files per attivà pg_chameleon è creà i repertorii è i schedari di cunfigurazione predeterminati.

(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

Facemu avà una copia di config-example.yml cum'è default.yml in modu chì diventa u schedariu di cunfigurazione predeterminatu. Un schedariu di cunfigurazione di mostra per questu esempiu hè furnitu quì sottu.

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

U schedariu di cunfigurazione in questu esempiu hè un schedariu pg_chameleon di mostra cù mudificazioni minori per currisponde à l'ambienti fonte è di destinazione, è quì sottu hè una panoramica di e diverse sezioni di u schedariu di cunfigurazione.

U schedariu di cunfigurazione default.yml hà una sezione di paràmetri globale (parametri globale) induve pudete cuntrullà paràmetri, cum'è u locu di u schedariu di serratura, u locu di i logs, u periodu di almacenamiento per i logs, etc. Dopu vene u tipu override. sezione, induve e regule stabilite per i tipi di annullamentu durante a replicazione. L'esempiu predeterminatu usa una regula di override di tipu chì cunverte tinyint(1) in un boolean. In a sezione dopu, specificamu i dettagli di cunnessione à a basa di dati di destinazione. In u nostru casu, questu hè una basa di dati PostgreSQL, denotata cum'è pg_conn. In l'ultima rùbbrica, specifiemu i dati di fonte, vale à dì, i paràmetri di cunnessione di a basa di dati fonte, u schema di mappatura di e basa di dati fonte è destinazione, tavule per esse saltate, timeout, memoria, dimensione di u pacchettu. Nota chì "fonti" hè plurale, chì significa chì pudemu aghjunghje parechje basa di dati di fonti à u stessu scopu per stabilisce una cunfigurazione parechje à una.

A basa di dati world_x in l'esempiu cuntene 4 tabelle cù fila chì a cumunità MySQL suggerisce per l'esempiu. Pò esse telecaricatu ccà. A basa di dati di mostra vene cum'è un archiviu tar è cumpressu cù struzzioni per creà è impurtà strings.

Un utilizatore speciale cù u listessu nome usr_replica hè creatu in a basa di dati MySQL è PostgreSQL. MySQL dà un accessu di lettura supplementu à tutte e tavule replicate.

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;

In u latu di PostgreSQL, una basa di dati db_replica hè creata chì accettarà cambiamenti da a basa di dati MySQL. L'utilizatore usr_replica in PostgreSQL hè automaticamente cunfiguratu cum'è u pruprietariu di i dui schemi pgworld_x è sch_chameleon, chì cuntenenu e tabelle replicate attuali è e tabelle di catalogu di replicazione, rispettivamente. L'argumentu create_replica_schema hè rispunsevule per a cunfigurazione automatica, cum'è vi vede quì sottu.

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

A basa di dati MySQL hè cunfigurata cù qualchi cambiamenti per rende pronta per a replicazione cum'è mostra quì sottu. Avete bisognu di riavvia u servitore di basa di dati per chì i cambiamenti entranu in vigore.

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

Avà hè impurtante di verificà a cunnessione à i dui servitori di basa di dati in modu chì ùn ci hè micca prublemi quandu eseguisce i cumandamenti pg_chameleon.

Nantu à u node PostgreSQL:

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

Nantu à u nodu MySQL:

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

I seguenti trè pg_chameleon (chameleon) cumandamenti preparanu l'ambienti, aghjunghjenu a fonte, è inizializza a replica. L'argumentu create_replica_schema à pg_chameleon crea un schema predeterminatu (sch_chameleon) è un schema di replicazione (pgworld_x) in a basa di dati PostgreSQL, cum'è avemu dettu. L'argumentu add_source aghjusta una basa di dati di fonte à a cunfigurazione leghjendu u schedariu di cunfigurazione (default.yml), chì in u nostru casu hè mysql, è init_replica inizializza a cunfigurazione basatu annantu à i paràmetri in u schedariu di cunfigurazione.

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

L'output di sti trè cumandamenti indicanu chjaramente u so successu. Tutti i fallimenti o l'errore di sintassi sò indicati in messagi simplici è comprensibili cù suggerimenti per risolve i prublemi.

Infine, cuminciamu a replicazione cù start_replica è uttene un missaghju di successu.

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

U statutu di replicazione pò esse dumandatu cù l'argumentu show_status, è l'errori ponu esse vistu cù l'argumentu show_errors.

U risultatu.

Comu avemu digià dettu, i demoni gestionanu ogni funzione di replicazione. Per vede, dumandate a tabella di prucessu cù u cumandamentu Linux ps, cum'è mostratu quì sottu.

U risultatu.

A replicazione ùn hè micca cunsiderata cunfigurata finu à a prova in tempu reale, cum'è mostra quì sottu. Creemu una tavula, inserite un paru di registri in a basa di dati MySQL, è chjamate l'argumentu sync_tables in pg_chameleon per aghjurnà i demoni è replicate a tabella cù i registri à a basa di dati PostgreSQL.

mysql> create table t1 (n1 int primary key, n2 varchar(10));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t1 values (1,'one');
Query OK, 1 row affected (0.00 sec)
mysql> insert into t1 values (2,'two');
Query OK, 1 row affected (0.00 sec)

$> chameleon sync_tables --tables world_x.t1 --config default --source mysql
Sync tables process for source mysql started.

Per cunvalidà i risultati di a prova, dumandemu a tavula da a basa di dati PostgreSQL è emette e file.

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

Sè avemu migratu, i seguenti cumandamenti pg_chameleon seranu a fine di a migrazione. I cumandamenti devenu esse eseguiti dopu avè verificatu chì e fila di tutti i tavulini di destinazione sò stati replicati, risultatu in una basa di dati PostgreSQL ben migrata senza riferenzi à a basa di dati fonte o schema di replicazione (sch_chameleon).

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

Pudete opcionalmente sguassà a cunfigurazione originale è u schema di replicazione cù i seguenti cumandamenti.

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

Beneficii di pg_chameleon

Configurazione è cunfigurazione faciule.
Risoluzione di prublemi cunvene è rilevazione di anomalie cù missaghji di errore chjaru.
Tavule speciale supplementu pò esse aghjuntu à a replicazione dopu l'inizializazione senza cambià u restu di a cunfigurazione.
Hè pussibule cunfigurà parechje basa di dati di fonti per una basa di dati di destinazione, è questu hè assai utile se unisce dati da una o più basa di dati MySQL in una basa di dati PostgreSQL.
Pudete sceglie micca di riplicà e tavule scelte.

Svantaghji di pg_chameleon

Solu supportatu cù MySQL 5.5 è sopra cum'è a fonte è PostgreSQL 9.5 è sopra cum'è a basa di dati di destinazione.
Ogni tavula deve avè una chjave primaria o unica, altrimenti i tavulini sò inizializzati in u prucessu init_replica ma micca replicati.
Replicazione unidirezionale - solu da MySQL à PostgreSQL. Per quessa, hè solu adattatu per u schema attivu-passivu.
A fonte pò esse solu una basa di dati MySQL, è u supportu per una basa di dati PostgreSQL cum'è fonte hè solu sperimentale è limitata (amparate più ccà)

Totali per pg_chameleon

U metudu di replicazione in pg_chameleon hè grande per a migrazione di una basa di dati da MySQL à PostgreSQL. U grande svantaghju hè chì a replicazione hè solu unidirezionale, cusì i prufessiunali di a basa di dati sò improbabile di vulsutu aduprà per qualcosa altru ch'è a migrazione. Ma u prublema di a replicazione unidirezionale pò esse risolta cù un altru strumentu open source - SymmetricDS.

Leghjite più in a documentazione ufficiale ccà. L'aiutu di a linea di cumanda pò esse truvatu ccà.

Panoramica di SymmetricDS

SymmetricDS hè un strumentu open source chì replica ogni basa di dati à qualsiasi altra basa di dati cumuni: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird è altre istanze di basa di dati in nuvola, per esempiu Redshift, è Azure, etc. Funzioni dispunibuli: sincronizazione di basa di dati è di schedari, replicazione di basa di dati multi-maestru, sincronizazione filtrata, trasfurmazioni è altri. Questu hè un strumentu Java è richiede a versione standard JRE o JDK (versione 8.0 o superiore). Quì pudete registrà cambiamenti di dati nantu à i triggers in a basa di dati fonte è mandà à a basa di dati di destinazione currispondente cum'è batch.

Capacità SymmetricDS

L'uttellu hè indipendente da a piattaforma, vale à dì chì duie o più basa di dati diffirenti ponu scambià dati.
E basa di dati relazionale sò sincronizzate da a registrazione di cambiamenti di dati, è e basa di dati basate nantu à i sistemi di schedari utilizanu a sincronizazione di i schedari.
Replicazione bidirezionale utilizendu metudi push and pull basatu nantu à un inseme di regule.
A trasmissione di dati hè pussibule nantu à e rete sicure è e rete cù una larghezza di banda bassa.
Recuperazione automatica quandu ripiglià l'operazione di i nodi dopu un fallimentu è una risoluzione automatica di cunflittu.
API d'estensione efficaci è cumpatibili in u cloud.

Esempiu:

SymmetricDS pò esse cunfiguratu in unu di dui modi:
Un nodu maestru (parente) chì coordina centralmente a replicazione di dati trà dui nodi schiavi (figlioli), è u scambiu di dati trà i nodi figlioli hè realizatu solu per mezu di u genitore.
Un node attivu (node ​​1) pò cumunicà per a replicazione cù un altru node attivu (node ​​2) senza intermediari.

In e duie opzioni, u scambiu di dati si faci cù Push and Pull. In questu esempiu, avemu da cunsiderà a cunfigurazione attiva-attiva. Hè troppu longu per descriverà tutta l'architettura, cusì studia dirigenzaper sapè più nantu à l'appliance SymmetricDS.

L'installazione di SymmetricDS hè faciule: scaricate u schedariu zip open source da quì è estrae lu induve vulete. A tavula seguente lista u locu di stallazione è a versione di SymmetricDS in questu esempiu, è ancu versioni di basa di dati, versioni Linux, indirizzi IP è porti per i dui nodi.

Òspite
vm1
vm2

versione OS
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64

Versione di u servitore di basa di dati
MySQL 5.7.26
PostgreSQL 10.5

portu DB
3306
5832

Indirizzu IP
192.168.1.107
192.168.1.112

Versione SymmetricDS
SymmetricDS 3.9
SymmetricDS 3.9

Percorsu d'installazione SymmetricDS
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20

Nome d'ospite SymmetricDS
corp-000
magazinu-001

Quì installemu SymmetricDS in /usr/local/symmetric-server-3.9.20 è varii subdirectorii è schedarii seranu guardati quì. Semu interessate in i sottodirectorii campioni è motori. U repertoriu di campioni cuntene schedarii di cunfigurazione di mostra cù proprietà di node, è ancu esempi di script SQL per inizià rapidamente a demo.

In u repertoriu di mostra, vedemu trè schedarii di cunfigurazione cù proprietà di node - u nome mostra a natura di u node in un schema particulari.

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

SymmetricDS hà tutti i schedarii di cunfigurazione necessarii per un schema basicu di 3 nodi (opzione 1) è i stessi schedari ponu esse utilizati per un schema di 2 nodi (opzione 2). Copia u schedariu di cunfigurazione necessariu da u repertoriu di campioni à i motori nantu à l'ospite vm1. Risulta cusì:

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

Stu node hè chjamatu corp-000 in a cunfigurazione SymmetricDS è a cunnessione di a basa di dati hè trattata da u driver mysql jdbc chì usa a stringa di cunnessione sopra è e credenziali di login. Ci cunnettamu à a basa di dati replica_db è e tabelle seranu create durante a creazione di schema. sync.url mostra u ligame à u node per sincronizà.

Node 2 in host vm2 hè cunfiguratu cum'è store-001 è u restu hè specificatu in u schedariu node.properties sottu. U node store-001 esegue a basa di dati PostgreSQL, è pgdb_replica hè a basa di dati per riplicà. registration.url permette à l'ospite vm2 di cuntattà l'ospite vm1 è uttene dettagli di cunfigurazione da ellu.

$> cat engines/store-001.properties
engine.name=store-001
db.driver=org.postgresql.Driver
db.url=jdbc:postgresql://192.168.1.112:5832/pgdb_replica
db.user=postgres
db.password=admin123
registration.url=http://192.168.1.107:31415/sync/corp-000
group.id=store
external.id=001

L'esempiu SymmetricDS cumpletu cuntene l'opzioni per stabilisce a replicazione bidirezionale trà dui servitori di basa di dati (dui nodi). I passi quì sottu sò realizati nantu à l'ospite vm1 (corp-000) chì creà un schema di mostra cù 4 tabelle. Allora eseguisce create-sym-tables cù u cumandamentu symadmin crea tabelle di repertoriu induve e regule è a direzzione di replicazione trà i nodi seranu guardati. Infine, i dati di mostra sò caricati in e tavule.

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

In l'esempiu, l'elementu è e tabelle item_selling_price sò automaticamente cunfigurati per riplicà da corp-000 à store-001, è e tavule di vendita (sale_transaction è sale_return_line_item) sò automaticamente cunfigurati per riplicà da store-001 à corp-000. Ora criemu un schema in a basa di dati PostgreSQL in host vm2 (store-001) per preparà per riceve dati da corp-000.

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

Assicuratevi di verificà chì a basa di dati MySQL nantu à vm1 hà tavule di mostra è una tabella di catalogu SymmetricDS. Nota chì e tavule di u sistema SymmetricDS (prefissate cù sym_) sò attualmente dispunibili solu nantu à u node corp-000, perchè hè quì chì eseguimu u cumandamentu create-sym-tables è gestionemu a replicazione. È in a basa di dati à u node store-001 ci saranu solu 4 esempi di tavule senza dati.

Tuttu. L'ambiente hè prontu per eseguisce i prucessi di u servitore sym nantu à i dui nodi cum'è mostratu quì sottu.

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

L'entrata di u logu sò mandati à u schedariu di log di fondo (symmetric.log) in u cartulare di log in u repertoriu induve SymmetricDS hè stallatu, è ancu à l'output standard. U servitore sym pò avà esse iniziatu nantu à u node store-001.

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

Se eseguite u prucessu di u servitore sym nantu à l'ospite vm2, creà ancu e tabelle di catalogu SymmetricDS in a basa di dati PostgreSQL. Se eseguite u prucessu di u servitore sym nantu à i dui nodi, coordinaranu l'un l'altru per riplicà e dati da corp-000 à store-001. Se dopu à uni pochi sicondi interroghemu tutte e 4 tavule nantu à i dui lati, videremu chì a replicazione hà successu. O pudete mandà u bootstrap à store-001 da corp-000 cù u cumandimu seguitu.

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

À questu puntu, un novu registru hè inseritu in a tabella di l'articuli in a basa di dati MySQL nantu à u node corp-000 (host: vm1) è pò esse verificatu per a replicazione à a basa di dati PostgreSQL in u node store-001 (host: vm2). Avemu vistu una operazione Pull per spustà dati da 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)

Per fà una operazione push per trasladà e dati da store-001 à corp-000, inserimu un registru in a tabella sale_transaction è verificate chì a replicazione hè stata cumpletata.

U risultatu.

Avemu vistu una cunfigurazione riescita di replicazione bidirezionale di e tavule di esempiu trà e basa di dati MySQL è PostgreSQL. Per stabilisce a replicazione per i novi tavulini d'utilizatori, fate i seguenti passi. Creemu a tavola t1 per esempiu è stabilisce e so regule di replicazione cum'è seguita. Allora avemu stabilitu solu replicazione da 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)

A cunfigurazione hè allora notificata di u cambiamentu di schema, vale à dì l'aghjunzione di una nova tavula, utilizendu u cumandamentu symadmin cù l'argumentu sync-triggers, chì recrea i triggers per currisponde à e definizioni di a tavola. Send-schema hè eseguitu per mandà cambiamenti di schema à store-001, è a tavola t1 hè replicata.

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

Vantaggi di SymmetricDS

Installazione è cunfigurazione faciule, cumprese un set di schedari prontu cù parametri per creà un schema cù trè o dui nodi.
Basi di dati multipiattaforma è indipendenza di a piattaforma, cumpresi servitori, laptops è dispositi mobili.
Replicate ogni basa di dati à qualsiasi altra basa di dati in u locu, in a WAN, o in u nuvulu.
Capacità di travaglià in modu ottimale cù un paru di basa di dati o parechji milla per una replicazione faciule.
Versione pagata cù GUI è supportu eccellente.

Svantaghji di SymmetricDS

Avete da definisce manualmente e regule è a direzzione di a replicazione nantu à a linea di cumanda via dichjarazioni SQL per carricà e tavule di catalogu, chì ponu esse inconvenienti.
A creazione di parechje tavule per a replicazione pò esse tediosa, salvu chì utilizate scripts per creà dichjarazioni SQL chì definiscenu e regule è a direzzione di replicazione.
Ci hè troppu infurmazione in i logs, è qualchì volta avete bisognu di pulizziari u schedariu di log per ùn piglià troppu spaziu.

Riassuntu di SymmetricDS

SymmetricDS permette di stabilisce una replicazione bidirezionale trà dui, trè, o ancu parechji mila nodi per riplicà è sincronizà i schedari. Hè un strumentu unicu chì eseguisce assai compiti da sè stessu, cum'è a ricuperazione automatica di dati dopu un longu downtime in un node, una cumunicazione sicura è efficae trà i nodi nantu à HTTPS, una gestione automatica di cunflittu basatu annantu à un inseme di regule, etc. SymmetricDS replicates. trà ogni basa di dati, dunque, pò esse usatu per una larga varietà di scenarii, cumprese migrazione, aghjurnamentu, distribuzione, filtrazione è trasfurmazioni di dati in e plataforme.

L'esempiu hè basatu annantu à l'ufficiale guida rapida da SymmetricDS. IN manuale d'usu Descrive in dettaglio i diversi cuncetti implicati in a creazione di replicazione cù SymmetricDS.

Source: www.habr.com

Add a comment