Agbelebu atunṣe laarin PostgreSQL ati MySQL

Agbelebu atunṣe laarin PostgreSQL ati MySQL

Emi yoo ṣe ilana isọdọtun-agbelebu laarin PostgreSQL ati MySQL, ati awọn ọna fun ṣiṣeto atunwi agbelebu laarin awọn olupin data meji. Ni deede, awọn apoti isura infomesonu ti a ṣe atunṣe ni a pe ni isokan, ati pe o jẹ ọna irọrun ti gbigbe lati olupin RDBMS kan si omiiran.

PostgreSQL ati awọn apoti isura infomesonu MySQL ni gbogbogbo ni a ka si ibatan, ṣugbọn pẹlu awọn amugbooro afikun wọn funni ni awọn agbara NoSQL. Nibi a yoo jiroro ẹda laarin PostgreSQL ati MySQL lati irisi DBMS ibatan.

A kii yoo ṣe apejuwe gbogbo awọn iṣẹ inu, o kan awọn ipilẹ ipilẹ ki o ni imọran ti atunto atunto laarin awọn olupin data, awọn anfani, awọn idiwọn ati awọn ọran lilo.

Ni deede, ẹda laarin awọn olupin data kanna meji ni a ṣe boya ni ipo alakomeji tabi lilo awọn ibeere laarin oluwa kan (aka akede, oluwa, tabi alaṣiṣẹ) ati ẹrú (alabapin, imurasilẹ, tabi palolo). Idi ti atunkọ ni lati pese ẹda gidi-akoko ti data data titunto si ni ẹgbẹ ẹrú. Ni idi eyi, data ti wa ni gbigbe lati oluwa si ẹrú, eyini ni, lati ṣiṣẹ si palolo, nitori pe a ṣe atunṣe nikan ni itọsọna kan. Ṣugbọn o le ṣeto atunṣe laarin awọn apoti isura infomesonu meji ni awọn itọnisọna mejeeji, ki a gbe data lati ọdọ ẹrú si titunto si ni iṣeto ti nṣiṣe lọwọ. Gbogbo eyi, pẹlu isọdọtun cascading, ṣee ṣe laarin meji tabi diẹ ẹ sii aami olupin data ti nṣiṣe lọwọ tabi ti nṣiṣe lọwọ-palolo da lori iwulo, wiwa ti iru awọn agbara ni iṣeto ni ibẹrẹ tabi lilo awọn ojutu iṣeto ni ita ati awọn pipaṣẹ iṣowo.

Iṣeto ni apejuwe jẹ ṣee ṣe laarin o yatọ si database apèsè. A le tunto olupin naa lati gba data ti a tunṣe lati ọdọ olupin data miiran ati pe o tun ṣetọju awọn aworan akoko gidi ti data ti o tun ṣe. MySQL ati PostgreSQL nfunni pupọ julọ awọn atunto wọnyi ni ile tabi nipasẹ awọn amugbooro ẹni-kẹta, pẹlu awọn ọna log alakomeji, titiipa disk, ati alaye- ati awọn ọna orisun-ila.

Agbekọja laarin MySQL ati PostgreSQL ni a nilo fun iṣilọ akoko kan lati ọdọ olupin data kan si omiiran. Awọn apoti isura infomesonu wọnyi lo awọn ilana oriṣiriṣi, nitorinaa ko ṣee ṣe lati sopọ wọn taara. Lati ṣeto paṣipaarọ data, o le lo ohun elo orisun ṣiṣi ita, fun apẹẹrẹ pg_chameleon.

Kini pg_chameleon

pg_chameleon jẹ eto isọdọtun lati MySQL si PostgreSQL ni Python 3. O nlo ile-ikawe mysql-replication ti ṣiṣi, paapaa ni Python. Awọn aworan ila ni a yọ jade lati awọn tabili MySQL ati ti o fipamọ bi awọn nkan JSONB ni ibi ipamọ data PostgreSQL, ati lẹhinna decrypted nipasẹ iṣẹ pl/pgsql ati tun ṣe ni ibi ipamọ data PostgreSQL.

Awọn ẹya ara ẹrọ ti pg_chameleon

