Ketare kwafi tsakanin PostgreSQL da MySQL

Ketare kwafi tsakanin PostgreSQL da MySQL

Zan fayyace kwafin giciye tsakanin PostgreSQL da MySQL, da kuma hanyoyin kafa kwafin giciye tsakanin sabobin bayanai guda biyu. Yawanci, ana kiran rumbun adana bayanan giciye da aka kwafi, kuma hanya ce mai dacewa ta motsawa daga uwar garken RDBMS zuwa wani.

Bayanan bayanan PostgreSQL da MySQL ana ɗaukar su gabaɗaya suna da alaƙa, amma tare da ƙarin kari suna ba da damar NoSQL. Anan zamu tattauna maimaitawa tsakanin PostgreSQL da MySQL daga mahallin DBMS na alaƙa.

Ba za mu bayyana dukkan ayyukan ciki ba, kawai ƙa'idodin asali don ku sami ra'ayi na daidaita kwafi tsakanin sabar bayanai, fa'idodi, iyakancewa da lokuta masu amfani.

Yawanci, kwafi tsakanin sabar bayanai iri ɗaya ana yin su ko dai a yanayin binary ko ta yin amfani da tambayoyi tsakanin mawallafi (aka wallafa, master, ko mai aiki) da bawa (mai biyan kuɗi, jiran aiki, ko m). Manufar maimaitawa ita ce samar da kwafin babban ma'ajin bayanai na ainihi a gefen bawa. A wannan yanayin, ana canja wurin bayanai daga ubangida zuwa bawa, wato, daga mai aiki zuwa m, saboda ana yin kwafi ne kawai a hanya ɗaya. Amma kuna iya saita kwafi tsakanin ma'ajin bayanai guda biyu a cikin bangarorin biyu, ta yadda za'a iya canja wurin bayanai daga bawa zuwa ma'aikata a cikin tsari mai aiki. Duk waɗannan, gami da kwafin cascading, yana yiwuwa tsakanin sabar bayanai guda biyu ko fiye iri ɗaya. Tsarin aiki mai aiki ko aiki mai aiki ya dogara da buƙatu, samuwan irin wannan damar a cikin tsarin farko ko amfani da hanyoyin daidaitawa na waje da kasuwancin da ke wanzuwa.

Tsarin da aka kwatanta yana yiwuwa tsakanin sabobin bayanai daban-daban. Ana iya saita uwar garken don karɓar kwafin bayanai daga wata uwar garken bayanai kuma har yanzu tana kula da hotunan da aka kwafi na ainihin lokacin. MySQL da PostgreSQL suna ba da mafi yawan waɗannan jeri a cikin gida ko ta hanyar kari na ɓangare na uku, gami da hanyoyin log ɗin binaryar, kulle diski, da bayanan-da hanyoyin tushen layi.

Ana buƙatar kwafi tsakanin MySQL da PostgreSQL don ƙaura na lokaci ɗaya daga sabar bayanai zuwa wani. Waɗannan ma'ajin bayanai suna amfani da ka'idoji daban-daban, don haka ba zai yiwu a haɗa su kai tsaye ba. Don kafa musayar bayanai, zaku iya amfani da kayan aikin buɗe tushen waje, misali pg_chameleon.

Menene pg_chameleon

pg_chameleon shine tsarin kwafi daga MySQL zuwa PostgreSQL a cikin Python 3. Yana amfani da bude tushen mysql-replication library, shima a cikin Python. Ana fitar da hotunan jere daga tebur na MySQL kuma ana adana su azaman abubuwan JSONB a cikin bayanan PostgreSQL, sannan aikin pl/pgsql ya lalata shi kuma an sake bugawa a cikin bayanan PostgreSQL.

Siffofin pg_chameleon

Tsari-tsaren MySQL da yawa daga gungu iri ɗaya ana iya maimaita su zuwa maƙasudi guda ɗaya na bayanan PostgreSQL a cikin tsari ɗaya-zuwa-yawa.
Tushen da sunayen makirci ba za su iya zama iri ɗaya ba.
Ana iya dawo da bayanan maimaitawa daga kwafin MySQL da aka tuɓe.
Tables waɗanda ba za su iya yin kwafi ko samar da kurakurai ba an cire su.
Kowane aikin kwafi ana sarrafa shi ta daemons.
Sarrafa ta hanyar sigogi na tushen YAML da fayilolin daidaitawa.

