በ PostgreSQL እና MySQL መካከል ማባዛት።

በ PostgreSQL እና MySQL መካከል ማባዛት።

በ PostgreSQL እና MySQL መካከል ስለ ተሻጋሪ ማባዛት እንዲሁም በእነዚህ ሁለት የውሂብ ጎታ አገልጋዮች መካከል የመስቀል ማባዛትን የማዋቀር ዘዴዎችን በአጭሩ እናገራለሁ ። የተደጋገሙ ዳታቤዞች በተለምዶ ተመሳሳይ የውሂብ ጎታዎች ተብለው ይጠራሉ፣ እና ይህ ከአንድ RDBMS አገልጋይ ወደ ሌላ ለመሸጋገር ምቹ ዘዴ ነው።

PostgreSQL እና MySQL የውሂብ ጎታዎች በተለምዶ እንደ ግንኙነት ይቆጠራሉ፣ ነገር ግን ከተጨማሪ ቅጥያዎች ጋር የNoSQL ችሎታዎችን ይሰጣሉ። እዚህ በ PostgreSQL እና MySQL መካከል ስለ ማባዛት ከተዛማጅ የውሂብ ጎታ አስተዳደር እይታ እንወያያለን።

በመረጃ ቋት አገልጋዮች ፣ ጥቅማ ጥቅሞች ፣ ገደቦች እና የአጠቃቀም ጉዳዮች መካከል ማባዛትን የማዋቀር ሀሳብ እንዲኖሮት ሁሉንም የውስጥ አካላትን ፣ መሰረታዊ መርሆችን ብቻ አንገልጽም ።

በተለምዶ፣ በሁለት ተመሳሳይ የውሂብ ጎታ አገልጋዮች መካከል ማባዛት የሚከናወነው በሁለትዮሽ ሁነታ ወይም በጌታ (በአሳታሚ፣ ማስተር ወይም ንቁ) እና በባሪያ (ተመዝጋቢ፣ ተጠባባቂ ወይም ተገብሮ) መካከል ባሉ ጥያቄዎች ነው። የማባዛት ዓላማ በተጠባባቂው ጎን የዋናውን የውሂብ ጎታ ቅጽበታዊ ቅጂ ማቅረብ ነው። በዚህ አጋጣሚ መረጃ ከጌታ ወደ ባሪያ ማለትም ከገባሪ ወደ ተገብሮ ይተላለፋል ምክንያቱም ማባዛት የሚከናወነው በአንድ አቅጣጫ ብቻ ነው። ነገር ግን በሁለቱ የውሂብ ጎታዎች መካከል ማባዛትን በሁለቱም አቅጣጫዎች ማቀናበር ይችላሉ, ስለዚህም ውሂብ ከባሪያው ወደ ጌታው በንቁ-ንቁ ውቅር ውስጥ ይተላለፋል. ይህ ሁሉ፣ ማባዛትን ጨምሮ፣ በሁለት ወይም ከዚያ በላይ በሆኑ ተመሳሳይ የመረጃ ቋቶች አገልጋዮች መካከል ሊኖር ይችላል።የነቃ-ገባሪ ወይም ገባሪ-ተለዋዋጭ ውቅር እንደፍላጎቱ፣በመጀመሪያው ውቅር ውስጥ እንዲህ ያሉ ችሎታዎች መገኘት ወይም የውጭ ማስተካከያ መፍትሄዎችን እና ነባር ግብይትን በመጠቀም ላይ የተመሠረተ ነው። - ጠፍቷል .

የተገለጸው ውቅር በተለያዩ የውሂብ ጎታ አገልጋዮች መካከል ይቻላል. አገልጋዩ የተባዛ ውሂብ ከሌላ የውሂብ ጎታ አገልጋይ እንዲቀበል መዋቀር እና አሁንም የተባዛው ውሂብ ቅጽበታዊ ቅጽበታዊ ገጽ እይታዎችን ማቆየት ይችላል። MySQL እና PostgreSQL አብዛኛዎቹን እነዚህን አወቃቀሮች በአገርኛ ወይም በሶስተኛ ወገን ቅጥያዎች ያቀርባሉ፣የሁለትዮሽ ሎግ ዘዴዎችን፣ የዲስክ መቆለፊያዎችን፣ እና መግለጫ እና ረድፎችን መሰረት ያደረጉ ዘዴዎችን ጨምሮ።

ከአንድ የውሂብ ጎታ አገልጋይ ወደ ሌላ ለአንድ ጊዜ ፍልሰት በ MySQL እና PostgreSQL መካከል መሻገር ያስፈልጋል። እነዚህ የውሂብ ጎታዎች የተለያዩ ፕሮቶኮሎችን ስለሚጠቀሙ በቀጥታ ማገናኘት አይችሉም። የውሂብ ልውውጥን ለማመቻቸት፣ እንደ pg_chameleon ያለ የውጭ ክፍት ምንጭ መሳሪያ መጠቀም ይችላሉ።