Awọn eto MySQL lọpọlọpọ lati iṣupọ kanna ni a le tun ṣe si ibi-ipamọ ibi-ipamọ PostgreSQL kan ni ọkan-si-ọpọlọpọ iṣeto
Awọn orukọ orisun ati ibi-afẹde ko le jẹ kanna.
Awọn data atunkọ le ṣe gba pada lati inu ẹda MySQL ti a ti tu silẹ.
Awọn tabili ti ko le ṣe ẹda tabi gbe awọn aṣiṣe jade ni a yọkuro.
Iṣẹ atunkọ kọọkan jẹ iṣakoso nipasẹ awọn daemons.
Iṣakoso nipasẹ YAML-orisun paramita ati iṣeto ni awọn faili.

Apeere:

Gbalejo
Odun 1
Odun 2

Ẹya OS
CentOS Lainos 7.6 x86_64
CentOS Lainos 7.5 x86_64

DB server version
MySQL 5.7.26
PostgreSQL 10.5

DB ibudo
3306
5433

Adirẹsi IP
192.168.56.102
192.168.56.106

Lati bẹrẹ, mura gbogbo awọn paati pataki lati fi pg_chameleon sori ẹrọ. Apẹẹrẹ yii fi Python 3.6.8 sori ẹrọ, eyiti o ṣẹda ati mu agbegbe foju ṣiṣẹ.

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

Lẹhin fifi sori ẹrọ Python3.6 ni aṣeyọri, o nilo lati pari awọn ibeere to ku, bii ṣiṣẹda ati ṣiṣiṣẹ agbegbe foju kan. Ni afikun, module pip ti ni imudojuiwọn si ẹya tuntun ati lo lati fi pg_chameleon sori ẹrọ. Awọn ofin ni isalẹ imomose fi sori ẹrọ pg_chameleon 2.0.9, biotilejepe awọn titun ti ikede jẹ 2.0.10. Eyi jẹ pataki lati yago fun awọn idun titun ninu ẹya imudojuiwọn.

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

Lẹhinna a pe pg_chameleon (chameleon jẹ aṣẹ) pẹlu ariyanjiyan set_configuration_files lati mu pg_chameleon ṣiṣẹ ati ṣẹda awọn ilana aiyipada ati awọn faili atunto.

