Croes-ddyblygu rhwng PostgreSQL a MySQL

Croes-ddyblygu rhwng PostgreSQL a MySQL

Byddaf yn siarad yn fyr am groes-ddyblygu rhwng PostgreSQL a MySQL, yn ogystal â dulliau ar gyfer sefydlu traws-dyblygiad rhwng y ddau weinydd cronfa ddata hyn. Cyfeirir at gronfeydd data traws-dyblyg yn gyffredin fel cronfeydd data homogenaidd, ac mae hwn yn ddull cyfleus ar gyfer mudo o un gweinydd RDBMS i un arall.

Yn draddodiadol, ystyrir cronfeydd data PostgreSQL a MySQL yn berthynol, ond gydag estyniadau ychwanegol maent yn cynnig galluoedd NoSQL. Yma byddwn yn trafod dyblygu rhwng PostgreSQL a MySQL o safbwynt rheoli cronfa ddata berthynol.

Ni fyddwn yn disgrifio'r holl fewnolion, dim ond yr egwyddorion sylfaenol, fel eich bod yn cael syniad o sefydlu atgynhyrchu rhwng gweinyddwyr cronfa ddata, manteision, cyfyngiadau ac achosion defnydd.

Yn nodweddiadol, mae dyblygu rhwng dau weinydd cronfa ddata union yr un fath yn cael ei wneud naill ai yn y modd deuaidd neu drwy ymholiadau rhwng meistr (aka cyhoeddwr, meistr, neu weithredol) a chaethwas (tanysgrifiwr, wrth gefn, neu oddefol). Pwrpas atgynhyrchu yw darparu copi amser real o'r brif gronfa ddata ar yr ochr wrth gefn. Yn yr achos hwn, trosglwyddir data o'r meistr i'r caethwas, hynny yw, o weithgar i oddefol, oherwydd dim ond mewn un cyfeiriad y mae ailadrodd yn cael ei berfformio. Ond gallwch chi sefydlu dyblygu rhwng y ddwy gronfa ddata i'r ddau gyfeiriad, fel bod data'n cael ei drosglwyddo o'r caethwas i'r meistr mewn cyfluniad gweithredol-weithredol. Mae hyn i gyd, gan gynnwys atgynhyrchu rhaeadru, yn bosibl rhwng dau neu fwy o weinyddion cronfa ddata union yr un fath. Mae cyfluniad gweithredol-weithredol neu weithredol-goddefol yn dibynnu ar yr angen, argaeledd galluoedd o'r fath yn y cyfluniad cychwynnol neu'r defnydd o atebion tiwnio allanol a masnach bresennol -offs .

Mae'r cyfluniad a ddisgrifir yn bosibl rhwng gweinyddwyr cronfa ddata gwahanol. Gellir ffurfweddu'r gweinydd i dderbyn data wedi'i ddyblygu gan weinydd cronfa ddata arall a dal i gadw cipluniau amser real o'r data a atgynhyrchwyd. Mae MySQL a PostgreSQL yn cynnig y rhan fwyaf o'r ffurfweddiadau hyn yn frodorol neu trwy estyniadau trydydd parti, gan gynnwys dulliau log deuaidd, cloeon disg, a dulliau datganiadau a rhesi.

Mae angen croes-ddyblygu rhwng MySQL a PostgreSQL ar gyfer mudo un-amser o un gweinydd cronfa ddata i'r llall. Mae'r cronfeydd data hyn yn defnyddio protocolau gwahanol, felly ni allwch eu cysylltu'n uniongyrchol. Er mwyn hwyluso cyfnewid data, gallwch ddefnyddio offeryn ffynhonnell agored allanol, fel pg_chameleon.

Beth yw pg_chameleon

Mae pg_chameleon yn system atgynhyrchu o MySQL i PostgreSQL yn Python 3. Mae'n defnyddio'r llyfrgell ffynhonnell agored mysql-replication, hefyd yn Python. Mae delweddau rhes yn cael eu hadalw o dablau MySQL a'u storio fel gwrthrychau JSONB yng nghronfa ddata PostgreSQL, ac yna'n cael eu dadgodio gan y swyddogaeth pl/pgsql a'u chwarae yn ôl yng nghronfa ddata PostgreSQL.

