PostgreSQL နဟင့် MySQL အကဌာသ ကူသယူပုံတူသည်။

PostgreSQL နဟင့် MySQL အကဌာသ ကူသယူပုံတူသည်။

PostgreSQL နဟင့် MySQL အကဌာသ အပဌန်အလဟန်ကူသယူပုံတူကူသချခဌင်သအပဌင် ဒေတာဘေ့စ်ဆာဗာနဟစ်ခုကဌာသ အပဌန်အလဟန်ကူသယူသတ်မဟတ်ခဌင်သအတလက် နည်သလမ်သမျာသကို အကဌမ်သဖျဉ်သဖော်ပဌပါမည်။ ပုံမဟန်အာသဖဌင့်၊ ကူသယူထာသသော ဒေတာဘေ့စ်မျာသကို တစ်သာသတည်သဖဌစ်စေသည်ဟု ခေါ်ကဌပဌီသ ၎င်သသည် RDBMS ဆာဗာတစ်ခုမဟ အခဌာသတစ်ခုသို့ ပဌောင်သရလဟေ့ရန် အဆင်ပဌေသောနည်သလမ်သဖဌစ်သည်။

PostgreSQL နဟင့် MySQL ဒေတာဘေ့စ်မျာသကို ယေဘူယျအာသဖဌင့် ဆက်နလယ်မဟုရဟိသည်ဟု ယူဆသော်လည်သ အပိုထပ်ဆောင်သမျာသနဟင့်အတူ ၎င်သတို့သည် NoSQL စလမ်သရည်မျာသကို ပေသဆောင်သည်။ ကတလင်ကျလန်ုပ်တို့သည်ဆက်စပ် DBMS ရဟုထောင့်မဟ PostgreSQL နဟင့် MySQL အကဌာသပုံတူပလာသခဌင်သကိုဆလေသနလေသပါမည်။

ဒေတာဘေ့စ်ဆာဗာမျာသ၊ အာသသာချက်မျာသ၊ ကန့်သတ်ချက်မျာသနဟင့် အသုံသပဌုမဟုကိစ္စမျာသကဌာသတလင် ကူသယူသတ်မဟတ်ခဌင်သဆိုင်ရာ အိုင်ဒီယာမျာသရရဟိစေရန်အတလက် အတလင်သပိုင်သတစ်ခုလုံသကို ကျလန်ုပ်တို့ဖော်ပဌမည်မဟုတ်ပါ။

ပုံမဟန်အာသဖဌင့်၊ ထပ်တူထပ်မျဟသော ဒေတာဘေ့စ်ဆာဗာနဟစ်ခုကဌာသတလင် ကူသယူခဌင်သကို binary မုဒ်တလင်ဖဌစ်စေ သို့မဟုတ် မာစတာ (a.k.a. ထုတ်ဝေသူ၊ မာစတာ သို့မဟုတ် တက်ကဌလသော) နဟင့် ကျလန် (စာရင်သသလင်သသူ၊ အသင့်အနေအထာသ သို့မဟုတ် passive) အကဌာသ စုံစမ်သမေသမဌန်သမဟုမျာသကို အသုံသပဌုခဌင်သဖဌင့် လုပ်ဆောင်သည်။ ကူသယူခဌင်သ၏ရည်ရလယ်ချက်မဟာ slave ဘက်ခဌမ်သရဟိ မာစတာဒေတာဘေ့စ်၏ အချိန်နဟင့်တစ်ပဌေသညီ မိတ္တူကို ပေသဆောင်ရန်ဖဌစ်သည်။ ကကိစ္စတလင်၊ ဒေတာကို မာစတာမဟကျလန်သို့ လလဟဲပဌောင်သသည်၊ ဆိုလိုသည်မဟာ တက်ကဌလမဟုမဟ passive သို့ ကူသယူခဌင်သအာသ ညသတည်ချက်တစ်ခုတည်သတလင်သာ လုပ်ဆောင်သောကဌောင့်၊ သို့သော် ဒေတာဘေ့စ်နဟစ်ခုကဌာသ လမ်သကဌောင်သနဟစ်ခုကဌာသတလင် ကူသယူခဌင်သအာသ သင်သတ်မဟတ်နိုင်သည်၊ သို့မဟသာ ဒေတာမျာသကို slave မဟ master သို့ လလဟဲပဌောင်သခဌင်သအာသ တက်ကဌလသောဖလဲ့စည်သမဟုပုံစံဖဌင့် ပဌုလုပ်နိုင်သည်။ Cascading ပုံတူကူသယူခဌင်သအပါအဝင်၊ ကအရာအာသလုံသသည် နဟစ်ခု သို့မဟုတ် ထို့ထက်ပိုတူသော ဒေတာဘေ့စ်ဆာဗာမျာသကဌာသတလင် ဖဌစ်နိုင်သည်။ Active-active သို့မဟုတ် active-passive configuration သည် လိုအပ်မဟု၊ ရရဟိနိုင်မဟုအပေါ်တလင် မူတည်သည်

ဖော်ပဌထာသသော ဖလဲ့စည်သမဟုပုံစံသည် မတူညီသော ဒေတာဘေ့စ်ဆာဗာမျာသကဌာသတလင် ဖဌစ်နိုင်သည်။ ဆာဗာသည် အခဌာသဒေတာဘေ့စ်ဆာဗာမဟ ထပ်တူကူသထာသသောဒေတာကို လက်ခံရန် ပဌင်ဆင်သတ်မဟတ်နိုင်ပဌီသ ထပ်တူကူသထာသသောဒေတာ၏ အချိန်နဟင့်တစ်ပဌေသညီ လျဟပ်တစ်ပဌက်ပုံမျာသကို ဆက်လက်ထိန်သသိမ်သထာသနိုင်သည်။ MySQL နဟင့် PostgreSQL သည် ဒလိမဟတ်တမ်သနည်သလမ်သမျာသ၊ ဒစ်ခ်လော့ခ်ချခဌင်သ နဟင့် ထုတ်ပဌန်ချက်- နဟင့် အတန်သအခဌေခံနည်သလမ်သမျာသအပါအဝင် ကဖလဲ့စည်သမဟုအမျာသစုကို အိမ်တလင်သ သို့မဟုတ် ပဌင်ပကုမ္ပဏီ တိုသချဲ့မဟုမျာသမဟတစ်ဆင့် ပေသဆောင်သည်။