(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

Bayi a ṣẹda ẹda kan ti config-example.yml bi default.yml ki o di faili iṣeto ni aiyipada. Faili iṣeto ni apẹẹrẹ fun apẹẹrẹ yii ni a pese ni isalẹ.

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

Faili iṣeto ni apẹẹrẹ yii jẹ apẹẹrẹ pg_chameleon pẹlu awọn iyipada kekere lati baamu orisun ati awọn agbegbe ibi-afẹde, ati ni isalẹ jẹ awotẹlẹ ti awọn oriṣiriṣi awọn apakan ti faili iṣeto.

Ninu faili iṣeto ni default.yml o wa apakan kan ti awọn eto agbaye, nibi ti o ti le ṣakoso awọn eto gẹgẹbi ipo ti faili titiipa, ipo ti awọn akọọlẹ, akoko ipamọ fun awọn akọọlẹ, bbl Nigbamii ti o wa ni iru-apakan iru, nibiti ṣeto awọn ofin fun awọn iru ti o bori nigba ẹda. Apeere naa ṣe aipe si iru ofin ti o dojukọ ti o ṣe iyipada tinyint(1) si iye boolean kan. Ni apakan ti o tẹle, a pato awọn alaye asopọ si ibi ipamọ data afojusun. Ninu ọran wa, eyi jẹ data data PostgreSQL, pg_conn ti a yan. Ni apakan ti o kẹhin, a tọka data orisun, iyẹn ni, awọn paramita asopọ ti aaye data orisun, ero maapu laarin orisun ati awọn apoti isura data ibi-afẹde, awọn tabili ti o nilo lati fo, akoko idaduro, iranti, iwọn package. Ṣe akiyesi pe “awọn orisun” jẹ ọpọ, afipamo pe a le ṣafikun ọpọlọpọ awọn apoti isura infomesonu orisun si ibi ipamọ data ibi-afẹde kan lati ṣeto iṣeto-ọpọlọpọ-si-ọkan.

Apeere database world_x ni awọn tabili 4 pẹlu awọn ori ila ti agbegbe MySQL nfunni gẹgẹbi apẹẹrẹ. O le ṣe igbasilẹ nibi. Ibi ipamọ data ayẹwo wa bi oda ati ibi ipamọ fisinuirindigbindigbin pẹlu awọn ilana fun ṣiṣẹda ati gbigbe awọn ori ila wọle.

Ninu MySQL ati awọn apoti isura data PostgreSQL, olumulo pataki kan ni a ṣẹda pẹlu orukọ kanna usr_replica. Ni MySQL, o ti fun ni afikun awọn ẹtọ kika si gbogbo awọn tabili ti a ṣe atunṣe.

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;

Ni ẹgbẹ PostgreSQL, data db_replica kan ti ṣẹda ti yoo gba awọn ayipada lati ibi ipamọ data MySQL. Olumulo usr_replica ni PostgreSQL ti wa ni tunto laifọwọyi bi eni to ni awọn eto meji, pgworld_x ati sch_chameleon, eyiti o ni awọn tabili atunṣe gangan ati awọn tabili itọsọna ẹda, ni atele. Awọn ariyanjiyan create_replica_schema jẹ iduro fun iṣeto ni aifọwọyi, bi iwọ yoo rii ni isalẹ.

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

A ṣe atunto aaye data MySQL pẹlu diẹ ninu awọn iyipada paramita lati murasilẹ fun ẹda bi a ṣe han ni isalẹ. Iwọ yoo nilo lati tun olupin data bẹrẹ fun awọn ayipada lati mu ipa.

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

Bayi o ṣe pataki lati ṣayẹwo asopọ si awọn olupin data mejeeji ki awọn iṣoro ko si nigbati o nṣiṣẹ awọn aṣẹ pg_chameleon.

Lori ipade PostgreSQL:

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

Lori ipade MySQL:

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

Awọn aṣẹ pg_chameleon (chameleon) mẹta to nbọ mura agbegbe naa, ṣafikun orisun, ki o ṣe ipilẹṣẹ ajọra naa. Awọn ariyanjiyan create_replica_schema si pg_chameleon ṣẹda eto aiyipada kan (sch_chameleon) ati ero atunwi kan (pgworld_x) ninu aaye data PostgreSQL, bi a ti jiroro tẹlẹ. Ariyanjiyan add_source ṣafikun aaye data orisun kan si iṣeto nipasẹ kika faili atunto (default.yml), ati ninu ọran wa o jẹ mysql, ati init_replica bẹrẹ iṣeto ni ipilẹ ti o da lori awọn ipilẹ ninu faili iṣeto.

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

Ijade ti awọn aṣẹ mẹtẹẹta wọnyi tọka ni kedere pe wọn ti ṣiṣẹ ni aṣeyọri. Eyikeyi awọn ipadanu tabi awọn aṣiṣe sintasi jẹ ijabọ ni irọrun, awọn ifiranṣẹ ti o han gbangba pẹlu awọn amọran lori bi o ṣe le ṣatunṣe iṣoro naa.

Nikẹhin, a bẹrẹ ẹda ni lilo start_replica ati gba ifiranṣẹ aṣeyọri kan.

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

Ipo isọdọtun le ṣe ibeere ni lilo ariyanjiyan show_status, ati pe awọn aṣiṣe le rii ni lilo ariyanjiyan show_errors.

Abajade.

Gẹgẹbi a ti sọ tẹlẹ, iṣẹ atunwi kọọkan jẹ iṣakoso nipasẹ awọn daemons. Lati wo wọn, a beere tabili ilana pẹlu aṣẹ Linux ps, bi a ṣe han ni isalẹ.

Abajade.

A ko ka atunwi ni atunto titi ti a fi ṣe idanwo ni akoko gidi, bi a ṣe han ni isalẹ. A ṣẹda tabili kan, fi awọn igbasilẹ meji sii sinu aaye data MySQL, ati pe ariyanjiyan sync_tables ni pg_chameleon lati ṣe imudojuiwọn awọn daemons ki o tun ṣe tabili pẹlu awọn igbasilẹ si ibi ipamọ data 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.

Lati jẹrisi awọn abajade idanwo, a beere tabili lati ibi ipamọ data PostgreSQL ati jade awọn ori ila naa.

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

Ti a ba n ṣe ijira, awọn aṣẹ pg_chameleon atẹle yoo jẹ opin rẹ. Awọn ofin nilo lati ṣiṣẹ lẹhin ti a ba ni idaniloju pe awọn ori ila ti gbogbo awọn tabili ibi-afẹde ti tun ṣe, ati pe abajade yoo jẹ ibi-ipamọ PostgreSQL ti o lọ daradara laisi awọn itọkasi si aaye data orisun tabi ero ẹda (sch_chameleon).

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

Ti o ba fẹ, o le lo awọn aṣẹ atẹle lati paarẹ iṣeto atilẹba ati ero ẹda.

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

Awọn anfani ti pg_chameleon

Easy setup ati iṣeto ni.
Ni irọrun yanju ati ṣe idanimọ awọn aiṣedeede pẹlu awọn ifiranṣẹ aṣiṣe ti ko o.
Awọn tabili pataki afikun ni a le ṣafikun si isọdọtun lẹhin ipilẹṣẹ laisi iyipada iyokù iṣeto naa.
O ṣee ṣe lati tunto awọn apoti isura infomesonu orisun pupọ fun ibi-ipamọ ibi-afẹde kan, ati pe eyi wulo pupọ ti o ba n ṣajọpọ data lati ọkan tabi diẹ sii awọn apoti isura infomesonu MySQL sinu aaye data PostgreSQL kan.
O ko ni lati tun awọn tabili ti o yan ṣe.

Awọn alailanfani ti pg_chameleon

Nikan ni atilẹyin pẹlu MySQL 5.5 ati loke bi orisun ati PostgreSQL 9.5 ati loke bi ibi ipamọ data ibi-afẹde.
Tabili kọọkan gbọdọ ni bọtini akọkọ tabi alailẹgbẹ, bibẹẹkọ awọn tabili ti wa ni ipilẹṣẹ lakoko ilana init_replica ṣugbọn kii ṣe atunṣe.
Atunṣe-ọna kan - nikan lati MySQL si PostgreSQL. Nitorina, o jẹ nikan dara fun awọn "lọwọ-palolo" Circuit.
Orisun le jẹ aaye data MySQL nikan, ati atilẹyin fun aaye data PostgreSQL gẹgẹbi orisun kan jẹ idanwo nikan ati pẹlu awọn idiwọn (kọ ẹkọ diẹ sii nibi)

Awọn abajade fun pg_chameleon

Ọna atunṣe ni pg_chameleon jẹ nla fun gbigbe data data lati MySQL si PostgreSQL. Ilọkuro pataki ni pe atunṣe jẹ ọna kan ṣoṣo, nitorinaa awọn alamọdaju data ko ṣeeṣe lati fẹ lati lo fun ohunkohun miiran ju ijira lọ. Ṣugbọn iṣoro ti ẹda-ọna kan ni a le yanju pẹlu irinṣẹ orisun ṣiṣi miiran - SymmetricDS.

Ka diẹ sii ninu iwe aṣẹ osise nibi. A le rii iranlọwọ laini aṣẹ nibi.

Akopọ ti SymmetricDS

SymmetricDS jẹ ohun elo orisun ṣiṣi ti o ṣe atunṣe eyikeyi data si eyikeyi ibi ipamọ data ti o wọpọ: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird ati awọn iṣẹlẹ data awọsanma miiran, fun apẹẹrẹ Redshift, ati Azure, bbl Eyi jẹ ohun elo Java ati pe o nilo itusilẹ boṣewa ti JRE tabi JDK (ẹya 8.0 tabi ga julọ). Nibi, awọn iyipada data si awọn okunfa ni orisun orisun data le ṣe igbasilẹ ati firanṣẹ si ibi ipamọ data ti o yẹ ni irisi awọn ipele.

SymmetricDS awọn ẹya ara ẹrọ

Awọn ọpa jẹ ominira Syeed, afipamo meji tabi diẹ ẹ sii ti o yatọ infomesonu le ṣe paṣipaarọ data.
Awọn apoti isura infomesonu ibatan jẹ mimuuṣiṣẹpọ nipa lilo awọn igbasilẹ iyipada data, lakoko ti awọn apoti isura data orisun-faili lo amuṣiṣẹpọ faili.
Atunṣe-ọna meji nipa lilo Titari ati awọn ọna Fa ti o da lori eto awọn ofin.
Gbigbe data ṣee ṣe lori aabo ati awọn nẹtiwọọki bandiwidi kekere.
Imularada aifọwọyi nigbati awọn apa tun bẹrẹ iṣẹ lẹhin ikuna ati ipinnu rogbodiyan aifọwọyi.
Ibaramu awọsanma ati awọn API itẹsiwaju ti o lagbara.

Apeere:

SymmetricDS le jẹ tunto ni ọkan ninu awọn ọna meji:
Ọga kan (obi) ipade ti o ṣe ipoidojuko isọdọtun data laarin awọn apa ẹrú meji (ọmọ), ati ibaraẹnisọrọ laarin awọn apa ọmọde waye nikan nipasẹ obi.
Ipade ti nṣiṣe lọwọ (Node 1) le ṣe ibaraẹnisọrọ fun isọdọtun pẹlu apa miiran ti nṣiṣe lọwọ (Node 2) laisi agbedemeji.

Ninu awọn aṣayan mejeeji, paṣipaarọ data waye nipa lilo Titari ati Fa. Ninu apẹẹrẹ yii a yoo gbero iṣeto ti nṣiṣe lọwọ. Yoo gba to gun ju lati ṣapejuwe gbogbo faaji, nitorinaa ṣe iwadii rẹ. isakosolati ni imọ siwaju sii nipa ẹrọ SymmetricDS.

Fifi SymmetricDS sori ẹrọ rọrun pupọ: ṣe igbasilẹ ẹya orisun ṣiṣi ti faili zip naa lati ibi ki o si mu u jade nibikibi ti o ba fẹ. Tabili ti o wa ni isalẹ n pese alaye nipa ipo fifi sori ẹrọ ati ẹya SymmetricDS ni apẹẹrẹ yii, bakanna bi awọn ẹya data data, awọn ẹya Linux, awọn adirẹsi IP, ati awọn ebute oko oju omi fun awọn apa mejeeji.

Gbalejo
Odun 1
Odun 2

Ẹya OS
CentOS Lainos 7.6 x86_64
CentOS Lainos 7.6 x86_64

DB server version
MySQL 5.7.26
PostgreSQL 10.5

DB ibudo
3306
5832

Adirẹsi IP
192.168.1.107
192.168.1.112

SymmetricDS version
SymmetricDS 3.9
SymmetricDS 3.9

SymmetricDS fifi sori ona
/usr/agbegbe/symmetric-server-3.9.20
/usr/agbegbe/symmetric-server-3.9.20

SymmetricDS ipade orukọ
ara-000
itaja-001

Nibi ti a fi sori ẹrọ SymmetricDS ni / usr/local/symmetric-server-3.9.20, ati awọn oriṣiriṣi awọn iwe-ipamọ ati awọn faili yoo wa ni ipamọ nibẹ. A nifẹ si awọn apẹẹrẹ ati awọn iwe-ipamọ awọn ẹrọ. Ilana awọn ayẹwo ni awọn faili iṣeto ni apẹẹrẹ pẹlu awọn ohun-ini ipade, bakanna bi apẹẹrẹ awọn iwe afọwọkọ SQL lati jẹ ki o bẹrẹ ni kiakia.

Ninu itọsọna awọn apẹẹrẹ a rii awọn faili atunto mẹta pẹlu awọn ohun-ini ipade - orukọ naa fihan iru ti ipade ni ero kan.

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

SymmetricDS ni o ni gbogbo awọn pataki iṣeto ni awọn faili fun a ipilẹ 3-ipade design (aṣayan 1), ati awọn kanna awọn faili le ṣee lo fun a 2-ipade design (aṣayan 2). Da faili iṣeto ti o nilo lati inu itọsọna awọn apẹẹrẹ si awọn ẹrọ lori agbalejo vm1. O wa jade bi eleyi:

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

Yi ipade ni SymmetricDS iṣeto ni ni a npe ni corp-000, ati awọn data asopọ ti wa ni lököökan nipasẹ mysql jdbc iwakọ, eyi ti o nlo okun asopọ loke ati awọn iwe eri wiwọle. A sopọ si ibi ipamọ data replica_db ati awọn tabili yoo ṣẹda lakoko ẹda ero. sync.url fihan ipo ti asopọ si ipade fun mimuuṣiṣẹpọ.

Node 2 lori ogun vm2 ti wa ni tunto bi itaja-001 ati awọn iyokù ti wa ni pato ninu node.properties faili ni isalẹ. Node store-001 nṣiṣẹ data PostgreSQL ati pgdb_replica jẹ ibi ipamọ data ẹda. registration.url ngbanilaaye vm2 alejo gbigba lati kan si vm1 alejo gbigba ati gba awọn alaye iṣeto ni lati ọdọ rẹ.

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

Apeere SymmetricDS ti o pari ni awọn ayeraye fun siseto atunwi ọna meji laarin awọn olupin data meji (awọn apa meji). Awọn igbesẹ ti o wa ni isalẹ ni a ṣe lori vm1 (corp-000), eyiti yoo ṣẹda apẹrẹ apẹẹrẹ pẹlu awọn tabili 4. Lẹhinna ṣiṣe awọn tabili-sym-sym-tabili pẹlu aṣẹ symadmin ṣẹda awọn tabili itọsọna nibiti awọn ofin ati itọsọna ti ẹda laarin awọn apa yoo wa ni ipamọ. Nikẹhin, data ayẹwo ti wa ni ti kojọpọ sinu awọn tabili.

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

Ninu apẹẹrẹ, ohun kan ati awọn tabili tabili item_selling_price ti wa ni tunto laifọwọyi lati tun ṣe lati corp-000 si itaja-001, ati awọn tabili tita (sale_transaction ati sale_return_line_item) ni tunto laifọwọyi lati ṣe atunṣe lati itaja-001 si corp-000. Bayi a ṣẹda ero kan ninu aaye data PostgreSQL lori vm2 alejo (itaja-001) lati mura silẹ lati gba data lati corp-000.

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

Rii daju lati ṣayẹwo pe aaye data MySQL lori vm1 ni awọn tabili apẹẹrẹ ati awọn tabili katalogi SymmetricDS. Ṣe akiyesi pe awọn tabili eto SymmetricDS (iṣaaju pẹlu sym_) lọwọlọwọ wa lori node corp-000 nitori iyẹn ni ibiti a ti ṣiṣẹ aṣẹ ṣẹda-sym-tabili ati pe yoo ṣakoso ẹda. Ati ninu ibi ipamọ data lori ile itaja ipade-001 yoo wa awọn tabili apẹẹrẹ 4 nikan laisi data.

Gbogbo. Ayika ti šetan lati ṣiṣe awọn ilana olupin sym lori awọn apa mejeji bi a ṣe han ni isalẹ.

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

Awọn titẹ sii wọle ni a fi ranṣẹ si faili log isale (symmetric.log) ninu folda awọn iwe-ipamọ ti o ti fi SymmetricDS sori ẹrọ, ati si iṣẹjade boṣewa. Olupin aami le ti bẹrẹ ni bayi lori ile itaja node-001.

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

Ti o ba ṣiṣẹ ilana olupin sym lori agbalejo vm2, yoo tun ṣẹda awọn tabili katalogi SymmetricDS ni aaye data PostgreSQL. Ti o ba ṣiṣẹ ilana olupin sym lori awọn apa mejeji, wọn ṣe ipoidojuko pẹlu ara wọn lati ṣe ẹda data lati corp-000 si itaja-001. Ti o ba ti lẹhin iṣẹju diẹ a beere gbogbo awọn tabili mẹrin ni ẹgbẹ mejeeji, a yoo rii pe atunṣe jẹ aṣeyọri. Tabi o le fi bootstrap ranṣẹ si ile itaja node-4 lati corp-001 pẹlu aṣẹ atẹle.

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

Ni aaye yii, igbasilẹ titun kan ti fi sii sinu tabili ohun kan ninu aaye data MySQL lori node corp-000 (ogun: vm1), ati pe o le ṣayẹwo atunṣe rẹ si aaye data PostgreSQL lori ile itaja node-001 (ogun: vm2). A rii iṣẹ Fa lati gbe data lati corp-000 si itaja-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)