pg_chameleon ምንድን ነው?

pg_chameleon በ Python 3 ውስጥ ከ MySQL ወደ PostgreSQL የማባዛት ስርዓት ነው. የ mysql-replication ክፍት ምንጭ ላይብረሪ ይጠቀማል, እንዲሁም በ Python ውስጥ. የረድፍ ምስሎች ከ MySQL ሰንጠረዦች ተሰርስረው እንደ JSONB ነገሮች በPostgreSQL ዳታቤዝ ውስጥ ይቀመጣሉ እና በpl/pgsql ተግባር ዲኮድ ተደርገው በPostgreSQL ዳታቤዝ ውስጥ ይጫወታሉ።

የpg_chameleon ባህሪዎች

ከተመሳሳዩ ዘለላ ውስጥ ያሉ በርካታ የ MySQL መርሃግብሮች ከአንድ-ለብዙ ውቅር ጋር ወደ አንድ የ PostgreSQL ኢላማ ዳታቤዝ ሊባዙ ይችላሉ
የምንጭ እና የዒላማ ንድፍ ስሞች ተመሳሳይ ሊሆኑ አይችሉም።
የማባዛት ውሂብ ከ MySQL cascading ቅጂ ሊወጣ ይችላል።
ስህተቶችን ማባዛት ወይም ማመንጨት የማይችሉ ሰንጠረዦች አይካተቱም።
እያንዳንዱ የማባዛት ተግባር በዲሞኖች ቁጥጥር ይደረግበታል።
በ YAML ላይ ተመስርተው በመለኪያዎች እና በማዋቀር ፋይሎች ይቆጣጠሩ።

ለምሳሌ:

አስተናጋጅ
እ.ኤ.አ.
እ.ኤ.አ.

የስርዓተ ክወና ስሪት
CentOS ሊኑክስ 7.6 x86_64
CentOS ሊኑክስ 7.5 x86_64

የውሂብ ጎታ አገልጋይ ስሪት
የ MySQL 5.7.26
PostgreSQL 10.5

ዲቢ ወደብ
3306
5433

የአይፒ አድራሻ
192.168.56.102
192.168.56.106

በመጀመሪያ pg_chameleon ን ለመጫን ሁሉንም አስፈላጊ ክፍሎች ያዘጋጁ. ይህ ምሳሌ Python 3.6.8 ተጭኗል፣ እሱም ምናባዊ አካባቢን ይፈጥራል እና ያነቃዋል።

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

Python3.6 በተሳካ ሁኔታ ከተጫነ፣ የተቀሩት መስፈርቶች መጠናቀቅ አለባቸው፣ ለምሳሌ ምናባዊ አካባቢ መፍጠር እና ማንቃት። እንዲሁም የፒፕ ሞጁል ወደ የቅርብ ጊዜው ስሪት ተዘምኗል እና pg_chameleon ን ለመጫን ያገለግላል። ከታች ያሉት ትዕዛዞች ሆን ብለው pg_chameleon 2.0.9 ን ይጫኑ, ምንም እንኳን የቅርብ ጊዜው ስሪት 2.0.10 ቢሆንም. በተዘመነው ስሪት ውስጥ አዳዲስ ስህተቶችን ለማስወገድ ይህ አስፈላጊ ነው።

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

ከዚያም pg_chameleonን ለማንቃት እና ነባሪ የውቅረት ማውጫዎችን እና ፋይሎችን ለመፍጠር ከset_configuration_files ክርክር ጋር pg_chameleon እንጠራዋለን (chameleon ትዕዛዝ ነው)።