Alal misali:

Mai watsa shiri
vm1
vm2

Sigar OS
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64

Sigar uwar garken DB
MySQL 5.7.26
PostgreSQL 10.5

DB tashar jiragen ruwa
3306
5433

Adireshin IP
192.168.56.102
192.168.56.106

Don farawa, shirya duk abubuwan da ake buƙata don shigar da pg_chameleon. Wannan misalin yana shigar da Python 3.6.8, wanda ke ƙirƙira da kunna yanayin kama-da-wane.

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

Bayan shigar Python3.6 cikin nasara, kuna buƙatar kammala sauran buƙatun, kamar ƙirƙira da kunna yanayin kama-da-wane. Bugu da ƙari, an sabunta tsarin pip zuwa sabon sigar kuma ana amfani dashi don shigar da pg_chameleon. Umurnin da ke ƙasa suna shigar da gangan pg_chameleon 2.0.9, kodayake sabuwar sigar ita ce 2.0.10. Wannan wajibi ne don guje wa sabbin kwari a cikin sabuntar sigar.

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

Sannan muna kiran pg_chameleon (hawainiya umarni ne) tare da hujjar set_configuration_files don kunna pg_chameleon da ƙirƙirar kundayen adireshi da fayilolin sanyi.

(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

Yanzu mun ƙirƙiri kwafin config-example.yml azaman default.yml domin ya zama babban fayil ɗin sanyi. An bayar da fayil ɗin sanyi na samfurin wannan misalin a ƙasa.

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

Fayil ɗin daidaitawa a cikin wannan misalin shine samfurin pg_chameleon fayil tare da ƙananan gyare-gyare don dacewa da tushe da mahallin manufa, kuma ƙasa akwai bayyani na sassa daban-daban na fayil ɗin sanyi.

A cikin default.yml Confinition file akwai wani sashe na duniya settings, inda za ka iya sarrafa saituna kamar wurin da makullin fayil, wurin da logs, da lokacin ajiya na logs, da dai sauransu gaba ya zo da nau'in override sashen, inda. saitin ƙa'idodi don ƙetare nau'ikan yayin kwafi. Misalin ya ƙare zuwa nau'in tsarin mulki wanda ke canza ƙarami(1) zuwa ƙimar boolean. A cikin sashe na gaba, mun ƙididdige bayanan haɗin kai zuwa bayanan da aka yi niyya. A cikin yanayinmu, wannan shine bayanan PostgreSQL, wanda aka keɓance pg_conn. A cikin sashe na ƙarshe, muna nuna bayanan tushen, wato, sigogin haɗin yanar gizo na tushen bayanai, tsarin taswira tsakanin tushen da bayanan bayanai, tebur waɗanda ke buƙatar tsallakewa, lokacin jira, ƙwaƙwalwar ajiya, girman kunshin. Lura cewa "sources" jam'i ne, ma'ana za mu iya ƙara madogaran bayanai masu yawa zuwa rumbun adana bayanai guda ɗaya don saita tsari mai yawa-zuwa ɗaya.

Misalin bayanai world_x yana ƙunshe da tebura guda 4 tare da layuka waɗanda al'ummar MySQL ke bayarwa a matsayin misalai. Ana iya saukewa a nan. Samfurin ma'ajin bayanai ya zo a matsayin kwalta da rumbun adana bayanai tare da umarni don ƙirƙira da shigo da layuka.

A cikin bayanan MySQL da PostgreSQL, an ƙirƙiri mai amfani na musamman tare da wannan suna usr_replica. A cikin MySQL, an ba shi ƙarin haƙƙoƙin karantawa ga duk tebur da aka kwafi.

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;

A gefen PostgreSQL, an ƙirƙiri bayanan db_replica wanda zai karɓi canje-canje daga bayanan MySQL. usr_replica mai amfani a cikin PostgreSQL ana daidaita shi ta atomatik azaman ma'abucin tsare-tsare guda biyu, pgworld_x da sch_chameleon, waɗanda ke ƙunshe da ainihin allunan da aka kwafi da teburan littafin kwafi, bi da bi. Hujjar create_replica_schema tana da alhakin daidaitawa ta atomatik, kamar yadda zaku gani a ƙasa.

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

An saita bayanan MySQL tare da wasu canje-canjen siga don shirya shi don kwafi kamar yadda aka nuna a ƙasa. Kuna buƙatar sake kunna uwar garken bayanai don canje-canje su yi tasiri.

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

Yanzu yana da mahimmanci a bincika haɗin kai zuwa sabobin bayanai don kada a sami matsala yayin gudanar da umarnin pg_chameleon.

A kan kumburin PostgreSQL:

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

A kan node MySQL:

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

Uku na gaba pg_chameleon (hawainiya) umarni shirya yanayi, ƙara tushen, da fara kwafi. Muhawarar create_replica_schema zuwa pg_chameleon tana haifar da tsayayyen tsari (sch_chameleon) da tsarin kwafi (pgworld_x) a cikin bayanan PostgreSQL, kamar yadda muka tattauna. Hujjar add_source tana ƙara tushen tushen bayanai zuwa ga daidaitawa ta hanyar karanta fayil ɗin daidaitawa (default.yml), kuma a cikin yanayinmu shine mysql, kuma init_replica yana fara daidaitawa dangane da sigogi a cikin fayil ɗin sanyi.

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

Fitowar waɗannan umarni guda uku yana nuna a fili cewa an yi su cikin nasara. Ana ba da rahoton duk wani ɓarna ko kurakuran ɗabi'a a cikin sassauƙa, bayyanannun saƙonni tare da alamu kan yadda ake gyara matsalar.

A ƙarshe, muna fara kwafi ta amfani da start_replica kuma mu karɓi saƙon nasara.

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

Ana iya tambayar matsayin maimaitawa ta amfani da hujjar show_status, kuma ana iya duba kurakurai ta amfani da hujjar show_errors.

Sakamako

Kamar yadda muka riga muka fada, kowane aikin kwafi ana sarrafa shi ta daemons. Don duba su, muna tambayar teburin tsari tare da umarnin Linux ps, kamar yadda aka nuna a ƙasa.

Sakamako

Ba a la'akari da maimaitawa an daidaita shi har sai mun gwada shi a ainihin lokacin, kamar yadda aka nuna a ƙasa. Mun ƙirƙiri tebur, saka bayanai guda biyu a cikin bayanan MySQL, kuma mu kira gardamar sync_tables a cikin pg_chameleon don sabunta daemons kuma maimaita tebur tare da bayanan zuwa bayanan 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.

Don tabbatar da sakamakon gwajin, muna tambayar tebur daga bayanan PostgreSQL kuma mu fitar da layuka.

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

Idan muna yin ƙaura, waɗannan umarnin pg_chameleon za su zama ƙarshenta. Ana buƙatar aiwatar da umarnin bayan mun tabbatar da cewa an sake maimaita layuka na duk teburin da aka yi niyya, kuma sakamakon zai zama ƙaura mai kyau na PostgreSQL ba tare da nassoshi ga tushen bayanan tushen ko tsarin kwafi ba (sch_chameleon).

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

Idan ana so, zaku iya amfani da umarni masu zuwa don share ainihin tsari da tsarin kwafi.

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

Amfanin pg_chameleon

Sauƙi saitin da daidaitawa.
Sauƙaƙe warware matsala da gano abubuwan da ba su dace ba tare da bayyanannun saƙonnin kuskure.
Ana iya ƙara ƙarin tebur na musamman zuwa maimaitawa bayan farawa ba tare da canza sauran tsarin ba.
Yana yiwuwa a daidaita ma'ajin bayanai masu yawa don tushen bayanai guda ɗaya, kuma wannan yana da amfani sosai idan kuna haɗa bayanai daga ɗaya ko fiye da bayanan MySQL zuwa cikin bayanan PostgreSQL guda ɗaya.
Ba dole ba ne ka yi kwafin tebur da aka zaɓa.

Rashin amfanin pg_chameleon

Ana goyan bayan kawai tare da MySQL 5.5 da sama azaman tushe da PostgreSQL 9.5 da sama azaman bayanan bayanai.
Kowane tebur dole ne ya kasance yana da maɓalli na farko ko na musamman, in ba haka ba an fara fara allunan yayin aiwatar da init_replica amma ba a maimaita su ba.
Maimaita hanya ɗaya - daga MySQL zuwa PostgreSQL kawai. Saboda haka, ya dace kawai don da'irar "aiki-m".
Tushen zai iya zama bayanan MySQL kawai, kuma goyan bayan bayanan PostgreSQL azaman tushen gwaji ne kawai kuma tare da iyakancewa (koyi ƙarin koyo). a nan)

