
Do t'ju jap një përshkrim të shkurtër rreth replikimit të kryqëzuar midis PostgreSQL dhe MySQL, si dhe metodave për të konfiguruar replikimin e kryqëzuar midis këtyre dy serverëve të bazës së të dhënave. Në përgjithësi, bazat e të dhënave në replikimin e kryqëzuar quhen homogjene, dhe kjo është një metodë e përshtatshme për të kaluar nga një server i sistemit të menaxhimit të të dhënave relacione në një tjetër.
Baza të dhënash PostgreSQL dhe MySQL zakonisht merren si relacionale, por me zgjerime të tjera ato ofrojnë mundësi NoSQL. Këtu do të diskutojmë për replikimin midis PostgreSQL dhe MySQL, nga perspektiva e sistemetve të menaxhimit të të dhënave relacione.
Nuk do të përshkruajmë të gjithë metodologjinë e brendshme, por vetëm parimet bazë, për të marrë një ide rreth konfigurimit të replikimit midis serverëve të bazave të të dhënave, avantazhet, kufizimet dhe skenarët e përdorimit.
Zakonisht, replikimi midis dy serverëve identikë të bazës së të dhënave realizohet ose në modin binar, ose përmes kërkesave midis nodit kryesor (i njohur gjithashtu si botues, kryesor ose aktiv) dhe nodit ndihmës (abonues, pritës ose pasiv). Qëllimi i replikimit është të ofrojë një kopje në kohë reale të bazës kryesore të të dhënave në anën e nodit ndihmës. Në këtë rast, të dhënat transmetohen nga nodi kryesor te ai ndihmës, domethënë nga aktiv në pasiv, sepse replikimi realizohet vetëm në një drejtim. Por, është e mundur të konfigurohet replikimi midis dy bazave të të dhënave në të dy drejtimet, duke lejuar që të dhënat të transmetohen nga nodi ndihmës te nodi kryesor në një konfigurim "aktiv-aktiv". Të gjitha këto, përfshirë replikimin kaskadë, janë të mundshme midis dy ose më shumë serverëve identikë të bazës së të dhënave. Konfigurimi "aktiv-aktiv" ose "aktiv-pasiv" varet nga nevojat, disponueshmëria e këtyre mundësive në konfigurimin burimor ose përdorimi i zgjidhjeve të jashtme për konfigurimin dhe kompromiset ekzistuese.
Konfigurimi i përshkruar është i mundshëm midis serverëve të ndryshëm të bazës së të dhënave. Një server mund të konfigurohet për të pranuar të dhëna të riprodukuara nga një server tjetër i bazës së të dhënave dhe njëkohësisht të ruajë skenat e të dhënave të riprodukuara në kohë reale. MySQL dhe PostgreSQL ofrojnë shumicën e këtyre konfigurimeve përmes mjeteve të tyre ose me ndihmën e zgjerimeve nga palët e treta, përfshirë metodat e regjistrit binar, bllokimit të disqeve dhe metodat e bazuara në operatorë dhe rreshta.
Replikimi i ndërmjetëm midis MySQL dhe PostgreSQL nevojitet për migruar një herë nga një server i bazës së të dhënave në një tjetër. Këto baza të të dhënave përdorin protokolle të ndryshme, prandaj nuk është e mundur t'i lidhni ato drejtpërdrejt. Në mënyrë për të krijuar shkëmbimin e të dhënave, mund të përdorni një mjet të hapur, për shembull pg_chameleon.
ĂfarĂ« Ă«shtĂ« pg_chameleon
pg_chameleon është një sistem replikimi nga MySQL në PostgreSQL i ndërtuar në Python 3. Përdor bibliotekën e hapur mysql-replication, gjithashtu në Python. Rreshtat e të dhënave nxirren nga tabelat MySQL dhe ruajten si objekte JSONB në databazën PostgreSQL, e më pas deshifrohen nga funksioni pl/pgsql dhe riprodhohen në databazën PostgreSQL.
Aftësitë e pg_chameleon
Mund të replikoni disa skema MySQL nga një grup në një databazë të vetme PostgreSQL me konfigurimin 'një në shumë'
Emrat e skemave burimore dhe të synimeve nuk mund të përputhen.
Të dhënat e replikimit mund të nxirren nga një replikë kaskadë MySQL.
Tabelat që nuk mund të replikohen ose që shkaktojnë gabime përjashtohen.
Ădo funksion replikimi kontrollohet nga demonĂ«t.
Kontrolli me anë të parametrave dhe skedarëve të konfigurimit në bazë YAML.
Shembulli
Host
vm1
vm2
Versioni i OS
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64
Versioni i serverit të B.D.
MySQL 5.7.26
PostgreSQL 10.5
Porti i B.D.
3306
5433
Adresa IP
192.168.56.102
192.168.56.106
Së pari përgatitni të gjitha komponentët e nevojshëm për instalimin e pg_chameleon. Në këtë shembull është instaluar Python 3.6.8, e cila krijon një ambient virtual dhe e aktivizon atë.
$> 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 altinstallPas instalimit të suksesshëm të Python 3.6 duhet të përmbushen kërkesat e tjera, siç është krijimi dhe aktivizimi i ambientit virtual. Po ashtu, moduli pip përmirësohet në versionin e fundit dhe përdoret për instalimin e pg_chameleon. Në komandat më poshtë qëllimisht instalohet pg_chameleon 2.0.9, edhe pse versioni i fundit është 2.0.10. Kjo bëhet për të shmangur gabimet e reja në versionin e azhurnuar.
$> python3.6 -m venv venv
$> source venv/bin/activate
(venv) $> pip install pip --upgrade
(venv) $> pip install pg_chameleon==2.0.9Pastaj thërrasim pg_chameleon (chameleon është komanda) me argumentin set_configuration_files, për të aktivizuar pg_chameleon dhe për të krijuar katalogët dhe skedarët e konfigurimit nga pikëpamja e default-it.
(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/
coping configuration example in /root/.pg_chameleon/configuration//config-example.ymlTani tani po e krijojmë një kopje të config-example.yml si default.yml, në mënyrë që të bëhet skedari i konfigurimit të parazgjedhur. Një mostër e skedarit të konfigurimit për këtë shembull është dhënë më poshtë.
$> cat default.yml
---
#vendosjet globale
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 lejon përdoruesin të anashkalojë konvertimin e parazgjedhur të tipit në një tjetër.
type_override:
"tinyint(1)":
override_to: boolean
override_tables:
- "*"
# lidhja e destinacionit postgres
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 ditë'
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 #anashkalon futjet në tabelën delphis_mediterranea.foo
delete:
- delphis_mediterranea #anashkalon fshirjet në skemën delphis_mediterranea
update:Skedari i konfigurimit në këtë shembull është një mostër e skedarit me pg_chameleon me ndryshime të vogla sipas mjeteve burimore dhe të synuara, dhe më poshtë është një përmbledhje e seksioneve të ndryshme të skedarit të konfigurimit.
Në skedarin e konfigurimit default.yml ka një seksion për vendosjet globale (global settings), ku mund të menaxhoni cilësime të tilla si vendndodhja e skedarit të bllokimit, vendndodhja e logëve, periudha e ruajtjes së logëve etj. Më pas vjen seksioni për anashkalimin e tipeve (type override), ku specifikohen një sërë rregullash për të anashkaluar tipet gjatë replikimit. Në shembullin e parazgjedhur përdoret rregulli i anashkalimit të tipi që konverton tinyint(1) në një vlerë logjike. Në seksionin e ardhshëm hapim detajet e lidhjes me bazën e të dhënave të synuar. Në rastin tonë kjo është baza e të dhënave PostgreSQL, e quajtur pg_conn. Në seksionin e fundit specifikojmë të dhënat e burimit, pra parametrat e lidhjes për bazën e të dhënave burimore, hartimin e skemave të bazave të të dhënave burimore dhe të synuara, tabelat që duhet të anashkalohen, koha e pritjes, memorja, madhësia e grumbullit. Vini re se "sources" është e specifikuar në shumës, dmth ne mund të shtojmë disa baza të të dhënave burimore për një të vetme, për të konfiguruar një konfigurim "shumë në një".
Database world_x in the example contains 4 tables with rows that the MySQL community offers as a sample. It can be downloaded . The sample database comes as a tar file and a compressed archive with instructions for creating and importing the rows.
In MySQL and PostgreSQL databases, a special user with the same name usr_replica is created. In MySQL, it is granted additional rights to read all replicated tables.
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;On the PostgreSQL side, a database db_replica is created, which will accept changes from the MySQL database. The user usr_replica in PostgreSQL is automatically configured as the owner of the two schemas pgworld_x and sch_chameleon, which contain the actual replicated tables and the replication catalog tables, respectively. The automatic configuration is handled by the create_replica_schema argument, as you will see below.
postgres=# CREATE USER usr_replica WITH PASSWORD 'pass123';
CREATE ROLE
postgres=# CREATE DATABASE db_replica WITH OWNER usr_replica;
CREATE DATABASEThe MySQL database is configured with some parameter changes to prepare it for replication, as shown below. The database server will need to be restarted for the changes to take effect.
$> vi /etc/my.cnf
binlog_format= ROW
binlog_row_image=FULL
log-bin = mysql-bin
server-id = 1It is now important to check the connection to both database servers to avoid issues when executing pg_chameleon commands.
On the PostgreSQL node:
$> mysql -u usr_replica -Ap'admin123' -h 192.168.56.102 -D world_xOn the MySQL node:
$> psql -p 5433 -U usr_replica -h 192.168.56.106 db_replicaThe following three pg_chameleon commands (chameleon) prepare the environment, add the source, and initialize the replica. The create_replica_schema argument in pg_chameleon creates the default schema (sch_chameleon) and the replication schema (pgworld_x) in the PostgreSQL database, as we mentioned. The add_source argument adds the source database to the configuration by reading the configuration file (default.yml), and in our case, this is mysql, and init_replica initializes the configuration based on the parameters in the configuration file.
$> chameleon create_replica_schema --debug
$> chameleon add_source --config default --source mysql --debug
$> chameleon init_replica --config default --source mysql --debugDaljet e këtyre tre komandave qartë tregojnë kryerjen e suksesshme të tyre. Të gjitha dështimet ose gabimet sintaksore shfaqen në mesazhe të thjeshta dhe kuptimplota me tregues për rregullimin e problemeve.
Më në fund, do ta fillojmë replikimin duke përdorur start_replica dhe do të marrim një mesazh për përfundimin e suksesshëm.
$> chameleon start_replica --config default --source mysql
output: Duke filluar procesin e replikës për burimin mysqlStatusi i replikimit mund të kërkohet me argëmentin show_status, ndërsa gabimet mund të shihen duke përdorur argëmentin show_errors.
Siç e thamë më parë, çdo funksion replikimi menaxhohet nga demonët. Për të parë ata, do ta kërkojmë tabelën e proceseve me komandën Linux ps, siç është e treguar më poshtë.
Replikimi nuk konsiderohet se Ă«shtĂ« konfiguruar deri sa ta testojmĂ« nĂ« kohĂ« reale, siç Ă«shtĂ« treguar mĂ« poshtĂ«. Ne krijojmĂ« njĂ« tabelĂ«, futim disa regjistrime nĂ« bazĂ«n e tĂ« dhĂ«nave MySQL dhe thĂ«rrasim argĂŒmentin sync_tables nĂ« pg_chameleon pĂ«r tĂ« pĂ«rditĂ«suar demonĂ«t dhe pĂ«r tĂ« replikuar tabelĂ«n me regjistrimet nĂ« bazĂ«n e tĂ« dhĂ«nave 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
Procesi i sinkronizimit të tabelave për burimin mysql ka filluar.Për të konfirmuar rezultate të provës, kërkojmë tabelën nga baza e të dhënave PostgreSQL dhe nxjerrim rreshtat.
$> psql -p 5433 -U usr_replica -d db_replica -c "select * from pgworld_x.t1";
n1 | n2
----+-------
1 | one
2 | twoNëse po kryejmë migrimin, komandat e ardhshme të pg_chameleon do ta mbyllin atë. Komandat duhet të ekzekutohen pasi të jemi të sigurt që rreshtat e të gjitha tabelave të qëllimit janë replikuar dhe rezultati do të jetë një bazë e dhënash PostgreSQL e transferuar në mënyrë të saktë pa lidhje me bazën e të dhënave origjinale ose skemën e replikimit (sch_chameleon).
$> chameleon stop_replica --config default --source mysql
$> chameleon detach_replica --config default --source mysql --debugMe dëshirë, komandat e mëposhtme mund të përdoren për të fshirë konfigurimin për burimin dhe skemën e replikimit.
$> chameleon drop_source --config default --source mysql --debug
$> chameleon drop_replica_schema --config default --source mysql --debugPërfitimet e pg_chameleon
Konfigurim dhe vendosje të thjeshta.
Diagnoza e lehtë dhe identifikimi i anomalisë me mesazhe të qarta gabimi.
Tabela të tjera speciale mund të shtohen në replikim pas fillimit, pa ndryshuar konfigurimin e mbetur.
ĂshtĂ« e mundur tĂ« konfigurohen disa burime tĂ« bazĂ«s sĂ« tĂ« dhĂ«nave pĂ«r njĂ« destinacion, dhe kjo Ă«shtĂ« shumĂ« e pĂ«rshtatshme nĂ«se po bashkoni tĂ« dhĂ«na nga njĂ« ose mĂ« shumĂ« baza tĂ« dhĂ«nash MySQL nĂ« njĂ« bazĂ« tĂ« dhĂ«nash PostgreSQL.
Mund të mos replikoni tabelat e zgjedhura.
Disavantazhet e pg_chameleon
Përkrahja ofrohet vetëm për MySQL 5.5 e lart si burim dhe PostgreSQL 9.5 e lart si bazë të dhënash destinacion.
Ădo tabelĂ« duhet tĂ« ketĂ« njĂ« çelĂ«s primar ose unik, pĂ«rndryshe tabelat inicializohen gjatĂ« procesit init_replica, por nuk replikohen.
Replikimi njĂ«drejtimor â vetĂ«m nga MySQL nĂ« PostgreSQL. Prandaj, Ă«shtĂ« i pĂ«rshtatshĂ«m vetĂ«m pĂ«r skemĂ«n "aktiv-passiv".
Burimi mund të jetë vetëm një bazë të dhënash MySQL, ndërsa mbështetje për bazën e të dhënave PostgreSQL si burim është vetëm experimental dhe me kufizime (merrni informacion më shumë) )
Përfundimet për pg_chameleon
Metoda e replikimit nĂ« pg_chameleon Ă«shtĂ« shumĂ« e pĂ«rshtatshme pĂ«r migrimin e bazĂ«s sĂ« tĂ« dhĂ«nave nga MySQL nĂ« PostgreSQL. NjĂ« disavantazh i dukshĂ«m Ă«shtĂ« se replikimi Ă«shtĂ« vetĂ«m njĂ«drejtimor, prandaj specialistĂ«t e bazave tĂ« dhĂ«nash nuk do tĂ« dĂ«shirojnĂ« ta pĂ«rdorin atĂ« pĂ«r ndonjĂ« gjĂ« tjetĂ«r pĂ«rveç migrimit. Por problemi i replikimit njĂ«drejtimor mund tĂ« zgjidhĂ«t me njĂ« mjet tjetĂ«r me burim tĂ« hapur â SymmetricDS.
Lexoni më shumë në dokumentacionin zyrtar . Informacionin për komandën e linjës mund ta gjeni .
Përmbledhja e SymmetricDS
SymmetricDS është një mjet me burim të hapur që replikon çdo bazë të dhënash në çdo bazë të njohur të dhënash të tjera: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird dhe instance të tjera të bazës së dhënash në cloud, si Redshift, dhe Azure etj. Funksionet e disponueshme: sinkronizimi i bazave të dhënash dhe skedareve, replikimi i disa bazave të dhënash kryesore, sinkronizimi i filtruar, transformimi dhe të tjera. Ky është një mjet në Java dhe kërkon një version standard të JRE ose JDK (versionet 8.0 e lart). Këtu mund të regjistroni ndryshimet e të dhënave me anë të triggereve në burimin e bazës së të dhënave dhe t'i drejtoni ato në bazën e dhënash përkatëse si paketa.
Mundësitë e SymmetricDS
Mjeti nuk varet nga platforma, dmth dy ose më shumë baza të ndryshme të dhënash mund të ndajnë të dhëna.
Baza të dhënash relacionalet sinkronizohen përmes regjistrimit të ndryshimeve të të dhënave, ndërsa bazat e dhënash të bazuara në sisteme skedari përdorin sinkronizimin e skedareve.
Replikimi dyanshëm duke përdorur metodat Push dhe Pull mbi bazën e një grupi rregullash.
Transferimi i të dhënave është i mundur përmes rrjeteve të mbrojtura dhe rrjeteve me kapacitet të ulët kalimi.
Rindërtimi automatik kur rinisja e nyjave pas një dështimi dhe zgjidhja automatik e konflikteve.
Përputhshmëria me cloud dhe API-të e efikase të zgjerimit.
Shembulli
SymmetricDS mund të konfigurohet në një nga dy variante:
Një nyje kryesore (prind) e cila koordinon në mënyrë centralizuar replikimin e të dhënave midis dy nyjave nënordhëruese (fëmijë), dhe shkëmbimi i të dhënave midis nyjave fëmijë bëhet vetëm përmes prindit.
Një nyje aktive (nyja 1) mund të shkëmbejë të dhëna për replikim me një nyje tjetër aktive (nyja 2) pa ndërmjetës.
Në të dy variantet, shkëmbimi i të dhënave ndodh përmes Push dhe Pull. Në këtë shembull do të shqyrtojmë konfigurimin 'aktiv-aktiv'. Të përshkruash tërë arkitekturën është shumë e gjatë, kështu që studio , për të mësuar më shumë rreth pajisjes SymmetricDS.
Instalimi i SymmetricDS është shumë i thjeshtë: shkarkoni versionin open-source të skedarit zip dhe nxirrni atë, kudo që dëshiron. Tabela më poshtë jep informacion mbi vendin e instalimit dhe versionin e SymmetricDS në këtë shembull, si dhe versionet e bazave të të dhënave, versionet e Linux, adresat IP dhe portet për të dy nyjat.
Host
vm1
vm2
Versioni i OS
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64
Versioni i serverit të B.D.
MySQL 5.7.26
PostgreSQL 10.5
Porti i B.D.
3306
5832
Adresa IP
192.168.1.107
192.168.1.112
Versioni i SymmetricDS
SymmetricDS 3.9
SymmetricDS 3.9
Rruga e instalimit të SymmetricDS
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20
Emri i nyjës së SymmetricDS
corp-000
store-001
Këtu po instalojmë SymmetricDS në /usr/local/symmetric-server-3.9.20, dhe këtu do të ruhet një gamë e ndryshme e katalogëve dhe skedarëve të ndryshëm. Na interesojnë katalogët e brendshëm samples dhe engines. Në katalogun samples janë skedarët e konfigurimit me cilësitë e nyjës, si dhe shembujt e skenarëve SQL për fillimin e shpejtë të demonstrimit.
Në katalogun samples shohim tre skedarë konfigurimi me cilësitë e nyjës - emri tregon natyrën e nyjës në një skemë të caktuar.
corp-000.properties
store-001.properties
store-002.propertiesNë SymmetricDS ka të gjitha skedarët e nevojshëm të konfigurimit për një skemë themelore me 3 nyje (varianti 1), dhe të njëjtit skedarë mund të përdoren për një skemë me 2 nyje (varianti 2). Kopjojmë skedarin e nevojshëm të konfigurimit nga katalogu samples në engines në hostin vm1. Ky është rezultati:
$> 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=000Ky kyç në konfigurimin e SymmetricDS quhet corp-000, ndërsa lidhja me bazën e të dhënave përpunohen nga piloti mysql jdbc, i cili përdor stringun e lidhjes të specifikuar më lart dhe akreditimet për hyrje. Ne lidhemi me bazën e të dhënave replica_db, dhe gjatë krijimit të skemës do të krijohen tabelat. sync.url tregon vendin e ndërlidhjes me nyjën për sinkronizim.
Nyja 2 në hostin vm2 konfigurohet si store-001, dhe e gjithë e tjera është e specifikuar në skedarin node.properties, i cili jepet më poshtë. Nyja store-001 ekzekuton bazën e të dhënave PostgreSQL, ndërsa pgdb_replica është baza e të dhënave për replikim. registration.url lejon hostin vm2 të lidhet me hostin vm1 dhe të marrë nga ai detajet e konfigurimit.
$> 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=001Një shembull i gatshëm i SymmetricDS përmban parametra për konfigurimin e replikimit dyanshëm midis dy serverëve të bazës së të dhënave (dy nyjave). Hapat e mëposhtëm ekzekutohen në hostin vm1 (corp-000), i cili do të krijojë një shembull skemë me 4 tabela. Më pas, ekzekutimi i create-sym-tables me komandën symadmin krijon tabelat e katalogëve, ku do të ruhen rregullat dhe drejtimi i replikimit midis nyjave. Së fundi, të dhëna shembuj ngarkohen në tabelat.
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.sqlNë this shembull, tabelat item dhe item_selling_price janë konfigurur automatikisht për replikim nga corp-000 në store-001, dhe tabelat sale (sale_transaction dhe sale_return_line_item) janë konfigurur automatikisht për replikim nga store-001 në corp-000. Tani krijojmë skemën në bazën e të dhënave PostgreSQL në hostin vm2 (store-001), për ta përgatitur për pranimin e të dhënave nga corp-000.
vm2$> cd /usr/local/symmetric-server-3.9.20/bin
vm2$> ./dbimport --engine store-001 --format XML create_sample.xmlSigurohuni të kontrolloni që në bazën e të dhënave MySQL në vm1 ka tabela shembuj dhe tabelat e katalogëve të SymmetricDS. Vini re se tabelat sistemike të SymmetricDS (me prefiksin sym_) tani janë të disponueshëm vetëm në nyjën corp-000, sepse atje ekzekutuam komandën create-sym-tables dhe do të administrojmë replikimin. Për më tepër, në bazën e të dhënave në nyjën store-001 do të ketë vetëm 4 tabela shembuj pa të dhëna.
Të gjitha. Mjedisi është i gatshëm për të nisur proceset e serverit sym në të dy nyjat, siç tregohet më poshtë.
vm1$> cd /usr/local/symmetric-server-3.9.20/bin
vm1$> sym 2>&1 &Regjistrimet e logeve dërgohen në skedarin e logut të prapavijës (symmetric.log) në dosjen e logeve në katalogun ku është instaluar SymmetricDS, si dhe në daljet standarde. Serveri sym tani mund të inicializohet në nyjën store-001.
vm2$> cd /usr/local/symmetric-server-3.9.20/bin
vm2$> sym 2>&1 &Nëse filloni procesin server sym në hostin vm2, ai do të krijojë tabela katalogu SymmetricDS gjithashtu në bazën e të dhënave PostgreSQL. Nëse filloni procesin server sym në të dy nyjat, ato do të koordinohen me njëri-tjetrin për të replikuar të dhënat nga corp-000 në store-001. Nëse pas pak sekondash kërkojmë të gjitha 4 tabelat në të dy anët, do të shohim se replikimi është realizuar me sukses. Ose mund të dërgojmë një ngarkesë fillestare në nyjën store-001 nga corp-000 me komandën e mëposhtme.
vm1$> ./symadmin --engine corp-000 reload-node 001Në këtë pikë, në tabelën item në bazën e të dhënave MySQL në nyjën corp-000 (host: vm1) shtohet një regjistrim i ri, dhe mund të kontrollojmë replikimin e saj në bazën e të dhënave PostgreSQL në nyjën store-001. Ne shohim një operacion Pull për të transferuar të dhënat nga corp-000 në 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)Për të realizuar operacionin Push për të transferuar të dhënat nga store-001 në corp-000, shtojmë një regjistrim në tabelën sale_transaction dhe kontrollojmë që replikimi është realizuar.
Ne shohim një konfigurim të suksesshëm të replikimit dyanshëm të tabelave mes bazave të të dhënave MySQL dhe PostgreSQL. Për të konfiguruar replikimin për tabelat e reja përdoruese, kryejmë hapat e mëposhtëm. Krijojmë tabelën t1 për shembull dhe konfigurojmë rregullat e saj të replikimit si më poshtë. Kështu ne vendosim vetëm replikimin nga corp-000 në 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)Pastaj konfigurimi merr një njoftim për ndryshimin e skemës, domethënë shtimin e një tabele të re, me komandën symadmin me argumentin sync-triggers, i cili ripërdor tri tragjeditë për të ndërlidhur përkufizimet e tabelave. Ekzekutohet send-schema për të dërguar ndryshimet e skemës në nyjën store-001, dhe replikimi i tabelës t1 është i konfiguruar.
vm1$> .\/symadmin -e corp-000 --node=001 sync-triggers
vm1$> .\/symadmin send-schema -e corp-000 --node=001 t1Avantazhet e SymmetricDS
Instalimi dhe konfigurimi i thjeshtë, duke përfshirë një grup të gatshëm skedash me parametra për krijimin e skemës me tri ose dy nyje.
Kros-platformës për bazat e të dhënave dhe pavarësia nga platforma, duke përfshirë serverët, laptopët dhe pajisjet mobile.
Replikimi i çdo baze të dhënash në çdo bazë të dhënash, lokal, në WAN ose në cloud.
Aftësia për të punuar optimalisht me një çift bazash të dhënash ose me disa mijëra për replikim të lehtë.
Versioni me pagesë me një ndërfaqe grafike dhe mbështetje të shkëlqyer.
Disavantazhet e SymmetricDS
Duhet të përcaktohen manualisht në komandën e linjës rregullat dhe drejtimi i replikimit përmes operatorëve SQL për të ngarkuar tabelat e katalogëve, që ndonjëherë është e padëshirueshme.
Të konfigurosh shumë tabela për replikim është e lodhshme, nëse nuk përdoren skriptet për krijimin e operatorëve SQL, të cilët përcaktojnë rregullat dhe drejtimin e replikimit.
Në log shkruhen shumë informacione dhe ndonjëherë është e nevojshme të rregullohet dosja e logut që të mos zë shumë hapësirë.
Përmbledhje për SymmetricDS
SymmetricDS lejon konfigurimin e replikimit dyanshëm midis dy, tre dhe madje disa mijëra nyjesh, për të realizuar replikimin dhe sinkronizimin e skedave. Ky është një mjet unik që kryen vetë shumë detyra, për shembull rikuperimin automatik të të dhënave pas një pushimi të gjatë në nyje, shkëmbimi të dhënash të sigurt dhe efikas midis nyjash përmes HTTPS, menaxhimi automatik i konflikteve mbi një grup rregullash etj. SymmetricDS realizon replikimin midis çdo baze të dhënash, prandaj mund të përdoret për skenarë të ndryshëm, duke përfshirë migrimin, kalimin në versionin e ri, shpërndarjen, filtrimin dhe transformimin e të dhënave në platforma të ndryshme.
Shembulli është krijuar mbi bazën e zyrtar për SymmetricDS. Në përshkruhen në detaje konceptet e ndryshme që lidhen me konfigurimin e replikimit duke përdorur SymmetricDS.
Burimi: habr.com