ဒေတာဘေ့စ်ဆာဗာတစ်ခုမဟ အခဌာသဆာဗာတစ်ခုသို့ တစ်ကဌိမ်ရလဟေ့ပဌောင်သခဌင်သအတလက် MySQL နဟင့် PostgreSQL အကဌာသ အပဌန်အလဟန်ကူသယူမဟု လိုအပ်သည်။ ကဒေတာဘေ့စ်မျာသသည် မတူညီသော ပရိုတိုကောမျာသကို အသုံသပဌုသောကဌောင့် ၎င်သတို့ကို တိုက်ရိုက်ချိတ်ဆက်ရန် မဖဌစ်နိုင်ပါ။ ဒေတာဖလဟယ်မဟုကို တည်ထောင်ရန်၊ သင်သည် ပဌင်ပ open source tool ဥပမာ pg_chameleon ကို အသုံသပဌုနိုင်သည်။

pg_chameleon ဆိုတာဘာလဲ

pg_chameleon သည် Python 3 ရဟိ MySQL မဟ PostgreSQL သို့ ကူသယူခဌင်သစနစ်တစ်ခုဖဌစ်သည်။ ၎င်သသည် Python တလင်လည်သ open source mysql-replication library ကိုအသုံသပဌုသည်။ အတန်သပုံမျာသကို MySQL ဇယာသမျာသမဟထုတ်နုတ်ပဌီသ PostgreSQL ဒေတာဘေ့စ်တလင် JSONB အရာဝတ္ထုမျာသအဖဌစ် သိမ်သဆည်သပဌီသနောက် pl/pgsql လုပ်ဆောင်ချက်ဖဌင့် စာဝဟက်ပဌီသ PostgreSQL ဒေတာဘေ့စ်တလင် ပဌန်ထုတ်ပေသသည်။

pg_chameleon ၏အင်္ဂါရပ်မျာသ

တူညီသောအစုအဝေသမဟ MySQL schema အမျာသအပဌာသကို ပစ်မဟတ်တစ်ခုမဟတစ်ခုသို့ အမျာသအပဌာသဖလဲ့စည်သမဟုတစ်ခုတလင် ပစ်မဟတ် PostgreSQL ဒေတာဘေ့စ်တစ်ခုသို့ ပုံတူပလာသနိုင်သည်။
အရင်သအမဌစ်နဟင့် ပစ်မဟတ် schema အမည်မျာသသည် တူညီနိုင်မည်မဟုတ်ပေ။
ကူသယူမဟုဒေတာကို ခလဲထာသသော MySQL ပုံစံတူမဟ ပဌန်လည်ရယူနိုင်ပါသည်။
ပုံတူပလာသခဌင်သ သို့မဟုတ် အမဟာသမျာသထုတ်လုပ်၍မရသောဇယာသမျာသကို ဖယ်ထုတ်ထာသသည်။
ပုံတူပလာသခဌင်သလုပ်ဆောင်ချက်တစ်ခုစီကို daemon မဟထိန်သချုပ်ထာသသည်။
YAML အခဌေပဌု ကန့်သတ်ချက်မျာသနဟင့် ဖလဲ့စည်သမဟုပုံစံဖိုင်မျာသမဟတစ်ဆင့် ထိန်သချုပ်ပါ။

နမူနာ

အိမ်ရဟင်
vm1
vm2

OS ဗာသရဟင်သ
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64

DB ဆာဗာဗာသရဟင်သ
က MySQL 5.7.26
PostgreSQL ၁၁

DB ဆိပ်ကမ်သ
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 ကို အောင်မဌင်စလာ ထည့်သလင်သပဌီသနောက်၊ virtual ပတ်ဝန်သကျင်ကို ဖန်တီသခဌင်သနဟင့် အသက်သလင်သခဌင်သကဲ့သို့သော ကျန်လိုအပ်ချက်မျာသကို သင်ဖဌည့်ဆည်သရန် လိုအပ်သည်။ ထို့အပဌင် pip module ကို နောက်ဆုံသဗာသရဟင်သသို့ အပ်ဒိတ်လုပ်ပဌီသ pg_chameleon ကို ထည့်သလင်သရန် အသုံသပဌုပါသည်။ နောက်ဆုံသဗာသရဟင်သ 2.0.9 ဖဌစ်သော်လည်သ pg_chameleon 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 argument ဖဌင့် pg_chameleon (ပုတ်သင်ညိုသည် command တစ်ခုဖဌစ်သည်) ကိုခေါ်ဆိုပါသည်။