Nodweddion pg_chameleon

Gellir ailadrodd sgemâu MySQL lluosog o'r un clwstwr i un gronfa ddata darged PostgreSQL gyda chyfluniad un-i-lawer
Ni all enwau ffynhonnell a tharged y sgema fod yr un peth.
Gellir adfer data atgynhyrchu o atgynhyrchiad rhaeadru MySQL.
Mae tablau na allant atgynhyrchu neu gynhyrchu gwallau wedi'u heithrio.
Mae pob swyddogaeth atgynhyrchu yn cael ei reoli gan ellyllod.
Rheolaeth gyda pharamedrau a ffeiliau cyfluniad yn seiliedig ar YAML.

Enghraifft

Gwesteiwr
vm1
vm2

Fersiwn OS
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64

Fersiwn gweinydd cronfa ddata
MySQL 5.7.26
PostgreSQL 10.5

Porth DB
3306
5433

Cyfeiriad IP
192.168.56.102
192.168.56.106

Yn gyntaf, paratowch yr holl gydrannau angenrheidiol ar gyfer gosod pg_chameleon. Mae'r enghraifft hon wedi gosod Python 3.6.8, sy'n creu amgylchedd rhithwir ac yn ei actifadu.

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

Unwaith y bydd Python3.6 wedi'i osod yn llwyddiannus, mae angen cwblhau gweddill y gofynion, megis creu ac actifadu amgylchedd rhithwir. Hefyd, mae'r modiwl pip yn cael ei ddiweddaru i'r fersiwn ddiweddaraf a'i ddefnyddio i osod pg_chameleon. Mae'r gorchmynion isod yn gosod pg_chameleon 2.0.9 yn fwriadol, er mai 2.0.10 yw'r fersiwn ddiweddaraf. Mae hyn yn angenrheidiol er mwyn osgoi bygiau newydd yn y fersiwn wedi'i diweddaru.

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

Yna rydym yn galw pg_chameleon (gorchymyn yw chameleon) gyda'r ddadl set_configuration_files i alluogi pg_chameleon a chreu'r cyfeiriaduron a'r ffeiliau cyfluniad rhagosodedig.