(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

አሁን የ config-example.yml እንደ default.yml ቅጂ እንሰራለን ስለዚህም ነባሪ የውቅር ፋይል ይሆናል። ለዚህ ምሳሌ የናሙና ማዋቀሪያ ፋይል ከዚህ በታች ቀርቧል።

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

በዚህ ምሳሌ ውስጥ ያለው የማዋቀሪያ ፋይል ከምንጩ እና ከዒላማ አካባቢዎች ጋር የሚዛመዱ ጥቃቅን ማሻሻያዎች ያሉት የናሙና pg_chameleon ፋይል ነው፣ እና ከታች የውቅረት ፋይል የተለያዩ ክፍሎች አጠቃላይ እይታ አለ።

የ default.yml ውቅር ፋይል እንደ የመቆለፊያ ፋይሉ ቦታ ፣ የምዝግብ ማስታወሻው የሚገኝበት ቦታ ፣ የምዝግብ ማስታወሻዎች የማከማቻ ጊዜ ፣ ​​ወዘተ ያሉ ቅንብሮችን የሚቆጣጠሩበት የአለምአቀፍ መቼቶች (አለም አቀፍ መቼቶች) ክፍል አለው ። ቀጥሎ የሚመጣው መሻር ዓይነት ይመጣል። ክፍል፣ በማባዛት ወቅት ዓይነቶችን ለመሻር የተደነገገው ደንብ። ነባሪ ምሳሌ ጥቃቅን(1)ን ወደ ቡሊያን የሚቀይር አይነት የመሻር ህግ ይጠቀማል። በሚቀጥለው ክፍል, ከታለመው የውሂብ ጎታ ጋር የመገናኘት ዝርዝሮችን እንገልጻለን. በእኛ ሁኔታ፣ ይህ የPostgreSQL ዳታቤዝ ነው፣ እንደ pg_conn የተወከለው። በመጨረሻው ክፍል የምንጭ መረጃን ማለትም የምንጭ ዳታቤዝ የግንኙነት መለኪያዎችን ፣የምንጩን እና የዒላማ የውሂብ ጎታዎችን የካርታ እቅድ ፣የሚዘለሉ ሰንጠረዦችን ፣ጊዜ ማብቂያ ፣ማህደረ ትውስታን ፣የጥቅል መጠንን እንገልፃለን። "ምንጮች" ብዙ ቁጥር መሆኑን ልብ ይበሉ፣ ይህም ማለት ብዙ-ለአንድ ውቅር ለማዘጋጀት በርካታ የምንጭ ዳታቤዞችን ወደ አንድ ኢላማ ማከል እንችላለን ማለት ነው።

በምሳሌው ላይ ያለው world_x ዳታቤዝ የ MySQL ማህበረሰብ ለአብነት የሚጠቁሙ 4 ሰንጠረዦችን ይዟል። ሊወርድ ይችላል። እዚህ. የናሙና ዳታቤዙ እንደ ታር እና የታመቀ ማህደር ሲሆን ሕብረቁምፊዎችን ለመፍጠር እና ለማስመጣት መመሪያዎችን የያዘ ነው።

በ MySQL እና PostgreSQL የውሂብ ጎታዎች ውስጥ usr_replica ተመሳሳይ ስም ያለው ልዩ ተጠቃሚ ተፈጥሯል። MySQL ለሁሉም የተባዙ ሠንጠረዦች ተጨማሪ የማንበብ መዳረሻ ይሰጠዋል።

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;

በ PostgreSQL በኩል፣ ከ MySQL ዳታቤዝ ለውጦችን የሚቀበል db_replica ዳታቤዝ ይፈጠራል። በPostgreSQL ውስጥ ያለው የ usr_replica ተጠቃሚ የሁለቱ ሼማዎች pgworld_x እና sch_chameleon ባለቤት ሆኖ ይዋቀራል፣ እነሱም እንደቅደም ተከተላቸው የተባዙ ሠንጠረዦች እና የማባዛት ካታሎግ ሠንጠረዦች። የcreat_replica_schema ነጋሪ እሴት ለራስ-ሰር ውቅር ተጠያቂ ነው፣ ከታች እንደሚታየው።

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

የ MySQL ዳታቤዝ ከታች እንደሚታየው ለመድገም ዝግጁ እንዲሆን ከአንዳንድ ለውጦች ጋር ተዋቅሯል። ለውጦቹ ተግባራዊ እንዲሆኑ የውሂብ ጎታውን አገልጋይ እንደገና ማስጀመር ያስፈልግዎታል።

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

አሁን የ pg_chameleon ትዕዛዞችን በሚፈጽሙበት ጊዜ ምንም ችግር እንዳይኖር ከሁለቱም የውሂብ ጎታ አገልጋዮች ጋር ያለውን ግንኙነት ማረጋገጥ አስፈላጊ ነው.

በPostgreSQL ኖድ ላይ፡-

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

በ MySQL አንጓ ላይ፡-

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

የሚቀጥሉት ሶስት pg_chameleon (chameleon) ትዕዛዞች አካባቢን ያዘጋጃሉ, ምንጩን ይጨምሩ እና ቅጂውን ያስጀምሩ. የcreat_replica_schema ክርክር ለpg_chameleon ነባሪ እቅድ (sch_chameleon) እና የማባዛት እቅድ (pgworld_x) በPostgreSQL ዳታቤዝ ውስጥ ይፈጥራል፣ እንደተናገርነው። የ add_source ክርክር የውቅረት ፋይሉን (default.yml) በማንበብ የምንጭ ዳታቤዝ ያክላል፣ በእኛ ሁኔታ mysql ነው፣ እና init_replica በማዋቀር ፋይሉ ውስጥ ባሉ ቅንጅቶች ላይ በመመስረት ውቅሩን ይጀምራል።

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

የእነዚህ ሶስት ትዕዛዞች ውጤት ስኬታቸውን በግልፅ ያሳያል። ሁሉም አለመሳካቶች ወይም የአገባብ ስህተቶች በቀላል እና ለመረዳት በሚቻሉ መልእክቶች ውስጥ ችግሮችን እንዴት ማስተካከል እንደሚችሉ ፍንጭ ይጠቁማሉ።

በመጨረሻ፣ በ start_replica ማባዛት እንጀምራለን እና የስኬት መልእክት እናገኛለን።

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

የማባዛት ሁኔታ በ show_status ክርክር ሊጠየቅ ይችላል፣ እና ስህተቶች በ show_errors ክርክር ሊታዩ ይችላሉ።

ውጤት

ቀደም ብለን እንደተናገርነው ዲሞኖች እያንዳንዱን የማባዛት ተግባር ያስተዳድራሉ። እነሱን ለማየት ከዚህ በታች እንደሚታየው የሂደቱን ሰንጠረዥ በሊኑክስ ፒኤስ ትዕዛዝ ይጠይቁ።

ውጤት

ከታች እንደሚታየው በእውነተኛ ጊዜ እስክንፈትነው ድረስ ማባዛት እንደተዋቀረ አይቆጠርም። ጠረጴዛ እንፈጥራለን፣ ሁለት መዝገቦችን ወደ MySQL ዳታቤዝ አስገባን እና የsync_tables ክርክርን በpg_chameleon ደውለን ዴሞኖችን ለማዘመን እና ሰንጠረዡን ከመዝገቦቹ ጋር ወደ 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.

የፈተናውን ውጤት ለማረጋገጥ ሰንጠረዡን ከ PostgreSQL ዳታቤዝ እንጠይቃለን እና ረድፎቹን እናወጣለን።

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

እየተሰደድን ከሆነ፣ የሚከተሉት የpg_chameleon ትዕዛዞች የስደት መጨረሻ ይሆናሉ። የሁሉም የዒላማ ሠንጠረዦች ረድፎች እንደተደጋገሙ ካረጋገጥን በኋላ ትእዛዞቹ መተግበር አለባቸው፣ ይህም በጥሩ ሁኔታ የፈለሰ PostgreSQL የውሂብ ጎታ ከምንጩ ዳታቤዝ ወይም የማባዛት ዕቅድ (sch_chameleon) ጋር ምንም ማጣቀሻ የሌለው ነው።

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

በሚከተሉት ትእዛዞች እንደ አማራጭ ዋናውን ውቅር እና የማባዛት እቅድ መሰረዝ ይችላሉ።

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

የpg_chameleon ጥቅሞች

ቀላል ማዋቀር እና ማዋቀር።
ግልጽ የስህተት መልዕክቶች ጋር ምቹ መላ ፍለጋ እና ያልተለመደ ማወቂያ።
የቀረውን ውቅረት ሳይቀይሩ ከመነሻው በኋላ ተጨማሪ ልዩ ሠንጠረዦችን ወደ ማባዛት መጨመር ይቻላል.
ለአንድ ዒላማ ዳታቤዝ ብዙ የምንጭ ዳታቤዞችን ማዋቀር ይቻላል፣ እና ከአንድ ወይም ከዛ በላይ MySQL ዳታቤዞችን ወደ አንድ PostgreSQL ዳታቤዝ እያዋሃዱ ከሆነ ይህ በጣም ምቹ ነው።
የተመረጡ ሰንጠረዦችን ላለመድገም መምረጥ ይችላሉ.

የpg_chameleon ጉዳቶች

በ MySQL 5.5 እና ከዚያ በላይ እንደ ምንጭ እና PostgreSQL 9.5 እና ከዚያ በላይ እንደ ኢላማ ዳታቤዝ ብቻ ነው የሚደገፈው።
እያንዳንዱ ሠንጠረዥ ዋና ወይም ልዩ ቁልፍ ሊኖረው ይገባል፣ አለበለዚያ ሠንጠረዦቹ የተጀመሩት በ init_replica ሂደት ውስጥ ነው ግን አልተባዙም።
የአንድ መንገድ ማባዛት - ከ MySQL ወደ PostgreSQL ብቻ። ስለዚህ, ለገቢር-ተለዋዋጭ እቅድ ብቻ ተስማሚ ነው.
ምንጩ የ MySQL ዳታቤዝ ብቻ ሊሆን ይችላል፣ እና ለ PostgreSQL ዳታቤዝ እንደ ምንጭ ያለው ድጋፍ የሙከራ እና ውስን ነው (የበለጠ ለመረዳት) እዚህ)