Lati ṣe iṣẹ Titari kan lati gbe data lati itaja-001 si corp-000, a fi igbasilẹ sinu tabili sale_transaction ati rii daju pe atunkọ jẹ aṣeyọri.

Abajade.

A rii iṣeto aṣeyọri ti atunṣe-ọna meji ti awọn tabili apẹẹrẹ laarin MySQL ati awọn apoti isura data PostgreSQL. Lati ṣeto atunwi fun awọn tabili olumulo titun, tẹle awọn igbesẹ wọnyi: A ṣẹda tabili t1 fun apẹẹrẹ ati tunto awọn ofin ẹda rẹ gẹgẹbi atẹle. Ni ọna yii a tunto ẹda nikan lati corp-000 si itaja-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)

Iṣeto ni ifitonileti lẹhinna iyipada ero, iyẹn ni, afikun ti tabili tuntun, lilo pipaṣẹ symadmin pẹlu ariyanjiyan amuṣiṣẹpọ-nfa, eyiti o tun ṣe awọn okunfa lati ya awọn asọye tabili. Firanṣẹ-schema ti wa ni ṣiṣe lati firanṣẹ awọn ayipada ero si ibi-itaja node-001, ati atunto ti tabili t1 ti tunto.

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

Awọn anfani ti SymmetricDS