Sakamako na pg_chameleon

Hanyar kwafi a pg_chameleon yana da kyau don ƙaura bayanan bayanai daga MySQL zuwa PostgreSQL. Babban fa'idar ita ce maimaitawa hanya ɗaya ce kawai, don haka ƙwararrun bayanai ba su da yuwuwa su yi amfani da shi don wani abu banda ƙaura. Amma ana iya magance matsalar maimaitawa ta hanya ɗaya da wani buɗaɗɗen kayan aiki - SymmetricDS.

Kara karantawa a cikin takaddun hukuma a nan. Ana iya samun taimakon layin umarni a nan.

Bayanin SymmetricDS

SymmetricDS shine kayan aiki mai buɗewa wanda ke kwafi kowane bayanan bayanai zuwa kowane ɗayan bayanan gama gari: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird da sauran bayanan bayanan girgije, misali Redshift, da Azure, da sauransu. Akwai fasaloli: tsarin aiki tare da bayanai da fayil, kwafin manyan bayanai na manyan manyan bayanai, daidaitawar aiki tare, canji da sauransu. Wannan kayan aikin Java ne kuma yana buƙatar daidaitaccen sakin JRE ko JDK (version 8.0 ko sama). Anan, ana iya yin rikodin bayanai zuwa abubuwan da ke haifar da ruɗani a cikin tushen bayanai kuma a aika su zuwa bayanan da aka dace da su ta hanyar batches.