ጠቅላላ ለ pg_chameleon

በpg_chameleon ውስጥ ያለው የማባዛት ዘዴ የውሂብ ጎታውን ከ MySQL ወደ PostgreSQL ለማዛወር ጥሩ ነው። ትልቁ ጉዳቱ ማባዛት የአንድ መንገድ ብቻ በመሆኑ የመረጃ ቋት ባለሙያዎች ከስደት ውጪ ለሌላ ነገር ሊጠቀሙበት አይችሉም። ነገር ግን የአንድ-መንገድ ማባዛት ችግር በሌላ ክፍት ምንጭ መሳሪያ - SymmetricDS ሊፈታ ይችላል.

በይፋዊው ሰነድ ውስጥ የበለጠ ያንብቡ እዚህ. የትእዛዝ መስመር እርዳታ ማግኘት ይቻላል እዚህ.

የ SymmetricDS አጠቃላይ እይታ

SymmetricDS ማንኛውንም የውሂብ ጎታ ወደ ሌላ ማንኛውም የተለመደ የውሂብ ጎታ የሚደግም ክፍት ምንጭ መሳሪያ ነው፡ Oracle፣ MongoDB፣ PostgreSQL፣ MySQL፣ SQL Server፣ MariaDB፣ DB2፣ Sybase፣ Greenplum፣ Informix፣ H2፣ Firebird እና ሌሎች የደመና ዳታቤዝ ምሳሌዎች ለምሳሌ Redshift እና Azure, ወዘተ. የሚገኙ ባህሪያት፡ የውሂብ ጎታ እና የፋይል ማመሳሰል, ባለብዙ-ማስተር የውሂብ ጎታ ማባዛት, የተጣራ ማመሳሰል, ትራንስፎርሜሽን እና ሌሎች. ይህ የጃቫ መሳሪያ ነው እና መደበኛ ልቀት JRE ወይም JDK (ስሪት 8.0 ወይም ከዚያ በላይ) ያስፈልገዋል። እዚህ በመነሻ ዳታቤዝ ውስጥ ቀስቅሴዎች ላይ የውሂብ ለውጦችን መመዝገብ እና ወደ ተገቢው የዒላማ ዳታቤዝ እንደ ባች መላክ ይችላሉ።