Fifi sori ẹrọ rọrun ati iṣeto ni, pẹlu ṣeto awọn faili ti a ti ṣetan pẹlu awọn ayeraye fun ṣiṣẹda oju-ọna mẹta tabi iyika ipade-meji.
Awọn apoti isura infomesonu-Syeed ati ominira Syeed, pẹlu olupin, kọǹpútà alágbèéká ati awọn ẹrọ alagbeka.
Ṣe atunṣe eyikeyi data si eyikeyi data miiran ni agbegbe, lori WAN tabi ni awọsanma.
O ṣeeṣe ti iṣẹ ti o dara julọ pẹlu awọn apoti isura infomesonu meji tabi ọpọlọpọ ẹgbẹrun fun atunwi irọrun.
Ẹya isanwo pẹlu GUI ati atilẹyin to dara julọ.

Awọn alailanfani ti SymmetricDS

O nilo lati ṣe asọye pẹlu ọwọ awọn ofin ati itọsọna ti ẹda lori laini aṣẹ nipasẹ awọn alaye SQL lati ṣaja awọn tabili katalogi, eyiti o le jẹ airọrun.
Ṣiṣeto awọn tabili pupọ fun atunkọ le jẹ arẹwẹsi ayafi ti o ba lo awọn iwe afọwọkọ lati ṣẹda awọn alaye SQL ti o ṣalaye awọn ofin ati itọsọna ti ẹda.
Alaye pupọ ti wa ni igbasilẹ ninu awọn akọọlẹ, ati nigba miiran o nilo lati ṣatunṣe faili log naa ki o ma gba aaye ti o pọ ju.