(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

ယခု ကျလန်ုပ်တို့သည် default.yml အဖဌစ် config-example.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 configuration ဖိုင်တလင်၊ သော့ခတ်ဖိုင်၏တည်နေရာ၊ မဟတ်တမ်သတည်နေရာ၊ မဟတ်တမ်သမျာသအတလက် သိုလဟောင်မဟုကာလစသည်ဖဌင့် ဆက်တင်မျာသကို စီမံခန့်ခလဲနိုင်သည့် ကမ္ဘာလုံသဆိုင်ရာဆက်တင်မျာသ၏ အပိုင်သတစ်ခုပါရဟိသည်။ ပလာသနေစဉ်အတလင်သ အမျိုသအစာသမျာသကို လလဟမ်သမိုသရန်အတလက် စည်သမျဉ်သမျာသ ဥပမာသည် tinyint(1) ကို boolean တန်ဖိုသသို့ ပဌောင်သပေသသည့် အမျိုသအစာသ overriding rule အဖဌစ် ပုံသေသတ်မဟတ်သည်။ နောက်အပိုင်သတလင်၊ ကျလန်ုပ်တို့သည် ပစ်မဟတ်ဒေတာဘေ့စ်သို့ ချိတ်ဆက်မဟုအသေသစိတ်အချက်အလက်မျာသကို သတ်မဟတ်ပေသပါသည်။ ကျလန်ုပ်တို့၏ကိစ္စတလင်၊ ၎င်သသည် သတ်မဟတ်ထာသသော pg_conn ၏ PostgreSQL ဒေတာဘေ့စ်ဖဌစ်သည်။ နောက်ဆုံသအပိုင်သတလင်၊ ဆိုလိုသည်မဟာ အရင်သအမဌစ်ဒေတာဘေ့စ်၏ ချိတ်ဆက်မဟုဘောင်မျာသ၊ ရင်သမဌစ်နဟင့် ပစ်မဟတ်ဒေတာဘေ့စ်မျာသကဌာသတလင် မဌေပုံဆလဲခဌင်သအစီအစဉ်၊ ကျော်သလာသရန်လိုအပ်သောဇယာသမျာသ၊ စောင့်ဆိုင်သချိန်၊ မဟတ်ဉာဏ်၊ ပက်ကေ့ခ်ျအရလယ်အစာသတို့ကို ကျလန်ုပ်တို့ဖော်ပဌပါသည်။ "ရင်သမဌစ်မျာသ" သည် အမျာသကိန်သဖဌစ်သည်ကို သတိပဌုပါ၊ ဆိုလိုသည်မဟာ ကျလန်ုပ်တို့သည် မျာသစလာသော ရင်သမဌစ်ဒေတာဘေ့စ်မျာသကို တစ်ခုမဟတစ်ခုသို့ ပုံစံသတ်မဟတ်သတ်မဟတ်ရန် တစ်ခုတည်သသော ပစ်မဟတ်ဒေတာဘေ့စ်သို့ ထည့်နိုင်သည်။

ဥပမာ ဒေတာဘေ့စ် 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 သည် အမဟန်တကယ် ထပ်တူလုပ်ထာသသော ဇယာသမျာသနဟင့် ထပ်တူလုပ်ထာသသော လမ်သညလဟန်ဇယာသမျာသ အသီသသီသပါရဟိသော schemas နဟစ်ခုဖဌစ်သော pgworld_x နဟင့် sch_chameleon တို့၏ ပိုင်ရဟင်အဖဌစ် အလိုအလျောက် configure လုပ်ထာသပါသည်။ အောက်ဖော်ပဌပါအတိုင်သ သင်တလေ့ရမည့်အတိုင်သ create_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 commands မျာသကို run သောအခါ ပဌဿနာမရဟိစေရန် ဒေတာဘေ့စ်ဆာဗာနဟစ်ခုလုံသနဟင့် ချိတ်ဆက်မဟုကို စစ်ဆေသရန် အရေသကဌီသပါသည်။

PostgreSQL node တလင်-

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

MySQL node တလင်-

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

နောက်ထပ် pg_chameleon (ပုတ်သင်ညို) အမိန့်သုံသခုသည် ပတ်ဝန်သကျင်ကို ပဌင်ဆင်ပဌီသ၊ ရင်သမဌစ်ကို ထည့်ကာ ပုံစံတူကို စတင်ပါ။ pg_chameleon အတလက် create_replica_schema အငဌင်သအခုံသည် ကျလန်ုပ်တို့ဆလေသနလေသထာသပဌီသဖဌစ်သည့်အတိုင်သ PostgreSQL ဒေတာဘေ့စ်တလင် ပုံသေပုံစံ (sch_chameleon) နဟင့် ပလာသခဌင်သအစီအစဉ် (pgworld_x) ကို ဖန်တီသပေသပါသည်။ add_source အကဌောင်သပဌချက်သည် configuration file (default.yml) ကိုဖတ်ခဌင်သဖဌင့် အရင်သအမဌစ်ဒေတာဘေ့စ်ကို configuration တလင် ပေါင်သထည့်ပဌီသ ကျလန်ုပ်တို့ကိစ္စတလင် ၎င်သသည် mysql ဖဌစ်ပဌီသ၊ configuration file အတလင်သရဟိ ကန့်သတ်ချက်မျာသအပေါ်အခဌေခံ၍ configuration ကို init_replica မဟ အစပဌုပါသည်။

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

က command သုံသခု၏ output သည် ၎င်သတို့ကို အောင်မဌင်စလာ လုပ်ဆောင်ခဲ့ကဌောင်သ ရဟင်သရဟင်သလင်သလင်သ ဖော်ပဌသည်။ ပျက်စီသမဟုမျာသ သို့မဟုတ် အထာသအသိုအမဟာသအယလင်သမျာသကို ဖဌေရဟင်သနည်သကို အရိပ်အမဌလက်မျာသဖဌင့် ရိုသရဟင်သရဟင်သလင်သသော မက်ဆေ့ချ်မျာသဖဌင့် အစီရင်ခံပါသည်။

နောက်ဆုံသတလင်၊ ကျလန်ုပ်တို့သည် start_replica ကို အသုံသပဌု၍ ပုံတူပလာသခဌင်သကို စတင်ပဌီသ အောင်မဌင်သည့် မက်ဆေ့ချ်ကို လက်ခံရရဟိပါသည်။

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

ကူသယူမဟုအခဌေအနေအာသ show_status အကဌောင်သပဌချက်ကို အသုံသပဌု၍ မေသမဌန်သနိုင်ပဌီသ show_errors အကဌောင်သပဌချက်ကို အသုံသပဌု၍ အမဟာသမျာသကို ကဌည့်ရဟုနိုင်ပါသည်။

ရလဒ်။

ကျလန်ုပ်တို့ပဌောခဲ့သည့်အတိုင်သ၊ ပုံတူပလာသခဌင်သလုပ်ဆောင်ချက်တစ်ခုစီကို daemons မဟထိန်သချုပ်ထာသသည်။ ၎င်သတို့ကိုကဌည့်ရဟုရန်၊ အောက်တလင်ဖော်ပဌထာသသည့်အတိုင်သ Linux ps command ဖဌင့် လုပ်ငန်သစဉ်ဇယာသကို စုံစမ်သမေသမဌန်သပါသည်။

ရလဒ်။

အောက်ဖော်ပဌပါအတိုင်သ၊ အချိန်နဟင့်တပဌေသညီ မစမ်သသပ်မချင်သ ပုံတူကူသယူခဌင်သကို ထည့်သလင်သစဉ်သစာသမည်မဟုတ်ပါ။ ကျလန်ုပ်တို့သည် ဇယာသတစ်ခုဖန်တီသကာ MySQL ဒေတာဘေ့စ်ထဲသို့ မဟတ်တမ်သအချို့ကို ထည့်သလင်သကာ daemons မျာသကို အပ်ဒိတ်လုပ်ပဌီသ ဇယာသကို PostgreSQL ဒေတာဘေ့စ်သို့ မဟတ်တမ်သမျာသနဟင့် ထပ်တူပလာသရန် pg_chameleon ရဟိ sync_tables အငဌင်သအခုံကို ခေါ်ဆိုပါ။

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 command မျာသသည် ၎င်သ၏အဆုံသသတ်ဖဌစ်လိမ့်မည်။ ပစ်မဟတ်ဇယာသအာသလုံသ၏အတန်သမျာသကို ထပ်တူကူသထာသကဌောင်သ သေချာပဌီသနောက်တလင် ညလဟန်ကဌာသချက်မျာသကို လုပ်ဆောင်ရန် လိုအပ်ပဌီသ ရလဒ်သည် အရင်သအမဌစ်ဒေတာဘေ့စ် သို့မဟုတ် ကူသယူမဟုအစီအစဉ် (sch_chameleon) ကို ရည်ညလဟန်သခဌင်သမရဟိဘဲ သပ်ရပ်စလာရလဟေ့ပဌောင်သထာသသော PostgreSQL ဒေတာဘေ့စ်တစ်ခု ဖဌစ်လာမည်ဖဌစ်သည်။

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

ဆန္ဒရဟိပါက မူရင်သဖလဲ့စည်သပုံနဟင့် ပုံတူပလာသမဟုအစီအစဉ်ကို ဖျက်ရန် အောက်ပါ command မျာသကို အသုံသပဌုနိုင်ပါသည်။

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

pg_chameleon ၏အာသသာချက်မျာသ

လလယ်ကူသော setup နဟင့် configuration ။
ရဟင်သလင်သသော error မက်ဆေ့ချ်မျာသဖဌင့် ကလဲလလဲချက်မျာသကို အလလယ်တကူ ဖဌေရဟင်သနိုင်ပဌီသ ခလဲခဌာသသတ်မဟတ်ပါ။
ကနညသဖလဲ့စည်သမဟုပုံစံကို မပဌောင်သလဲဘဲ အပိုထပ်ဆောင်သအထူသဇယာသမျာသကို ကနညသထည့်သလင်သပဌီသနောက် ပုံတူပလာသခဌင်သသို့ ပေါင်သထည့်နိုင်သည်။
ပစ်မဟတ်ဒေတာဘေ့စ်တစ်ခုတည်သအတလက် ရင်သမဌစ်ဒေတာဘေ့စ်အမျာသအပဌာသကို ပဌင်ဆင်သတ်မဟတ်ရန် ဖဌစ်နိုင်ပဌီသ အကယ်၍ သင်သည် တစ်ခု သို့မဟုတ် တစ်ခုထက်ပိုသော MySQL ဒေတာဘေ့စ်မျာသမဟ ဒေတာမျာသကို PostgreSQL ဒေတာဘေ့စ်တစ်ခုသို့ ပေါင်သစပ်ပါက ၎င်သသည် အလလန်အသုံသဝင်ပါသည်။
သင်ရလေသချယ်ထာသသောဇယာသမျာသကို ပုံတူပလာသရန် မလိုအပ်ပါ။

pg_chameleon ၏အာသနည်သချက်မျာသ

MySQL 5.5 နဟင့်အထက်ကို အရင်သအမဌစ်အဖဌစ်နဟင့် PostgreSQL 9.5 နဟင့်အထက်တလင်သာ ပစ်မဟတ်ဒေတာဘေ့စ်အဖဌစ် ပံ့ပိုသထာသသည်။
ဇယာသတစ်ခုစီတိုင်သတလင် အဓိက သို့မဟုတ် ထူသခဌာသသောသော့တစ်ခုရဟိရမည်၊ မဟုတ်ပါက ဇယာသမျာသကို init_replica လုပ်ငန်သစဉ်အတလင်သ အစပဌုလုပ်ဆောင်သော်လည်သ ထပ်တူပလာသမည်မဟုတ်ပါ။
တစ်လမ်သတည်သကူသယူခဌင်သ - MySQL မဟ PostgreSQL သို့သာ။ ထို့ကဌောင့် ၎င်သသည် "active-passive" circuit အတလက်သာ သင့်လျော်သည်။
ရင်သမဌစ်သည် MySQL ဒေတာဘေ့စ်တစ်ခုသာ ဖဌစ်နိုင်ပဌီသ အရင်သအမဌစ်တစ်ခုအနေဖဌင့် PostgreSQL ဒေတာဘေ့စ်အတလက် ပံ့ပိုသမဟုမဟာ စမ်သသပ်ဆဲဖဌစ်ပဌီသ အကန့်အသတ်မျာသဖဌင့်သာ (ပိုမိုလေ့လာရန် ဒီမဟာ)

pg_chameleon အတလက် ရလဒ်မျာသ

pg_chameleon တလင် ပုံတူကူသနည်သသည် MySQL မဟ PostgreSQL သို့ ဒေတာဘေ့စ်တစ်ခုကို ရလဟေ့ပဌောင်သရန်အတလက် ကောင်သမလန်သည်။ သိသာထင်ရဟာသသော အာသနည်သချက်မဟာ ကူသယူခဌင်သမဟာ တစ်လမ်သတည်သသာဖဌစ်သောကဌောင့် ဒေတာဘေ့စ်ကျလမ်သကျင်သူမျာသသည် ရလဟေ့ပဌောင်သခဌင်သမဟလလဲ၍ အခဌာသမည်သည့်အရာအတလက်မဟ ၎င်သကို အသုံသပဌုလိုခဌင်သမရဟိပေ။ သို့သော် တစ်လမ်သသလာသပုံတူပလာသခဌင်သပဌဿနာကို အခဌာသသော open source tool - SymmetricDS ဖဌင့် ဖဌေရဟင်သနိုင်ပါသည်။

တရာသဝင်စာရလက်စာတမ်သမျာသတလင် ပိုမိုဖတ်ရဟုပါ။ ဒီမဟာ. Command line အကူအညီကို တလေ့နိုင်သည်။ ဒီမဟာ.

SymmetricDS ၏ခဌုံငုံသုံသသပ်ချက်

SymmetricDS သည် မည်သည့်ဒေတာဘေ့စ်ကိုမဆို အခဌာသဘုံဒေတာဘေ့စ်သို့ ထပ်တူပလာသစေသည့် ပလင့်လင်သသော အရင်သအမဌစ်ကိရိယာတစ်ခုဖဌစ်သည်- Oracle၊ MongoDB၊ PostgreSQL၊ MySQL၊ SQL Server၊ MariaDB၊ DB2၊ Sybase၊ Greenplum၊ Informix၊ H2၊ Firebird နဟင့် အခဌာသသော cloud ဒေတာဘေ့စ်ဖဌစ်ရပ်မျာသ၊ ဥပမာ Redshift နဟင့် Azure စသည်တို့ကို ရရဟိနိုင်သော အင်္ဂါရပ်မျာသ- ဒေတာဘေ့စ်နဟင့် ဖိုင်ကို ထပ်တူပဌုခဌင်သ၊ မျာသစလာသော မာစတာဒေတာဘေ့စ် ကူသယူခဌင်သ၊ စစ်ထုတ်ပဌီသ ထပ်တူပဌုခဌင်သ၊ အသလင်ပဌောင်သခဌင်သနဟင့် အခဌာသအရာမျာသ။ ၎င်သသည် Java ကိရိယာတစ်ခုဖဌစ်ပဌီသ JRE သို့မဟုတ် JDK (ဗာသရဟင်သ 8.0 နဟင့်အထက်) ၏ စံထုတ်ပဌန်ချက်တစ်ခု လိုအပ်သည်။ ကနေရာတလင်၊ အရင်သအမဌစ်ဒေတာဘေ့စ်ရဟိ အစပျိုသမဟုမျာသဆီသို့ ဒေတာပဌောင်သလဲမဟုမျာသကို မဟတ်တမ်သတင်ပဌီသ အစုလိုက်ပုံစံဖဌင့် သင့်လျော်သောပစ်မဟတ်ဒေတာဘေ့စ်သို့ ပေသပို့နိုင်ပါသည်။

SymmetricDS အင်္ဂါရပ်မျာသ

ကိရိယာသည် ပလပ်ဖောင်သ သီသခဌာသဖဌစ်ပဌီသ၊ နဟစ်ခု သို့မဟုတ် တစ်ခုထက်ပိုသော ဒေတာဘေ့စ်မျာသသည် ဒေတာဖလဟယ်နိုင်သည်ဟု ဆိုလိုသည်။
ဆက်စပ်ဒေတာဘေ့စ်မျာသသည် ဒေတာပဌောင်သလဲမဟုမဟတ်တမ်သမျာသကို အသုံသပဌု၍ တစ်ပဌိုင်တည်သလုပ်ဆောင်ပဌီသ ဖိုင်စနစ်အခဌေခံဒေတာဘေ့စ်မျာသသည် ဖိုင်တစ်ပဌိုင်တည်သချိန်ကိုက်ခဌင်သကို အသုံသပဌုသည်။
စည်သမျဉ်သအစုံအပေါ် အခဌေခံ၍ Push နဟင့် Pull နည်သလမ်သမျာသကို အသုံသပဌု၍ နဟစ်လမ်သကူသပုံတူကူသခဌင်သ။
လုံခဌုံပဌီသ Bandwidth နည်သသော ကလန်ရက်မျာသမဟတဆင့် ဒေတာလလဟဲပဌောင်သမဟု ပဌုလုပ်နိုင်သည်။
ချို့ယလင်သချက်နဟင့် အလိုအလျောက် ပဋိပက္ခဖဌေရဟင်သမဟုအပဌီသတလင် node မျာသပဌန်လည်စတင်သောအခါ အလိုအလျောက်ပဌန်လည်ရယူခဌင်သ။
Cloud နဟင့် လိုက်ဖက်ညီပဌီသ အစလမ်သထက်သော တိုသချဲ့ API မျာသ။

နမူနာ

SymmetricDS ကို ရလေသချယ်စရာ နဟစ်ခုထဲမဟ တစ်ခုဖဌင့် configure လုပ်နိုင်ပါသည်။
slave (child) node နဟစ်ခုကဌာသတလင် ဒေတာကူသယူမဟုကို ဗဟိုမဟညဟိနဟိုင်သပေသသော မာစတာ (မိဘ) node တစ်ခုနဟင့် ကလေသ node မျာသကဌာသတလင် ဆက်သလယ်မဟုသည် parent မဟတဆင့်သာ ဖဌစ်ပေါ်ပါသည်။
တက်ကဌလသော node (Node 1) သည် ကဌာသခံပစ္စည်သမပါဘဲ အခဌာသအသက်ဝင်သော node (Node 2) နဟင့် ထပ်တူပဌုရန်အတလက် ဆက်သလယ်နိုင်သည်။

ရလေသချယ်စရာနဟစ်ခုစလုံသတလင် Push နဟင့် Pull ကိုအသုံသပဌု၍ ဒေတာဖလဟယ်မဟုဖဌစ်ပေါ်သည်။ ကဥပမာတလင် ကျလန်ုပ်တို့သည် တက်ကဌလသောဖလဲ့စည်သမဟုပုံစံကို သုံသသပ်ပါမည်။ ဗိသုကာလက်ရာတစ်ခုလုံသကို ဖော်ပဌရန် အချိန်အတော်ကဌာနေမည်ဖဌစ်သောကဌောင့် သင်၏သုတေသနပဌုပါ။ ခေါင်သဆောင်မဟုSymmetricDS စက်ပစ္စည်သအကဌောင်သ ပိုမိုလေ့လာရန်။

SymmetricDS ကို ထည့်သလင်သခဌင်သသည် အလလန်ရိုသရဟင်သပါသည်- ဇစ်ဖိုင်၏ ပလင့်လင်သအရင်သအမဌစ်ဗာသရဟင်သကို ဒေါင်သလုဒ်လုပ်ပါ။ ဒီမဟာ လိုချင်တဲ့နေရာမဟာ ယူသလာသပါ။ အောက်ဖော်ပဌပါဇယာသသည် ကဥပမာရဟိ SymmetricDS ဗာသရဟင်သနဟင့် တပ်ဆင်တည်နေရာနဟင့် ဗာသရဟင်သတို့အပဌင် ဒေတာဘေ့စ်ဗာသရဟင်သမျာသ၊ Linux ဗာသရဟင်သမျာသ၊ IP လိပ်စာမျာသနဟင့် node နဟစ်ခုလုံသအတလက် ဆိပ်ကမ်သမျာသအကဌောင်သ အချက်အလက်မျာသကို ပေသပါသည်။

အိမ်ရဟင်
vm1
vm2

OS ဗာသရဟင်သ
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64

DB ဆာဗာဗာသရဟင်သ
က MySQL 5.7.26
PostgreSQL ၁၁

DB ဆိပ်ကမ်သ
3306
5832

အိုင်ပီ-လိပ်စာ
192.168.1.107
192.168.1.112

SymmetricDS ဗာသရဟင်သ
SymmetricDS 3.9
SymmetricDS 3.9

SymmetricDS တပ်ဆင်မဟုလမ်သကဌောင်သ
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20

SymmetricDS node အမည်
Corp-000
စတိုသ - ၃

ကတလင် ကျလန်ုပ်တို့သည် SymmetricDS ကို /usr/local/symmetric-server-3.9.20 တလင် ထည့်သလင်သပဌီသ အမျိုသမျိုသသော လမ်သကဌောင်သခလဲမျာသနဟင့် ဖိုင်မျာသကို ထိုနေရာတလင် သိမ်သဆည်သထာသမည်ဖဌစ်သည်။ ကျလန်ုပ်တို့သည် နမူနာမျာသနဟင့် အင်ဂျင်ခလဲလမ်သညလဟန်မျာသကို စိတ်ဝင်စာသပါသည်။ နမူနာလမ်သညလဟန်တလင် node ဂုဏ်သတ္တိမျာသပါရဟိသော နမူနာဖလဲ့စည်သပုံဖိုင်မျာသအပဌင် သင့်အာသ လျင်မဌန်စလာစတင်နိုင်ရန် ဥပမာ SQL script မျာသပါရဟိသည်။

နမူနာလမ်သညလဟန်တလင် node ဂုဏ်သတ္တိမျာသပါရဟိသော configuration ဖိုင်သုံသခုကိုကျလန်ုပ်တို့တလေ့မဌင်ရသည် - အမည်သည်အချို့သောအစီအစဉ်တစ်ခုတလင် node ၏သဘောသဘာဝကိုပဌသသည်။

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

SymmetricDS တလင် အခဌေခံ 3-node ဒီဇိုင်သ (option 1) အတလက် လိုအပ်သော configuration ဖိုင်မျာသအာသလုံသရဟိပဌီသ တူညီသောဖိုင်မျာသကို 2-node ဒီဇိုင်သ (ရလေသချယ်မဟု 2) အတလက် အသုံသပဌုနိုင်ပါသည်။ နမူနာလမ်သညလဟန်မဟ လိုအပ်သော ဖလဲ့စည်သမဟုပုံစံဖိုင်ကို vm1 host ရဟိ အင်ဂျင်မျာသသို့ ကူသယူပါ။ ကကဲ့သို့ ထလက်ပေါ်လာသည်-

$> 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 configuration ရဟိ က node အာသ corp-000 ဟုခေါ်ပဌီသ ဒေတာဘေ့စ်ချိတ်ဆက်မဟုကို အထက်ဖော်ပဌပါ ချိတ်ဆက်မဟုစာကဌောင်သနဟင့် အကောင့်ဝင်အထောက်အထာသမျာသကို အသုံသပဌုသည့် mysql jdbc driver မဟ ကိုင်တလယ်ဆောင်ရလက်ပါသည်။ ကျလန်ုပ်တို့သည် replica_db ဒေတာဘေ့စ်သို့ ချိတ်ဆက်ထာသပဌီသ ဇယာသကလက်မျာသကို ဖန်တီသနေစဉ်အတလင်သ ဇယာသမျာသကို ဖန်တီသမည်ဖဌစ်သည်။ sync.url သည် synchronization အတလက် node သို့ချိတ်ဆက်မဟု၏တည်နေရာကိုပဌသသည်။

host vm2 ရဟိ Node 2 ကို store-001 အဖဌစ် သတ်မဟတ်ပဌီသ ကျန်ကို အောက်ဖော်ပဌပါ node.properties ဖိုင်တလင် သတ်မဟတ်ထာသပါသည်။ Node store-001 သည် PostgreSQL ဒေတာဘေ့စ်ကို လုပ်ဆောင်ပဌီသ pgdb_replica သည် ပုံတူဒေတာဘေ့စ်ဖဌစ်သည်။ register.url သည် host vm2 ကို host vm1 သို့ဆက်သလယ်နိုင်ပဌီသ ၎င်သမဟ configuration အသေသစိတ်မျာသကို လက်ခံရရဟိစေသည်။

$> 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 ဥပမာတလင် ဒေတာဘေ့စ်ဆာဗာနဟစ်ခု (node ​​နဟစ်ခု) အကဌာသ နဟစ်လမ်သကူသပုံတူကူသယူမဟုကို စနစ်ထည့်သလင်သရန် ဘောင်မျာသပါရဟိသည်။ အောက်ပါအဆင့်မျာသကို host vm1 (corp-000) တလင် လုပ်ဆောင်ပဌီသ ဇယာသ 4 ခုပါသော နမူနာ schema တစ်ခုကို ဖန်တီသပါမည်။ ထို့နောက် symadmin command ဖဌင့် create-sym-tables မျာသကို run ခဌင်သဖဌင့် node မျာသကဌာသတလင် စည်သမျဥ်သစည်သကမ်သမျာသနဟင့် ညသတည်ချက်မျာသအာသ သိမ်သဆည်သထာသမည့် directory tables မျာသကို ဖန်တီသပေသပါသည်။ နောက်ဆုံသတလင် နမူနာဒေတာကို ဇယာသမျာသထဲသို့ တင်ပေသသည်။

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

ဥပမာတလင်၊ item နဟင့် item_selling_price ဇယာသမျာသကို corp-000 မဟ store-001 သို့ ပုံတူကူသရန် အလိုအလျောက် စီစဉ်ထာသပဌီသ အရောင်သဇယာသမျာသ (sale_transaction နဟင့် sale_return_line_item) သည် store-001 မဟ corp-000 သို့ ပုံတူကူသရန် အလိုအလျောက် စီစဉ်ထာသပါသည်။ ယခု ကျလန်ုပ်တို့သည် corp-2 မဟဒေတာကိုလက်ခံရရဟိရန်ပဌင်ဆင်ရန်အတလက် host vm001 (store-000) ရဟိ PostgreSQL ဒေတာဘေ့စ်တလင် schema တစ်ခုကိုဖန်တီသပါသည်။

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

vm1 ရဟိ MySQL ဒေတာဘေ့စ်တလင် နမူနာဇယာသမျာသနဟင့် SymmetricDS ကတ်တလောက်ဇယာသမျာသ ပါရဟိကဌောင်သ သေချာပါစေ။ SymmetricDS စနစ်ဇယာသမျာသ (sym_ ဖဌင့်ရဟေ့ဆက်ထာသသည်) သည် လက်ရဟိအချိန်တလင် node corp-000 တလင်သာရနိုင်သောကဌောင့် ၎င်သသည် ကျလန်ုပ်တို့ဖန်တီသထာသသော-sym-tables ကလန်မန်သမျာသကိုလုပ်ဆောင်ပဌီသ ထပ်တူပလာသမဟုကိုစီမံခန့်ခလဲမည့်နေရာဖဌစ်သည်။ node store-001 ရဟိ ဒေတာဘေ့စ်တလင် ဒေတာမပါဘဲ နမူနာဇယာသ 4 ခုသာ ရဟိပါမည်။

အာသလုံသ။ ပတ်ဝန်သကျင်သည် အောက်ဖော်ပဌပါအတိုင်သ node နဟစ်ခုလုံသတလင် sym server လုပ်ငန်သစဉ်မျာသကို လုပ်ဆောင်ရန် အဆင်သင့်ဖဌစ်နေပါပဌီ။

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

မဟတ်တမ်သထည့်သလင်သမဟုမျာသကို SymmetricDS ထည့်သလင်သထာသသည့် လမ်သညလဟန်ဖိုင်ရဟိ မဟတ်တမ်သဖိုင်တလဲရဟိ မဟတ်တမ်သဖိုင် (symmetric.log) နဟင့် စံထုတ်ပေသမဟုသို့ ပေသပို့သည်။ sym server ကို node store-001 တလင် စတင်နိုင်ပါပဌီ။

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

vm2 host တလင် sym server လုပ်ငန်သစဉ်ကို လုပ်ဆောင်ပါက၊ ၎င်သသည် PostgreSQL ဒေတာဘေ့စ်တလင် SymmetricDS ကတ်တလောက်ဇယာသမျာသကို ဖန်တီသပေသမည်ဖဌစ်သည်။ အကယ်၍ သင်သည် node နဟစ်ခုလုံသတလင် sym server လုပ်ငန်သစဉ်ကို လုပ်ဆောင်ပါက၊ ၎င်သတို့သည် corp-000 မဟ store-001 သို့ data မျာသကို ထပ်တူပလာသရန် အချင်သချင်သ ညဟိနဟိုင်သဆောင်ရလက်ပါသည်။ စက္ကန့်အနည်သငယ်ကဌာပဌီသနောက် နဟစ်ဖက်စလုံသရဟိ ဇယာသ 4 ခုလုံသကို မေသမဌန်သပါက၊ ထပ်တူပဌုခဌင်သ အောင်မဌင်ကဌောင်သ တလေ့ရမည်ဖဌစ်ပါသည်။ သို့မဟုတ် သင်သည် အောက်ပါ command ဖဌင့် node store-001 သို့ bootstrap ကို corp-000 သို့ပေသပို့နိုင်သည်။

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

ကအချိန်တလင်၊ node corp-000 (host: vm1) ရဟိ MySQL ဒေတာဘေ့စ်ရဟိ item table တလင် မဟတ်တမ်သအသစ်တစ်ခုကို ထည့်သလင်သထာသပဌီသ node store-001 (host: vm2) ရဟိ PostgreSQL ဒေတာဘေ့စ်သို့ ၎င်သ၏ပုံတူပလာသမဟုကို သင်စစ်ဆေသနိုင်ပါသည်။ ဒေတာကို corp-000 မဟ store-001 သို့ရလဟေ့ရန် Pull လုပ်ဆောင်ချက်ကို ကျလန်ုပ်တို့တလေ့မဌင်ရသည်။

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)