SymmetricDS ችሎታዎች

መሣሪያው ከመድረክ ነፃ ነው, ማለትም ሁለት ወይም ከዚያ በላይ የተለያዩ የውሂብ ጎታዎች ውሂብ ሊለዋወጡ ይችላሉ.
ተዛማጅ የውሂብ ጎታዎች የውሂብ ለውጦችን በመመዝገብ ይመሳሰላሉ, እና በፋይል ስርዓቶች ላይ የተመሰረቱ የውሂብ ጎታዎች የፋይል ማመሳሰልን ይጠቀማሉ.
የመግፋት እና የመጎተት ዘዴዎችን በመጠቀም ባለ ሁለት መንገድ ማባዛት በደንቦች ስብስብ።
ዝቅተኛ የመተላለፊያ ይዘት ባላቸው ደህንነታቸው በተጠበቁ አውታረ መረቦች እና አውታረ መረቦች ላይ የውሂብ ማስተላለፍ ይቻላል.
ከተሳካ እና አውቶማቲክ የግጭት አፈታት በኋላ የመስቀለኛ መንገዶችን ሥራ በሚቀጥልበት ጊዜ በራስ-ሰር ማገገም።
ከደመና ጋር ተኳሃኝ እና ቀልጣፋ የኤፒአይዎች ቅጥያ።

ለምሳሌ:

SymmetricDS ከሁለት መንገዶች በአንዱ ሊዋቀር ይችላል፡-
በሁለት ባሪያ (ልጅ) አንጓዎች መካከል የውሂብ መባዛትን በማዕከላዊ የሚያስተባብር ዋና (የወላጅ) ኖድ እና በልጆች ኖዶች መካከል የመረጃ ልውውጥ የሚከናወነው በወላጅ በኩል ብቻ ነው።
ገባሪ መስቀለኛ መንገድ (መስቀለኛ መንገድ 1) ከሌላ ገባሪ መስቀለኛ መንገድ (መስቀለኛ መንገድ 2) ጋር ለመራባት መነጋገር ይችላል።

በሁለቱም አማራጮች የውሂብ ልውውጥ ፑሽ እና ፑል በመጠቀም ይከሰታል. በዚህ ምሳሌ ውስጥ የንቁ-ንቁ ውቅርን እንመለከታለን. አጠቃላይ አርክቴክቸርን ለመግለጽ በጣም ረጅም ነው፣ ስለዚህ አጥኑ መመሪያስለ SymmetricDS መሳሪያ የበለጠ ለማወቅ።