Awọn abajade fun SymmetricDS

SymmetricDS ngbanilaaye lati ṣeto atunṣe-ọna meji laarin meji, mẹta, tabi paapaa ọpọlọpọ ẹgbẹrun awọn apa lati tun ṣe ati muuṣiṣẹpọ awọn faili. Eyi jẹ ohun elo alailẹgbẹ ti o ṣe ominira ṣe ọpọlọpọ awọn iṣẹ-ṣiṣe, gẹgẹbi imularada data laifọwọyi lẹhin igba pipẹ ti akoko idaduro lori ipade kan, aabo ati paṣipaarọ data daradara laarin awọn apa nipasẹ HTTPS, iṣakoso rogbodiyan aifọwọyi ti o da lori eto awọn ofin, bbl SymmetricDS ṣe. atunwi laarin eyikeyi awọn apoti isura data, nitorina, o le ṣee lo fun ọpọlọpọ awọn oju iṣẹlẹ, pẹlu ijira, ijira, pinpin, sisẹ, ati iyipada data kọja awọn iru ẹrọ.

Apeere naa da lori osise naa awọn ọna guide nipasẹ SymmetricDS. IN olumulo Afowoyi Apejuwe ni apejuwe awọn orisirisi awọn agbekale lowo ninu siseto ẹda pẹlu SymmetricDS.

orisun: www.habr.com

Fi ọrọìwòye kun