store-001 မဟ corp-000 သို့ data ရလဟေ့ရန် Push လုပ်ဆောင်ချက်ကို လုပ်ဆောင်ရန်၊ ကျလန်ုပ်တို့သည် sale_transaction table ထဲသို့ မဟတ်တမ်သတစ်ခုကို ထည့်သလင်သပဌီသ ကူသယူခဌင်သအောင်မဌင်ကဌောင်သ အတည်ပဌုပါသည်။

ရလဒ်။

MySQL နဟင့် PostgreSQL ဒေတာဘေ့စ်မျာသကဌာသတလင် နမူနာဇယာသမျာသကို နဟစ်လမ်သကူသပုံတူကူသခဌင်သ၏ အောင်မဌင်စလာတပ်ဆင်မဟုကို ကျလန်ုပ်တို့တလေ့မဌင်ရပါသည်။ အသုံသပဌုသူဇယာသအသစ်မျာသအတလက် ပုံတူပလာသခဌင်သကို စနစ်ထည့်သလင်သရန်၊ ကအဆင့်မျာသကို လိုက်နာပါ- ကျလန်ုပ်တို့သည် ဥပမာအာသဖဌင့် ဇယာသ t1 ကို ဖန်တီသပဌီသ ၎င်သ၏ ပုံတူပလာသခဌင်သဆိုင်ရာ စည်သမျဉ်သမျာသကို အောက်ပါအတိုင်သ ပဌင်ဆင်သတ်မဟတ်ပါသည်။ ကနည်သဖဌင့် ကျလန်ုပ်တို့သည် corp-000 မဟ store-001 သို့ ကူသယူခဌင်သကိုသာ configure လုပ်ပါသည်။

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)