SymmetricDS ን መጫን ቀላል ነው፡ ክፍት ምንጭ ዚፕ ፋይል ያውርዱ እዚህ እና በፈለጉት ቦታ ያውጡት። የሚከተለው ሠንጠረዥ በዚህ ምሳሌ ውስጥ የSymmetricDS የመጫኛ ቦታ እና ስሪት፣ እንዲሁም የውሂብ ጎታ ስሪቶችን፣ የሊኑክስ ስሪቶችን፣ የአይፒ አድራሻዎችን እና የሁለቱም አንጓዎችን ወደቦች ይዘረዝራል።

አስተናጋጅ
እ.ኤ.አ.
እ.ኤ.አ.

የስርዓተ ክወና ስሪት
CentOS ሊኑክስ 7.6 x86_64
CentOS ሊኑክስ 7.6 x86_64

የውሂብ ጎታ አገልጋይ ስሪት
የ MySQL 5.7.26
PostgreSQL 10.5

ዲቢ ወደብ
3306
5832

የአይፒ አድራሻ
192.168.1.107
192.168.1.112

SymmetricDS ስሪት
ሲሜትሪክዲኤስ 3.9
ሲሜትሪክዲኤስ 3.9

SymmetricDS የመጫኛ መንገድ
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20

SymmetricDS አስተናጋጅ ስም
ኮር-000
መደብር-001

እዚህ SymmetricDS በ /usr/local/symmetric-server-3.9.20 እንጭነዋለን እና የተለያዩ ንዑስ ማውጫዎች እና ፋይሎች እዚያ ይከማቻሉ። በንዑስ ማውጫዎች ናሙናዎች እና ሞተሮች ላይ ፍላጎት አለን. የናሙናዎች ማውጫው የናሙና ማዋቀሪያ ፋይሎችን ከኖድ ባህሪያት እና እንዲሁም ማሳያውን በፍጥነት ለመጀመር የ SQL ስክሪፕቶችን ይዟል።

በናሙናዎች ማውጫ ውስጥ ሶስት የማዋቀሪያ ፋይሎችን ከኖድ ባህሪያት ጋር እናያለን - ስሙ በአንድ የተወሰነ እቅድ ውስጥ የመስቀለኛ ክፍሉን ባህሪ ያሳያል.

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

SymmetricDS ለመሠረታዊ 3 መስቀለኛ መንገድ ንድፍ (አማራጭ 1) ሁሉም አስፈላጊ የማዋቀሪያ ፋይሎች አሉት እና ተመሳሳይ ፋይሎች ለ 2 መስቀለኛ መንገድ ንድፍ (አማራጭ 2) ጥቅም ላይ ሊውሉ ይችላሉ። አስፈላጊውን የውቅር ፋይል ከናሙናዎች ማውጫ ወደ vm1 አስተናጋጅ ወደ ሞተሮች ይቅዱ። እንደሚከተለው ይሆናል፡-

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

ይህ መስቀለኛ መንገድ በSymmetricDS ውቅር ውስጥ corp-000 ይባላል እና የመረጃ ቋቱ ግንኙነቱ የሚከናወነው በ mysql jdbc ሾፌር ከላይ ያለውን የግንኙነት ሕብረቁምፊ እና የመግቢያ ምስክርነቶችን ይጠቀማል። ከተባዛ_ዲቢ ዳታቤዝ ጋር እየተገናኘን ነው እና በዕቅድ በሚፈጠርበት ጊዜ ሰንጠረዦች ይፈጠራሉ። sync.url ለማመሳሰል የመስቀለኛ መንገድ ማገናኛን ያሳያል።

በአስተናጋጅ vm2 ላይ ያለው መስቀለኛ መንገድ 2 እንደ መደብር-001 ተዋቅሯል እና የተቀረው ከዚህ በታች ባለው node.properties ፋይል ውስጥ ተገልጿል. የመደብር-001 መስቀለኛ መንገድ የ PostgreSQL ዳታቤዝ ያሂዳል፣ እና pgdb_replica ለመድገም ዳታቤዝ ነው። registration.url vm2 አስተናጋጅ vm1 አስተናጋጅን እንዲያነጋግር እና የውቅረት ዝርዝሮችን ከእሱ እንዲያገኝ ይፈቅዳል።

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