Siffofin SymmetricDS

Kayan aikin dandamali ne mai zaman kansa, ma'ana biyu ko fiye mabambantan bayanai na iya musayar bayanai.
Ana daidaita ma'ajin bayanai na alaƙa ta amfani da bayanan canjin bayanai, yayin da tushen tsarin fayil ke amfani da aiki tare na fayil.
Kwafi-kwafi ta hanyoyi biyu ta amfani da hanyoyin turawa da Jawo bisa tsarin dokoki.
Canja wurin bayanai yana yiwuwa akan amintattun cibiyoyin sadarwa mara-bandwidth.
Farfadowa ta atomatik lokacin da nodes suka ci gaba da aiki bayan gazawa da ƙudurin rikici ta atomatik.
APIs masu jituwa da Cloud mai ƙarfi.

Alal misali:

Ana iya saita SymmetricDS a ɗayan zaɓuɓɓuka biyu:
Kumburi na ubangida (iyaye) wanda ke daidaita daidaita bayanai tsakanin nodes ɗin bawa (yara), kuma sadarwa tsakanin nodes ɗin yara yana faruwa ne kawai ta hanyar iyaye.
Kumburi mai aiki (Node 1) na iya sadarwa don yin kwafi tare da wani kumburi mai aiki (Node 2) ba tare da tsaka-tsaki ba.

A cikin zaɓuɓɓuka biyu, musayar bayanai yana faruwa ta amfani da Push da Pull. A cikin wannan misali za mu yi la'akari da tsari mai aiki. Zai ɗauki lokaci mai tsawo don kwatanta duka gine-ginen, don haka kuyi binciken ku. jagoradon ƙarin koyo game da na'urar SymmetricDS.

Shigar da SymmetricDS abu ne mai sauqi qwarai: zazzage sigar buɗaɗɗen tushen fayil ɗin zip daga nan kuma fitar dashi duk inda kuke so. Teburin da ke ƙasa yana ba da bayani game da wurin shigarwa da sigar SymmetricDS a cikin wannan misalin, da kuma sigar bayanai, nau'ikan Linux, adiresoshin IP, da tashoshin jiragen ruwa na nodes biyu.

Mai watsa shiri
vm1
vm2

Sigar OS
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64

Sigar uwar garken DB
MySQL 5.7.26
PostgreSQL 10.5

DB tashar jiragen ruwa
3306
5832

Adireshin IP
192.168.1.107
192.168.1.112

Sigar SymmetricDS
SymmetricDS 3.9
SymmetricDS 3.9

Hanyar shigarwa SymmetricDS
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20

SymmetricDS node name
kamfanin-000
kantin-001