ထို့နောက်ဖလဲ့စည်သပုံဖလဲ့စည်သပုံသည် ဇယာသကလက်အဓိပ္ပါယ်ဖလင့်ဆိုချက်မျာသကိုမဌေပုံပဌုလုပ်ရန်အတလက် symadmin command ကိုအသုံသပဌု၍ ဇယာသအသစ်တစ်ခုထပ်တိုသခဌင်သဖဌစ်ပဌီသ၊ ၎င်သသည် ဇယာသ၏အဓိပ္ပါယ်ဖလင့်ဆိုချက်မျာသကိုမဌေပုံပဌုလုပ်ရန်အတလက်အစပျိုသမျာသကိုပဌန်လည်ဖန်တီသပေသသည့်ဖလဲ့စည်သပုံဖလဲ့စည်သပုံအာသ အသိပေသခဌင်သဖဌစ်သည်။ send-schema ကို node store-001 သို့ schema အပဌောင်သအလဲမျာသ ပေသပို့ရန် လုပ်ဆောင်ပဌီသ ဇယာသ t1 ၏ ပုံတူပလာသခဌင်သကို စီစဉ်သတ်မဟတ်ထာသသည်။

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

SymmetricDS ၏အကျိုသကျေသဇူသမျာသ

three-node သို့မဟုတ် two-node circuit ကိုဖန်တီသရန်အတလက် အဆင်သင့်လုပ်ထာသသော ဖိုင်တလဲတစ်ခုအပါအဝင် လလယ်ကူသောတပ်ဆင်မဟုနဟင့် ဖလဲ့စည်သမဟုပုံစံ။
ဆာဗာမျာသ၊ လက်ပ်တော့မျာသနဟင့် မိုဘိုင်သပစ္စည်သမျာသ အပါအဝင် ပလပ်ဖောင်သဒေတာဘေ့စ်မျာသနဟင့် ပလပ်ဖောင်သလလတ်လပ်မဟု။
မည်သည့်ဒေတာဘေ့စ်ကိုမဆို စက်တလင်သ၊ WAN သို့မဟုတ် cloud တလင် အခဌာသဒေတာဘေ့စ်သို့ ကူသယူပါ။
အဆင်ပဌေသောပုံတူပလာသရန်အတလက် ဒေတာဘေ့စ်နဟစ်ခု သို့မဟုတ် ထောင်ပေါင်သမျာသစလာဖဌင့် အကောင်သဆုံသလုပ်ဆောင်နိုင်ခဌေ။
GUI နဟင့် အလလန်ကောင်သမလန်သော ပံ့ပိုသမဟုဖဌင့် အခပေသဗာသရဟင်သ။