የተጠናቀቀው የSymmetricDS ምሳሌ በሁለት የውሂብ ጎታ አገልጋዮች (ሁለት አንጓዎች) መካከል ባለ ሁለት መንገድ ማባዛትን ለማዘጋጀት አማራጮችን ይዟል። ከዚህ በታች ያሉት እርምጃዎች በአስተናጋጅ vm1 (corp-000) ላይ ይከናወናሉ ይህም ከ 4 ሰንጠረዦች ጋር ናሙና ንድፍ ይፈጥራል. ከዚያም በሲምአድሚን ትዕዛዝ ፍጠር-ሲም-ሠንጠረዦችን መተግበር በኖዶች መካከል የማባዛት ደንቦች እና አቅጣጫዎች የሚቀመጡበት ማውጫ ሠንጠረዦችን ይፈጥራል። በመጨረሻም, የናሙና መረጃው በጠረጴዛዎች ውስጥ ይጫናል.

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

በምሳሌው ውስጥ የንጥል እና የንጥል_የሽያጭ_ዋጋ ሠንጠረዦች ከcorp-000 ወደ ማከማቻ-001 ለመድገም በራስ-ሰር ተዋቅረዋል፣ እና የሽያጭ ሠንጠረዦች (የሽያጭ_ግብይት እና የሽያጭ_መመለሻ_ላይን_ዕቃ) ከመደብር-001 ወደ corp-000 ለመድገም በራስ-ሰር ተዋቅረዋል። አሁን ከcorp-2 መረጃ ለመቀበል ለማዘጋጀት በPostgreSQL የውሂብ ጎታ በአስተናጋጅ vm001 (store-000) ላይ ንድፍ እንፈጥራለን።

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

በvm1 ላይ ያለው MySQL ዳታቤዝ የናሙና ሠንጠረዦች እና የሲምሜትሪክDS ካታሎግ ሠንጠረዥ እንዳለው ማረጋገጥዎን እርግጠኛ ይሁኑ። የSymmetricDS የስርዓት ሰንጠረዦች (ከሲም_ ቅድመ ቅጥያ ጋር) በአሁኑ ጊዜ የሚገኙት በcorp-000 node ላይ ብቻ ነው፣ ምክንያቱም እዚያ ነው የፍጠር-sym-tables ትዕዛዝን ያስሄድን እና ማባዛትን የምንመራው። እና በመደብር-001 መስቀለኛ መንገድ ውስጥ ባለው የውሂብ ጎታ ውስጥ ያለ መረጃ 4 ምሳሌ ሰንጠረዦች ብቻ ይኖራሉ.

ሁሉም። ከታች እንደሚታየው በሁለቱም አንጓዎች ላይ የሲም አገልጋይ ሂደቶችን ለማሄድ አከባቢው ዝግጁ ነው።

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

የምዝግብ ማስታወሻዎች ወደ የጀርባ መዝገብ ፋይል (symmetric.log) በመዝገብ አቃፊ ውስጥ SymmetricDS በተጫነበት ማውጫ ውስጥ እንዲሁም ወደ መደበኛው ውፅዓት ይላካሉ። የሲም አገልጋይ አሁን በመደብር-001 መስቀለኛ መንገድ ላይ ሊጀመር ይችላል።

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

የሲም አገልጋይ ሂደቱን በvm2 አስተናጋጅ ላይ ካስኬዱ፣ በ PostgreSQL የውሂብ ጎታ ውስጥም የSymmetricDS ካታሎግ ሰንጠረዦችን ይፈጥራል። በሁለቱም ኖዶች ላይ የሲም ሰርቨር ሂደትን የምታካሂዱ ከሆነ ከcorp-000 ወደ ማከማቻ-001 መረጃ ለመድገም እርስ በርስ ይተባበራሉ። ከጥቂት ሰከንዶች በኋላ በሁለቱም በኩል ሁሉንም 4 ጠረጴዛዎች ከጠየቅን ፣ ማባዛቱ የተሳካ መሆኑን እናያለን። ወይም bootstrapን በሚከተለው ትዕዛዝ ከcorp-001 ወደ store-000 መላክ ይችላሉ።

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

በዚህ ነጥብ ላይ, አዲስ መዝገብ በ MySQL ዳታቤዝ ውስጥ ባለው የንጥል ሰንጠረዥ ውስጥ በ node corp-000 (አስተናጋጅ: vm1) ውስጥ ገብቷል እና በ node store-001 (አስተናጋጅ: vm2) ወደ PostgreSQL የውሂብ ጎታ ለመድገም ማረጋገጥ ይቻላል. መረጃን ከcorp-000 ወደ ማከማቻ-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)

መረጃን ከሱቅ-001 ወደ corp-000 ለማንቀሳቀስ የግፋ ኦፕሬሽንን ለማካሄድ በሽያጭ_ግብይት ሠንጠረዥ ውስጥ መዝገብ አስገብተን ማባዛቱን እናረጋግጣለን።

ውጤት