Anan mun shigar da SymmetricDS a cikin /usr/local/symmetric-server-3.9.20, kuma za a adana ƙananan kundiyoyi da fayiloli daban-daban a wurin. Muna sha'awar samfura da injuna subdirectories. Littafin jagorar samfuran ya ƙunshi fayilolin sanyi misali tare da kaddarorin kumburi, da kuma misalin rubutun SQL don farawa da sauri.

A cikin samfurin samfurin muna ganin fayilolin sanyi guda uku tare da kaddarorin kumburi - sunan yana nuna yanayin kumburi a cikin wani tsari.

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

SymmetricDS yana da duk mahimman fayilolin daidaitawa don ƙirar ƙira 3 na asali (zaɓi 1), kuma ana iya amfani da fayiloli iri ɗaya don ƙirar 2-node (zaɓi 2). Kwafi fayil ɗin daidaitawa da ake buƙata daga jerin samfuran zuwa injuna akan mai masaukin vm1. Ya kasance kamar haka:

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

Wannan kumburin da ke cikin tsarin SymmetricDS ana kiransa corp-000, kuma ana sarrafa haɗin bayanan ta direban mysql jdbc, wanda ke amfani da igiyar haɗin da ke sama da bayanan shiga. Muna haɗi zuwa bayanan replica_db kuma za a ƙirƙiri tebur yayin ƙirƙirar tsari. sync.url yana nuna inda za'a tuntuɓar kullin don aiki tare.

Node 2 akan mai masaukin vm2 an saita shi azaman store-001 kuma an ƙayyade sauran a cikin node.properties fayil ɗin da ke ƙasa. Node store-001 yana gudanar da bayanan PostgreSQL kuma pgdb_replica shine bayanan kwafi. registration.url yana ba da damar vm2 mai masaukin baki don tuntuɓar mai masaukin baki vm1 kuma ya karɓi bayanan sanyi daga gare ta.

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

Misalin SymmetricDS da aka kammala yana ƙunshe da sigogi don saita kwafi ta hanyoyi biyu tsakanin sabar bayanai guda biyu (nodes biyu). Matakan da ke ƙasa ana yin su ne akan mai masaukin baki vm1 (corp-000), wanda zai ƙirƙiri tsari na misali tare da teburi 4. Sannan gudanar da ƙirƙira-sym-tables tare da umarnin symadmin yana ƙirƙirar tebur na adireshi inda za'a adana ƙa'idodi da jagorar kwafi tsakanin nodes. A ƙarshe, ana ɗora bayanan samfurin a cikin tebur.

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

A cikin misali, kayan da kayan_selling_price tables ana saita su ta atomatik don yin kwafi daga corp-000 zuwa store-001, kuma teburin siyarwa (sale_transaction da sale_return_line_item) ana daidaita su ta atomatik don yin kwafi daga kantin-001 zuwa corp-000. Yanzu mun ƙirƙiri tsari a cikin bayanan PostgreSQL akan mai watsa shiri vm2 (store-001) don shirya shi don karɓar bayanai daga corp-000.

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

Tabbatar duba cewa bayanan MySQL akan vm1 yana da tebur misali da tebur na kasida na SymmetricDS. Lura cewa teburin tsarin SymmetricDS (wanda aka riga aka tsara tare da sym_) a halin yanzu ana samun su akan node corp-000 saboda a nan ne muke gudanar da umarnin ƙirƙirar-sym-tables kuma za mu gudanar da kwafi. Kuma a cikin bayanan da ke kan node store-001 za a sami tebur misali 4 kawai ba tare da bayanai ba.

Duka. An shirya mahallin don gudanar da tsarin sabar uwar garken a kan kusoshi biyu kamar yadda aka nuna a ƙasa.

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

Ana aika shigarwar shiga zuwa fayil ɗin log ɗin baya (symmetric.log) a cikin babban fayil ɗin rajistan ayyukan a cikin kundin adireshi inda aka shigar SymmetricDS, da kuma daidaitaccen fitarwa. Yanzu ana iya ƙaddamar da uwar garken alamar akan node store-001.

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

Idan kun gudanar da tsarin uwar garken sym akan mai masaukin vm2, zai kuma ƙirƙiri teburin kasida na SymmetricDS a cikin bayanan PostgreSQL. Idan kun gudanar da tsarin sabar uwar garken akan duka nodes, suna daidaitawa da juna don yin kwafin bayanai daga corp-000 zuwa store-001. Idan bayan ƴan daƙiƙa kaɗan muka tambayi duk teburi 4 a ɓangarorin biyu, za mu ga cewa kwafin ya yi nasara. Ko za ku iya aika bootstrap zuwa node store-001 daga corp-000 tare da umarni mai zuwa.

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