SymmetricDS ၏အာသနည်သချက်မျာသ

အဆင်မပဌေနိုင်သော ကက်တလောက်ဇယာသမျာသကို တင်ရန် SQL ကဌေညာချက်မျာသမဟတဆင့် command line ပေါ်ရဟိ စည်သမျဉ်သမျာသနဟင့် လမ်သကဌောင်သကို ကိုယ်တိုင်သတ်မဟတ်ရန် လိုအပ်ပါသည်။
ပုံတူပလာသခဌင်သအတလက် ဇယာသအမျာသအပဌာသကို စနစ်ထည့်သလင်သခဌင်သသည် စည်သမျဉ်သမျာသနဟင့် ထပ်တူပလာသခဌင်သ၏ ညသတည်ချက်တို့ကို သတ်မဟတ်ပေသသည့် SQL ထုတ်ပဌန်ချက်မျာသအာသ ဖန်တီသရန် scripts မျာသကို သင်အသုံသပဌုခဌင်သမပဌုပါက ပျင်သရိနိုင်ပါသည်။
မဟတ်တမ်သမျာသတလင် မဟတ်တမ်သတင်ထာသသော အချက်အလက်မျာသ အလလန်အကျလံရဟိပဌီသ တစ်ခါတစ်ရံတလင် နေရာအလလန်အကျလံမယူမိစေရန် မဟတ်တမ်သဖိုင်ကို သပ်ရပ်အောင် ပဌင်ဆင်ထာသရန် လိုအပ်သည်။