በ MySQL እና PostgreSQL የውሂብ ጎታዎች መካከል የምሳሌ ሰንጠረዦችን በሁለት መንገድ ማባዛት በተሳካ ሁኔታ ማዋቀር እናያለን። ለአዲስ የተጠቃሚ ሠንጠረዦች ማባዛትን ለማዘጋጀት የሚከተሉትን ደረጃዎች ያከናውኑ። ለምሳሌ ሰንጠረዥ t1 እንፈጥራለን እና የማባዛት ደንቦቹን እንደሚከተለው እናዘጋጃለን. ስለዚህ ከ corp-000 ወደ መደብር-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)

ከዚያም አወቃቀሩ ስለ ንድፍ ለውጥ ማለትም አዲስ ሠንጠረዥ መጨመር የሲምአድሚን ትዕዛዙን ከማመሳሰል-ቀስቃሽ ክርክር ጋር በመጠቀም ያሳውቃል, ይህም ቀስቅሾቹን ከሠንጠረዥ ፍቺዎች ጋር ለማዛመድ እንደገና ይፈጥራል. የሼማ ለውጦችን ወደ ማከማቻ-001 ለመላክ Send-schema ይሰራል፣ እና ሠንጠረዥ t1 ተደግሟል።

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

የSymmetricDS ጥቅሞች

ከሶስት ወይም ከሁለት አንጓዎች ጋር እቅድ ለመፍጠር ግቤቶችን የያዘ ዝግጁ የሆነ የፋይል ስብስብን ጨምሮ ቀላል ጭነት እና ውቅር።
ሰርቨሮች፣ ላፕቶፖች እና ተንቀሳቃሽ መሳሪያዎች ጨምሮ የመድረክ-መድረክ ዳታቤዝ እና የመድረክ ነጻነት።
ማንኛውንም ዳታቤዝ በአገር ውስጥ፣ በ WAN ወይም በደመና ውስጥ ወዳለ ማንኛውም የውሂብ ጎታ ይድገሙት።
ለቀላል ማባዛት ከሁለት የውሂብ ጎታዎች ወይም ከብዙ ሺዎች ጋር በጥሩ ሁኔታ የመሥራት ችሎታ።
የሚከፈልበት ስሪት በ GUI እና በጣም ጥሩ ድጋፍ።

የSymmetricDS ጉዳቶች

የካታሎግ ሰንጠረዦችን ለመጫን በትእዛዝ መስመሩ ላይ የማባዛት መመሪያዎችን እና አቅጣጫዎችን በ SQL መግለጫዎች እራስዎ መግለፅ አለብዎት ፣ ይህ ደግሞ የማይመች ነው።
የ SQL መግለጫዎችን ለመፍጠር ስክሪፕቶችን ካልተጠቀምክ በስተቀር ብዙ ሠንጠረዦችን ለማባዛት ማዘጋጀት አሰልቺ ሊሆን ይችላል።
በምዝግብ ማስታወሻዎች ውስጥ በጣም ብዙ መረጃ አለ, እና አንዳንድ ጊዜ ብዙ ቦታ እንዳይወስድ የሎግ ፋይሉን ማጽዳት ያስፈልግዎታል.

የSymmetricDS ማጠቃለያ

SymmetricDS ፋይሎችን ለመድገም እና ለማመሳሰል በሁለት፣ በሶስት ወይም በብዙ ሺዎች መካከል ባለ ሁለት መንገድ ማባዛትን እንዲያዘጋጁ ይፈቅድልዎታል። በራሱ ብዙ ተግባራትን የሚያከናውን ልዩ መሳሪያ ነው ለምሳሌ በመስቀለኛ መንገድ ላይ ለረጅም ጊዜ ከዘገየ በኋላ መረጃን በራስ ሰር መልሶ ማግኘት፣ በኤችቲቲፒኤስ ላይ ባሉ አንጓዎች መካከል ደህንነቱ የተጠበቀ እና ቀልጣፋ ግንኙነት፣ በህጎች ስብስብ ላይ የተመሰረተ አውቶማቲክ የግጭት አስተዳደር እና የመሳሰሉት። SymmetricDS ይደግማል። በማናቸውም የመረጃ ቋቶች መካከል፣ ስለዚህ፣ ስደትን፣ ማሻሻያን፣ ስርጭትን፣ ማጣራትን እና በመድረክ ላይ ያሉ የመረጃ ለውጦችን ጨምሮ ለብዙ አይነት ሁኔታዎች ሊያገለግል ይችላል።

ምሳሌው በኦፊሴላዊው ላይ የተመሰረተ ነው ፈጣን መመሪያ በSymmetricDS. ውስጥ የተጠቃሚ መመሪያ ከSymmetricDS ጋር ማባዛትን ለማዘጋጀት የተካተቱትን የተለያዩ ፅንሰ-ሀሳቦች በዝርዝር ይገልጻል።

ምንጭ: hab.com

አስተያየት ያክሉ