A wannan gaba, an shigar da sabon rikodin a cikin teburin abu a cikin bayanan MySQL akan node corp-000 (mai watsa shiri: vm1), kuma zaku iya duba kwafin sa zuwa bayanan PostgreSQL akan node store-001 (mai watsa shiri: vm2). Muna ganin aikin Pull don matsar da bayanai daga corp-000 zuwa 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)

Don yin aikin turawa don matsar da bayanai daga kantin sayar da-001 zuwa corp-000, muna saka rikodi a cikin teburin tallace-tallace kuma muna tabbatar da cewa kwafin ya yi nasara.

Sakamako

Muna ganin nasarar saitin kwafi-kwafi ta hanyoyi biyu na tebur misali tsakanin MySQL da bayanan bayanan PostgreSQL. Don saita kwafi don sabbin teburin masu amfani, bi waɗannan matakan: Mun ƙirƙiri tebur t1 misali kuma muna saita ƙa'idodin kwafinsa kamar haka. Ta wannan hanyar muna saita kwafi kawai daga corp-000 zuwa 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)

Ana sanar da tsarin saitin canjin tsari, wato, ƙarin sabon tebur, ta amfani da umarnin symadmin tare da gardamar sync-triggers, wanda ke sake ƙirƙira abubuwan da ke haifar da taswirar tebur. Ana aiwatar da tsarin aika-tsari don aika canje-canjen tsari zuwa kantin node-001, kuma ana daidaita kwafin tebur t1.

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

Amfanin SymmetricDS

Sauƙaƙan shigarwa da daidaitawa, gami da shirye-shiryen shirye-shiryen fayiloli tare da sigogi don ƙirƙirar kuɗaɗɗen kuɗaɗe uku ko biyu.
Rukunin bayanai na dandamali da yancin kai na dandamali, gami da sabobin, kwamfyutoci da na'urorin hannu.
Maimaita kowane bayanan bayanai zuwa kowane bayanan gida, akan WAN ko a cikin gajimare.
Yiwuwar ingantaccen aiki tare da ma'aunin bayanai guda biyu ko dubu da yawa don dacewa da kwafi.
Sigar da aka biya tare da GUI da ingantaccen tallafi.

Lalacewar SymmetricDS

Kuna buƙatar ayyana ƙa'idodi da jagorar kwafi akan layin umarni da hannu ta hanyar maganganun SQL don loda teburin kasida, wanda zai iya zama mara daɗi.
Shirya tebur da yawa don kwafi na iya zama mai ban sha'awa sai dai idan kun yi amfani da rubutun don ƙirƙirar maganganun SQL waɗanda ke ayyana ƙa'idodi da alkiblar maimaitawa.
Akwai bayanai da yawa da ake rubutawa a cikin rajistan ayyukan, kuma wani lokacin kana buƙatar gyara fayil ɗin log ɗin don kada ya ɗauki sarari da yawa.

Sakamako na SymmetricDS

SymmetricDS yana ba ku damar saita kwafi ta hanyoyi biyu tsakanin biyu, uku, ko ma dubunnan nodes don kwafi da aiki tare fayiloli. Wannan kayan aiki ne na musamman wanda ke yin ayyuka da yawa da kansa, kamar dawo da bayanai ta atomatik bayan dogon lokaci na raguwa akan kumburi, amintaccen kuma ingantaccen musayar bayanai tsakanin nodes ta HTTPS, sarrafa rikice-rikice ta atomatik bisa tsarin dokoki, da dai sauransu SymmetricDS yayi. maimaitawa tsakanin kowace rumbun adana bayanai, don haka, ana iya amfani da ita don yanayi iri-iri, gami da ƙaura, ƙaura, rarrabawa, tacewa, da kuma canza bayanai a kan dandamali.

Misalin ya dogara ne akan hukuma jagora mai sauri ta SymmetricDS. IN littafin mai amfani Yana bayyana dalla-dalla ra'ayoyi daban-daban da ke tattare da kafa kwafi tare da SymmetricDS.

source: www.habr.com

Add a comment