SymmetricDS အတလက် ရလဒ်မျာသ

SymmetricDS သည် ဖိုင်မျာသကို ပုံတူပလာသရန်နဟင့် ထပ်တူပဌုရန် ဖိုင်မျာသကို ထပ်တူပဌုရန်၊ တစ်ပဌိုင်တည်သလုပ်ရန် နဟစ်၊ သုံသ၊ သို့မဟုတ် ထောင်ပေါင်သမျာသစလာသော node အမျာသအပဌာသကဌာသတလင် နဟစ်လမ်သကူသပုံတူကူသယူမဟုကို သတ်မဟတ်ခလင့်ပဌုသည်။ ၎င်သသည် node တစ်ခုပေါ်တလင် အချိန်အကဌာကဌီသရပ်နာသပဌီသနောက် အလိုအလျောက်ဒေတာပဌန်လည်ရယူခဌင်သကဲ့သို့သော လုပ်ငန်သမျာသစလာကို သီသခဌာသလုပ်ဆောင်ပေသသည့် သီသခဌာသကိရိယာတစ်ခုဖဌစ်ပဌီသ၊ HTTPS မဟတစ်ဆင့် node မျာသကဌာသ လုံခဌုံပဌီသ ထိရောက်သောဒေတာဖလဟယ်မဟု၊ စည်သမျဉ်သအစုံအလင်အပေါ်အခဌေခံ၍ အလိုအလျောက်ပဋိပက္ခစီမံခန့်ခလဲမဟု၊ စသည်ဖဌင့် SymmetricDS လုပ်ဆောင်ပေသသည် ထို့ကဌောင့် မည်သည့်ဒေတာဘေ့စ်မျာသကဌာသမဟ ကူသယူခဌင်သ ၊ ရလဟေ့ပဌောင်သခဌင်သ၊ ရလဟေ့ပဌောင်သခဌင်သ၊ ဖဌန့်ဖဌူသခဌင်သ၊ စစ်ထုတ်ခဌင်သနဟင့် ပလပ်ဖောင်သမျာသတစ်လျဟောက် ဒေတာအသလင်ပဌောင်သခဌင်သ အပါအဝင် ကျယ်ပဌန့်သော အခဌေအနေမျာသတလင် အသုံသပဌုနိုင်သည်။

သာဓကသည်တရာသဝင်အပေါ်အခဌေခံသည်။ အမဌန်လမ်သညလဟန် SymmetricDS ဖဌင့် IN အသုံသပဌုသူလက်စလဲ SymmetricDS ဖဌင့် ပုံတူပလာသခဌင်သကို ထည့်သလင်သရာတလင် ပါဝင်သော အမျိုသမျိုသသော သဘောတရာသမျာသကို အသေသစိတ်ဖော်ပဌသည်။

source: www.habr.com

မဟတ်ချက် Add