(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

Rydyn ni nawr yn gwneud copi o config-example.yml fel default.yml fel ei fod yn dod yn ffeil ffurfweddu rhagosodedig. Darperir ffeil ffurfweddu sampl ar gyfer yr enghraifft hon isod.

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

Mae'r ffeil ffurfweddu yn yr enghraifft hon yn ffeil pg_chameleon sampl gyda mân addasiadau i gyd-fynd â'r amgylcheddau ffynhonnell a tharged, ac isod mae trosolwg o wahanol adrannau'r ffeil ffurfweddu.

Mae gan y ffeil ffurfweddu default.yml adran o osodiadau byd-eang (gosodiadau byd-eang) lle gallwch reoli gosodiadau megis lleoliad y ffeil clo, lleoliad y logiau, y cyfnod storio ar gyfer y logiau, ac ati Nesaf daw'r math wrthwneud adran, lle mae'r rheolau gosod ar gyfer diystyru mathau yn ystod atgynhyrchu. Mae'r enghraifft ddiofyn yn defnyddio rheol gwrthwneud math sy'n trosi tinyint(1) yn boolean. Yn yr adran nesaf, rydym yn nodi manylion cysylltu â'r gronfa ddata darged. Yn ein hachos ni, cronfa ddata PostgreSQL yw hon, wedi'i dynodi fel pg_conn. Yn yr adran olaf, rydym yn nodi'r data ffynhonnell, hynny yw, paramedrau cysylltiad y gronfa ddata ffynhonnell, cynllun mapio'r cronfeydd data ffynhonnell a tharged, tablau i'w hepgor, terfyn amser, cof, maint pecyn. Sylwch fod "ffynonellau" yn lluosog, sy'n golygu y gallwn ychwanegu cronfeydd data ffynhonnell lluosog at yr un targed i sefydlu cyfluniad llawer-i-un.

Mae cronfa ddata world_x yn yr enghraifft yn cynnwys 4 tabl gyda rhesi y mae cymuned MySQL yn eu hawgrymu ar gyfer yr enghraifft. Gellir ei lawrlwytho yma. Daw'r gronfa ddata sampl fel archif tar a chywasgedig gyda chyfarwyddiadau ar gyfer creu a mewnforio llinynnau.

Mae defnyddiwr arbennig gyda'r un enw usr_replica yn cael ei greu yng nghronfeydd data MySQL a PostgreSQL. Mae MySQL yn rhoi mynediad darllen ychwanegol iddo i'r holl dablau a ailadroddir.

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;

Ar ochr PostgreSQL, crëir cronfa ddata db_replica a fydd yn derbyn newidiadau o gronfa ddata MySQL. Mae'r defnyddiwr usr_replica yn PostgreSQL wedi'i ffurfweddu'n awtomatig fel perchennog y ddau sgema pgworld_x a sch_chameleon, sy'n cynnwys y tablau a ddyblygwyd go iawn a thablau catalog atgynhyrchu, yn y drefn honno. Mae'r ddadl create_replica_schema yn gyfrifol am gyfluniad awtomatig, fel y gwelwch isod.

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

Mae cronfa ddata MySQL wedi'i ffurfweddu gyda rhai newidiadau i'w gwneud yn barod i'w hailadrodd fel y dangosir isod. Bydd angen i chi ailgychwyn gweinydd y gronfa ddata er mwyn i'r newidiadau ddod i rym.

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

Nawr mae'n bwysig gwirio'r cysylltiad â'r ddau weinydd cronfa ddata fel nad oes unrhyw broblemau wrth weithredu'r gorchmynion pg_chameleon.

Ar y nod PostgreSQL:

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

Ar nod MySQL:

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

Mae'r tri gorchymyn pg_chameleon (chameleon) nesaf yn paratoi'r amgylchedd, yn ychwanegu'r ffynhonnell, ac yn cychwyn y replica. Mae'r ddadl create_replica_schema i pg_chameleon yn creu sgema diofyn (sch_chameleon) a sgema atgynhyrchu (pgworld_x) yng nghronfa ddata PostgreSQL, fel y dywedasom. Mae'r ddadl add_source yn ychwanegu cronfa ddata ffynhonnell i'r ffurfweddiad trwy ddarllen y ffeil ffurfweddu (default.yml), sef mysql yn ein hachos ni, ac mae init_replica yn cychwyn y ffurfweddiad yn seiliedig ar y gosodiadau yn y ffeil ffurfweddu.

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

Mae allbwn y tri gorchymyn hyn yn dangos yn glir eu llwyddiant. Nodir pob methiant neu wall cystrawen mewn negeseuon syml a dealladwy gydag awgrymiadau ar sut i drwsio problemau.

Yn olaf, rydym yn dechrau dyblygu gyda start_replica a chael neges llwyddiant.

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

Gellir cwestiynu statws atgynhyrchu gyda'r arg show_status, a gellir gweld gwallau gyda'r arg show_errors.

Y canlyniad.

Fel y dywedasom eisoes, mae daemoniaid yn rheoli pob swyddogaeth atgynhyrchu. I'w gweld, holwch y tabl proses gyda'r gorchymyn Linux ps, fel y dangosir isod.

Y canlyniad.

Ni ystyrir bod atgynhyrchu wedi'i ffurfweddu nes i ni ei brofi mewn amser real, fel y dangosir isod. Rydyn ni'n creu tabl, yn mewnosod cwpl o gofnodion i gronfa ddata MySQL, ac yn galw'r ddadl sync_tables yn pg_chameleon i ddiweddaru'r daemonau ac ailadrodd y tabl gyda'r cofnodion i gronfa ddata 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.

I ddilysu canlyniadau'r profion, rydym yn cwestiynu'r tabl o gronfa ddata PostgreSQL ac yn allbwn y rhesi.

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

Os ydym yn mudo, y gorchmynion pg_chameleon canlynol fydd diwedd yr ymfudiad. Dylid rhedeg y gorchmynion ar ôl i ni wirio bod rhesi'r holl dablau targed wedi'u hailadrodd, gan arwain at gronfa ddata PostgreSQL wedi'i mudo'n daclus heb unrhyw gyfeiriadau at y gronfa ddata ffynhonnell na'r cynllun atgynhyrchu (sch_chameleon).

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

Gallwch ddileu'r cynllun cyfluniad ac atgynhyrchu gwreiddiol yn ddewisol gyda'r gorchmynion canlynol.

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

Manteision pg_chameleon

Gosodiad a chyfluniad hawdd.
Datrys problemau cyfleus a chanfod anghysondebau gyda negeseuon gwall clir.
Gellir ychwanegu tablau arbennig ychwanegol at atgynhyrchu ar ôl cychwyn heb newid gweddill y ffurfweddiad.
Mae'n bosibl sefydlu cronfeydd data ffynhonnell lluosog ar gyfer un gronfa ddata darged, ac mae hyn yn ddefnyddiol iawn os ydych chi'n cyfuno data o un neu fwy o gronfeydd data MySQL i un gronfa ddata PostgreSQL.
Gallwch ddewis peidio ag ailadrodd tablau a ddewiswyd.

Anfanteision pg_chameleon

Dim ond yn cael ei gefnogi gyda MySQL 5.5 ac uwch fel y ffynhonnell a PostgreSQL 9.5 ac uwch fel y gronfa ddata targed.
Rhaid i bob tabl gael allwedd gynradd neu unigryw, fel arall mae'r tablau'n cael eu cychwyn yn y broses init_replica ond nid yn cael eu hailadrodd.
Dyblygiad un ffordd - dim ond o MySQL i PostgreSQL. Felly, dim ond ar gyfer y cynllun gweithredol-goddefol y mae'n addas.
Dim ond cronfa ddata MySQL y gall y ffynhonnell fod, a dim ond arbrofol a chyfyngedig yw'r gefnogaeth i gronfa ddata PostgreSQL fel ffynhonnell (dysgu mwy yma)

Cyfansymiau ar gyfer pg_chameleon

Mae'r dull atgynhyrchu yn pg_chameleon yn wych ar gyfer mudo cronfa ddata o MySQL i PostgreSQL. Yr anfantais fawr yw mai dim ond un ffordd yw atgynhyrchu, felly mae'n annhebygol y bydd gweithwyr cronfa ddata proffesiynol am ei ddefnyddio ar gyfer unrhyw beth heblaw mudo. Ond gellir datrys y broblem o ddyblygu unffordd gydag offeryn ffynhonnell agored arall - SymmetricDS.

Darllenwch fwy yn y ddogfennaeth swyddogol yma. Gellir dod o hyd i gymorth llinell orchymyn yma.

Trosolwg o SymmetricDS

Offeryn ffynhonnell agored yw SymmetricDS sy'n atgynhyrchu unrhyw gronfa ddata i unrhyw gronfa ddata gyffredin arall: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird ac achosion cronfa ddata cwmwl eraill, er enghraifft Redshift, ac Azure, ac ati Nodweddion sydd ar gael: cydamseru cronfa ddata a ffeiliau, dyblygu cronfa ddata aml-feistr, cydamseru wedi'i hidlo, trawsnewid, ac eraill. Offeryn Java yw hwn ac mae angen y datganiad safonol JRE neu JDK (fersiwn 8.0 neu uwch). Yma gallwch gofnodi newidiadau data ar sbardunau yn y gronfa ddata ffynhonnell a'u hanfon i'r gronfa ddata darged briodol fel sypiau.

Galluoedd SymmetricDS

Mae'r offeryn yn annibynnol ar blatfform, sy'n golygu bod dwy neu fwy o gronfeydd data gwahanol yn gallu cyfnewid data.
Mae cronfeydd data perthynol yn cael eu cysoni trwy gofnodi newidiadau data, ac mae cronfeydd data sy'n seiliedig ar systemau ffeiliau yn defnyddio cydamseru ffeiliau.
Atgynhyrchu dwy ffordd gan ddefnyddio dulliau gwthio a thynnu yn seiliedig ar set o reolau.
Mae trosglwyddo data yn bosibl dros rwydweithiau diogel a rhwydweithiau gyda lled band isel.
Adferiad awtomatig pan fydd nodau'n ailddechrau ar ôl methiant a datrys gwrthdaro yn awtomatig.
APIs estyniad sy'n gydnaws â'r cwmwl ac yn effeithlon.

Enghraifft

Gellir ffurfweddu SymmetricDS mewn un o ddwy ffordd:
Prif nod (rhiant) sy'n cydlynu'n ganolog atgynhyrchu data rhwng dau nod caethweision (plentyn), a chyfnewid data rhwng nodau plentyn yn cael ei wneud trwy'r rhiant yn unig.
Gall nod gweithredol (nôd 1) gyfathrebu ar gyfer dyblygu gyda nod gweithredol arall (nôd 2) heb gyfryngwr.

Yn y ddau opsiwn, mae cyfnewid data yn digwydd gan ddefnyddio Push and Pull. Yn yr enghraifft hon, byddwn yn ystyried y cyfluniad gweithredol-weithredol. Mae'n rhy hir i ddisgrifio'r bensaernïaeth gyfan, felly astudiwch arweinyddiaethi ddysgu mwy am y teclyn SymmetricDS.

Mae gosod SymmetricDS yn hawdd: lawrlwythwch y ffeil zip ffynhonnell agored felly a'i dynnu lle bynnag y dymunwch. Mae'r tabl canlynol yn rhestru lleoliad gosod a fersiwn SymmetricDS yn yr enghraifft hon, yn ogystal â fersiynau cronfa ddata, fersiynau Linux, cyfeiriadau IP, a phorthladdoedd ar gyfer y ddau nod.

Gwesteiwr
vm1
vm2

Fersiwn OS
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64

Fersiwn gweinydd cronfa ddata
MySQL 5.7.26
PostgreSQL 10.5

Porth DB
3306
5832

Cyfeiriad IP
192.168.1.107
192.168.1.112

Fersiwn SymmetricDS
Cymesuredd DS 3.9
Cymesuredd DS 3.9

Llwybr gosod SymmetricDS
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20

Enw gwesteiwr SymmetricDS
corp-000
storfa-001

Yma rydym yn gosod SymmetricDS yn /usr/local/symmetric-server-3.9.20 a bydd is-gyfeiriaduron a ffeiliau amrywiol yn cael eu storio yno. Mae gennym ddiddordeb yn y samplau subdirectories a pheiriannau. Mae'r cyfeiriadur samplau yn cynnwys ffeiliau cyfluniad sampl gydag eiddo nod, yn ogystal â sampl o sgriptiau SQL i gychwyn y demo yn gyflym.

Yn y cyfeiriadur samplau, gwelwn dri ffeil cyfluniad gydag eiddo nod - mae'r enw yn dangos natur y nod mewn cynllun penodol.

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

Mae gan SymmetricDS yr holl ffeiliau ffurfweddu angenrheidiol ar gyfer sgema 3 nod sylfaenol (opsiwn 1) a gellir defnyddio'r un ffeiliau ar gyfer sgema 2 nod (opsiwn 2). Copïwch y ffeil ffurfweddu angenrheidiol o'r cyfeiriadur samplau i beiriannau ar y gwesteiwr vm1. Mae'n troi allan fel hyn:

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

Gelwir y nod hwn yn corp-000 yn y ffurfweddiad SymmetricDS ac mae'r cysylltiad cronfa ddata yn cael ei drin gan y gyrrwr mysql jdbc sy'n defnyddio'r llinyn cysylltiad uchod a manylion mewngofnodi. Rydym yn cysylltu â'r gronfa ddata replica_db a bydd tablau'n cael eu creu wrth greu sgema. sync.url yn dangos y ddolen i'r nod i gysoni.

Mae Nod 2 ar host vm2 wedi'i ffurfweddu fel store-001 a nodir y gweddill yn y ffeil node.properties isod. Mae'r nod store-001 yn rhedeg cronfa ddata PostgreSQL, a pgdb_replica yw'r gronfa ddata i'w dyblygu. Mae registration.url yn caniatáu i westeiwr vm2 gysylltu â gwesteiwr vm1 a chael manylion cyfluniad ohono.

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

Mae'r enghraifft SymmetricDS wedi'i chwblhau yn cynnwys opsiynau ar gyfer sefydlu atgynhyrchu dwy ffordd rhwng dau weinydd cronfa ddata (dau nod). Perfformir y camau isod ar host vm1 (corp-000) a fydd yn creu sgema sampl gyda 4 bwrdd. Yna mae gweithredu create-sym-tables gyda'r gorchymyn symadmin yn creu tablau cyfeiriadur lle bydd y rheolau a chyfeiriad yr atgynhyrchu rhwng nodau yn cael eu storio. Yn olaf, mae'r data sampl yn cael ei lwytho i'r tablau.

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

Yn yr enghraifft, mae'r tablau eitem a item_selling_price yn cael eu ffurfweddu'n awtomatig i'w dyblygu o corp-000 i store-001, ac mae'r tablau gwerthu (sale_transaction a sale_return_line_item) yn cael eu ffurfweddu'n awtomatig i'w dyblygu o store-001 i corp-000. Rydyn ni nawr yn creu sgema yng nghronfa ddata PostgreSQL ar host vm2 (store-001) i'w baratoi i dderbyn data gan corp-000.

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

Gwnewch yn siŵr eich bod yn gwirio bod gan gronfa ddata MySQL ar vm1 dablau sampl a thabl catalog SymmetricDS. Sylwch mai dim ond ar y nod corp-000 y mae tablau system SymmetricDS (wedi'u rhagddodi â sym_) ar gael ar hyn o bryd, oherwydd dyna lle gwnaethom redeg y gorchymyn creu-sym-tablau a byddwn yn rheoli dyblygu. Ac yn y gronfa ddata yn y nod siop-001 dim ond 4 tabl enghreifftiol heb ddata fydd.

I gyd. Mae'r amgylchedd yn barod i redeg prosesau gweinydd sym ar y ddau nod fel y dangosir isod.

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

Anfonir cofnodion log i'r ffeil log cefndir (symmetric.log) yn y ffolder log yn y cyfeiriadur lle mae SymmetricDS wedi'i osod, yn ogystal â'r allbwn safonol. Bellach gellir cychwyn y gweinydd sym ar y nod store-001.

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

Os ydych chi'n rhedeg y broses gweinydd sym ar y gwesteiwr vm2, bydd yn creu tablau catalog SymmetricDS yng nghronfa ddata PostgreSQL hefyd. Os ydych chi'n rhedeg y broses gweinydd sym ar y ddau nod, byddant yn cydlynu â'i gilydd i ddyblygu data o corp-000 i storfa-001. Os byddwn yn cwestiynu pob un o'r 4 tabl ar y ddwy ochr ar ôl ychydig eiliadau, byddwn yn gweld bod yr atgynhyrchu wedi bod yn llwyddiannus. Neu gallwch anfon y bootstrap i store-001 o corp-000 gyda'r gorchymyn canlynol.

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

Ar y pwynt hwn, mae cofnod newydd yn cael ei fewnosod yn y tabl eitem yng nghronfa ddata MySQL ar nod corp-000 (gwesteiwr: vm1) a gellir ei wirio i'w ailadrodd i gronfa ddata PostgreSQL ar nod store-001 (gwesteiwr: vm2). Rydym yn gweld gweithrediad Pull i symud data o corp-000 i storfa-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)

Er mwyn cyflawni gweithrediad gwthio i symud data o storfa-001 i corp-000, rydym yn mewnosod cofnod yn y tabl sale_transaction ac yn gwirio bod atgynhyrchu wedi'i gwblhau.

Y canlyniad.

Rydym yn gweld gosodiad llwyddiannus o ddyblygiad dwy ffordd o'r tablau enghreifftiol rhwng cronfeydd data MySQL a PostgreSQL. I sefydlu atgynhyrchu ar gyfer tablau defnyddwyr newydd, dilynwch y camau canlynol. Rydym yn creu tabl t1 er enghraifft ac yn sefydlu ei reolau atgynhyrchu fel a ganlyn. Felly rydym yn sefydlu atgynhyrchu yn unig o corp-000 i storfa-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)

Yna caiff y ffurfweddiad ei hysbysu am y newid sgema, h.y. ychwanegu tabl newydd, trwy ddefnyddio'r gorchymyn symadmin gyda'r ddadl sync-sbardunwyr, sy'n ail-greu'r sbardunau i gyd-fynd â diffiniadau'r tabl. Mae Send-schema yn cael ei redeg i anfon newidiadau sgema i store-001, ac mae tabl t1 yn cael ei ailadrodd.

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

Manteision SymmetricDS

Gosod a chyfluniad hawdd, gan gynnwys set barod o ffeiliau gyda pharamedrau ar gyfer creu cynllun gyda thri neu ddau nod.
Cronfeydd data traws-lwyfan ac annibyniaeth platfform, gan gynnwys gweinyddwyr, gliniaduron a dyfeisiau symudol.
Dyblygwch unrhyw gronfa ddata i unrhyw gronfa ddata arall yn lleol, ar y WAN, neu yn y cwmwl.
Y gallu i weithio'n optimaidd gyda chwpl o gronfeydd data neu filoedd er mwyn eu hailadrodd yn hawdd.
Fersiwn taledig gyda GUI a chefnogaeth ragorol.

Anfanteision SymmetricDS

Mae'n rhaid i chi ddiffinio'r rheolau a chyfeiriad y dyblygu ar y llinell orchymyn â llaw trwy ddatganiadau SQL i lwytho'r tablau catalog, a all fod yn anghyfleus.
Gall sefydlu llawer o dablau ar gyfer atgynhyrchu fod yn ddiflas oni bai eich bod yn defnyddio sgriptiau i greu datganiadau SQL sy'n diffinio'r rheolau a chyfeiriad yr atgynhyrchu.
Mae gormod o wybodaeth yn y logiau, ac weithiau mae angen i chi lanhau'r ffeil log fel nad yw'n cymryd gormod o le.

Crynodeb o SymmetricDS

Mae SymmetricDS yn caniatáu ichi sefydlu atgynhyrchu dwy ffordd rhwng dau, tri, neu hyd yn oed sawl mil o nodau er mwyn atgynhyrchu a chydamseru ffeiliau. Mae'n offeryn unigryw sy'n cyflawni llawer o dasgau ar ei ben ei hun, megis adfer data yn awtomatig ar ôl amser segur hir ar nod, cyfathrebu diogel ac effeithlon rhwng nodau dros HTTPS, rheoli gwrthdaro awtomatig yn seiliedig ar set o reolau, ac ati. Mae SymmetricDS yn ailadrodd rhwng unrhyw gronfeydd data, felly, gellir ei ddefnyddio ar gyfer amrywiaeth eang o senarios, gan gynnwys mudo, uwchraddio, dosbarthu, hidlo, a thrawsnewid data ar draws llwyfannau.

Mae'r enghraifft yn seiliedig ar y swyddog canllaw cyflym gan SymmetricDS. YN llawlyfr defnyddiwr Yn disgrifio'n fanwl y cysyniadau amrywiol sy'n gysylltiedig â sefydlu atgynhyrchu gyda SymmetricDS.

Ffynhonnell: hab.com

Ychwanegu sylw