PostgreSQL ۽ MySQL جي وچ ۾ ڪراس نقل

PostgreSQL ۽ MySQL جي وچ ۾ ڪراس نقل

مان پوسٽ گري ايس ايس ايل ۽ MySQL جي وچ ۾ ڪراس ريپليڪيشن جو خاڪو ڏيندس، ۽ گڏوگڏ ٻن ڊيٽابيس سرورز جي وچ ۾ ڪراس ريپليڪشن کي ترتيب ڏيڻ جا طريقا. عام طور تي، ڪراس-نقل ٿيل ڊيٽابيسس کي هڪجهڙائي سڏيو ويندو آهي، ۽ اهو هڪ RDBMS سرور کان ٻئي ڏانهن منتقل ڪرڻ جو هڪ آسان طريقو آهي.

PostgreSQL ۽ MySQL ڊيٽابيس کي عام طور تي لاڳاپو سمجهيو ويندو آهي، پر اضافي واڌارن سان اهي NoSQL صلاحيتون پيش ڪن ٿا. هتي اسان هڪ تعلقي DBMS نقطه نظر کان PostgreSQL ۽ MySQL جي وچ ۾ نقل تي بحث ڪنداسين.

اسان مڪمل اندروني ڪمن کي بيان نه ڪنداسين، صرف بنيادي اصولن جي ڪري ته توهان ڊيٽابيس سرورز، فائدن، حدن ۽ استعمال جي ڪيسن جي وچ ۾ نقل ترتيب ڏيڻ جو خيال حاصل ڪريو.

عام طور تي، ٻن هڪجهڙن ڊيٽابيس سرورز جي وچ ۾ نقل يا ته بائنري موڊ ۾ ڪيو ويندو آهي يا ماسٽر (اڪا پبلشر، ماسٽر، يا فعال) ۽ غلام (سبسڪرائبر، اسٽينڊ بائي، يا غير فعال) جي وچ ۾ سوالن کي استعمال ڪندي. نقل ڪرڻ جو مقصد غلام پاسي تي ماسٽر ڊيٽابيس جي حقيقي وقت جي ڪاپي مهيا ڪرڻ آهي. انهي حالت ۾، ڊيٽا کي ماسٽر کان غلام ڏانهن منتقل ڪيو ويو آهي، اهو آهي، فعال کان غير فعال، ڇاڪاڻ ته نقل صرف هڪ طرفي ۾ ڪيو ويندو آهي. پر توهان ٻنهي طرفن ۾ ٻن ڊيٽابيس جي وچ ۾ نقل قائم ڪري سگهو ٿا، انهي ڪري ته ڊيٽا هڪ فعال-فعال ترتيب ۾ غلام کان ماسٽر ڏانهن منتقل ڪيو وڃي. هي سڀ، بشمول cascading replication، ٻن يا وڌيڪ هڪجهڙائي واري ڊيٽابيس سرورز جي وچ ۾ ممڪن آهي. فعال-فعال يا فعال-غير فعال تشڪيل، ضرورت، ابتدائي تشڪيل ۾ اهڙين صلاحيتن جي دستيابي يا خارجي تشڪيل حلن جي استعمال ۽ موجوده ٽريڊ-آفس تي منحصر آهي.

بيان ڪيل تشڪيل مختلف ڊيٽابيس سرورز جي وچ ۾ ممڪن آهي. سرور کي ترتيب ڏئي سگھجي ٿو نقل ڪيل ڊيٽا کي قبول ڪرڻ لاءِ ٻئي ڊيٽابيس سرور کان ۽ اڃا تائين برقرار رکي سگھن ٿا ريپليڪٽ ٿيل ڊيٽا جي حقيقي وقت جي سنيپ شاٽ. 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 اسڪيما ھڪڙي ٽارگيٽ پوسٽ گري ايس ايس ايل ڊيٽابيس ۾ ھڪڙي ھڪڙي کان گھڻن ترتيبن ۾ نقل ڪري سگھجن ٿيون
ذريعو ۽ ٽارگيٽ اسڪيما جا نالا ساڳيا نٿا ٿي سگهن.
نقل واري ڊيٽا کي حاصل ڪري سگهجي ٿو هڪ cascaded MySQL نقل مان.
ٽيبل جيڪي نقل نٿا ڪري سگھن يا غلطيون پيدا ڪري سگھن ٿيون خارج ٿيل آھن.
هر نقل جي فنڪشن کي ڊيمن طرفان ڪنٽرول ڪيو ويندو آهي.
YAML-based parameters ۽ configuration files ذريعي ڪنٽرول.

مثال طور

ميزبان
وي ايم 1
وي ايم 2

OS ورجن
CentOS لينڪس 7.6 x86_64
CentOS لينڪس 7.5 x86_64

ڊي بي سرور ورزن
MySQL 5.7.26
پوسٽ ايس ايس ايڪس آرٽيڪل

ڊي بي پورٽ
3306
5433

IP پتي
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 کي فعال ڪرڻ ۽ ڊفالٽ ڊائريڪٽري ۽ ترتيب واري فائلون ٺاهي.

(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 configuration فائل ۾ گلوبل سيٽنگون جو ھڪڙو سيڪشن آھي، جتي توھان سيٽنگون منظم ڪري سگھو ٿا جھڙوڪ لاڪ فائل جو مقام، لاگز جو مقام، لاگز لاءِ اسٽوريج جو مدو وغيره. نقل جي دوران اوور رائيڊنگ قسمن لاءِ ضابطن جو هڪ سيٽ. مثال هڪ قسم جي اوور رائڊنگ قاعدي کي ڊفالٽ ڪري ٿو جيڪو بدلائي ٿو tinyint(1) کي بولين ويليو ۾. ايندڙ حصي ۾، اسان ٽارگيٽ ڊيٽابيس کي ڪنيڪشن جي تفصيل بيان ڪريون ٿا. اسان جي حالت ۾، هي هڪ PostgreSQL ڊيٽابيس آهي، نامزد ٿيل pg_conn. آخري حصي ۾، اسان ظاهر ڪريون ٿا ماخذ ڊيٽا، اهو آهي، ماخذ ڊيٽابيس جي ڪنيڪشن پيٽرولز، ماخذ ۽ ٽارگيٽ ڊيٽابيس جي وچ ۾ نقشي جي اسڪيم، جدولن کي ڇڏڻ جي ضرورت آهي، انتظار جو وقت، ميموري، پيڪيج جي سائيز. نوٽ ڪريو ته "ذريعو" جمع آهي، مطلب ته اسان ڪيترن ئي ذريعن جي ڊيٽابيس کي هڪ واحد ٽارگيٽ ڊيٽابيس ۾ شامل ڪري سگهون ٿا ڪيترن ئي کان هڪ ترتيب ترتيب ڏيڻ لاء.

مثال ڊيٽابيس world_x ۾ 4 جدولن سان قطارون آھن جيڪي MySQL ڪميونٽي پيش ڪري ٿي مثال طور. اهو ڊائون لوڊ ڪري سگهجي ٿو هتي. نموني ڊيٽابيس هڪ ٽار ۽ ڪمپريس ٿيل آرڪائيو جي طور تي اچي ٿو قطار ٺاهڻ ۽ درآمد ڪرڻ جي هدايتن سان.

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 پاسي تي، ھڪڙو db_replica ڊيٽابيس ٺاھيو ويو آھي جيڪو قبول ڪندو MySQL ڊيٽابيس مان تبديليون. PostgreSQL ۾ استعمال ڪندڙ usr_replica پاڻمرادو ترتيب ڏنل آهي مالڪ جي مالڪ جي طور تي ٻن اسڪيمن، pgworld_x ۽ sch_chameleon، جنهن ۾ ترتيب ڏنل حقيقي نقل ٿيل جدول ۽ نقل ڪرڻ واري ڊاريڪٽري جدولن تي مشتمل آهي. 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 ڪمانڊز کي هلائڻ دوران ڪو مسئلو نه ٿئي.

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 (chimeleon) حڪم ماحول کي تيار ڪن ٿا، ماخذ شامل ڪريو، ۽ ريپليڪا جي شروعات ڪريو. create_replica_schema argument to 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 ڊيٽابيس ۾ داخل ڪريون ٿا، ۽ pg_chameleon ۾ sync_tables argument کي ڪال ڪريون ٿا ڊيمن کي اپڊيٽ ڪرڻ لاءِ ۽ ٽيبل کي رڪارڊ سان گڏ 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.

ٽيسٽ جي نتيجن جي تصديق ڪرڻ لاءِ، اسان پوسٽ گري ايس ايس ايل ڊيٽابيس مان جدول جي پڇا ڳاڇا ڪريون ٿا ۽ قطارون ڪڍيون ٿا.

$> 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 خاصيتون

اوزار پليٽ فارم آزاد آهي، مطلب ته ٻه يا وڌيڪ مختلف ڊيٽابيس ڊيٽا مٽائي سگهن ٿيون.
لاڳاپو ڊيٽابيس ڊيٽا تبديل رڪارڊ استعمال ڪندي هم وقت سازي ڪئي وئي آهي، جڏهن ته فائل سسٽم تي ٻڌل ڊيٽابيس فائل هم وقت سازي استعمال ڪندا آهن.
قاعدن جي سيٽ جي بنياد تي Push ۽ Pull طريقن کي استعمال ڪندي ٻه طرفي نقل.
ڊيٽا جي منتقلي ممڪن آهي محفوظ ۽ گهٽ بينڊوڊٿ نيٽ ورڪن تي.
خودڪار وصولي جڏهن نوڊس هڪ ناڪامي ۽ خودڪار تڪرار جي حل کان پوء ٻيهر آپريشن شروع ڪن ٿا.
Cloud مطابقت رکندڙ ۽ طاقتور ايڪسٽينشن APIs.

مثال طور

SymmetricDS ٻن طريقن مان هڪ ۾ ترتيب ڏئي سگهجي ٿو:
هڪ ماسٽر (والدين) نوڊ جيڪو مرڪزي طور تي ٻن غلام (ٻار) نوڊس جي وچ ۾ ڊيٽا جي نقل کي ترتيب ڏئي ٿو، ۽ ٻارن جي نوڊس جي وچ ۾ رابطي صرف والدين جي ذريعي ٿئي ٿي.
هڪ فعال نوڊ (نوڊ 1) بغير ڪنهن وچولي جي ٻئي فعال نوڊ (نوڊ 2) سان نقل ڪرڻ لاءِ رابطو ڪري سگهي ٿو.

ٻنهي اختيارن ۾، ڊيٽا جي بدلي ۾ ٿئي ٿي Push ۽ Pull استعمال ڪندي. هن مثال ۾ اسان هڪ فعال-فعال ترتيب تي غور ڪنداسين. اهو تمام ڊگهو وٺندو ته پوري فن تعمير کي بيان ڪرڻ لاء، تنهنڪري توهان جي تحقيق ڪريو. رهنمائي ڪندڙSymmetricDS ڊوائيس بابت وڌيڪ سکڻ لاء.

SymmetricDS انسٽال ڪرڻ تمام سادو آهي: زپ فائل جو اوپن سورس ورزن ڊائون لوڊ ڪريو هتي کان ۽ ان کي ٻاهر ڪڍو جتي توهان چاهيو. ھيٺ ڏنل جدول ھن مثال ۾ SymmetricDS جي تنصيب جي جڳھ ۽ ورزن جي باري ۾ معلومات مهيا ڪري ٿي، گڏوگڏ ڊيٽابيس ورزن، لينڪس ورزن، IP پتي، ۽ بندرگاھن ٻنهي نوڊس لاءِ.

ميزبان
وي ايم 1
وي ايم 2

OS ورجن
CentOS لينڪس 7.6 x86_64
CentOS لينڪس 7.6 x86_64

ڊي بي سرور ورزن
MySQL 5.7.26
پوسٽ ايس ايس ايڪس آرٽيڪل

ڊي بي پورٽ
3306
5832

IP پتي
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 نوڊ جو نالو
Corp-000
اسٽور- 001

هتي اسان /usr/local/symmetric-server-3.9.20 ۾ SymmetricDS انسٽال ڪريون ٿا، ۽ اتي مختلف ذيلي ڊائريڪٽريون ۽ فائلون محفوظ ڪيون وينديون. اسان نموني ۽ انجڻ جي ذيلي ڊائريڪٽرن ۾ دلچسپي رکون ٿا. نمونن جي ڊاريڪٽري ۾ شامل آهي مثال ڪنفيگريشن فائلون نوڊ پراپرٽيز سان، انهي سان گڏ مثال 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 ڊرائيور طرفان سنڀاليو ويندو آهي، جيڪو مٿي ڏنل ڪنيڪشن اسٽرنگ ۽ لاگ ان سندون استعمال ڪندو آهي. اسان replica_db ڊيٽابيس سان ڳنڍيون ٿا ۽ اسڪيما ٺاهڻ دوران ٽيبل ٺاهيا ويندا. sync.url هم وقت سازي لاءِ نوڊ سان ڪنيڪشن جو مقام ڏيکاري ٿو.

نوڊ 2 ميزبان vm2 تي ترتيب ڏنل آهي اسٽور-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 جدولن سان هڪ مثال اسڪيما ٺاهيندو. پوءِ symadmin ڪمانڊ سان Create-sym-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

مثال ۾، شيون ۽ شيون_سيلنگ_قيمت جون ٽيبلون پاڻمرادو ترتيب ڏنل آھن نقل ڪرڻ لاءِ corp-000 کان اسٽور-001 تائين، ۽ وڪرو جدولون (sale_transaction ۽ sale_return_line_item) پاڻمرادو ترتيب ڏنل آھن اسٽور-001 کان ڪورپ-000 تائين نقل ڪرڻ لاءِ. ھاڻي اسان ھڪڙي اسڪيما ٺاھيون ٿا PostgreSQL ڊيٽابيس ۾ ميزبان vm2 (store-001) تي ان کي تيار ڪرڻ لاءِ ان کي corp-000 کان ڊيٽا حاصل ڪرڻ لاءِ.

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

پڪ سان پڪ ڪريو ته MySQL ڊيٽابيس ۾ vm1 تي مثالي جدول ۽ SymmetricDS ڪيٽلاگ جدول آهن. نوٽ ڪريو ته SymmetricDS سسٽم ٽيبل (sym_ سان اڳ ۾ ٺھيل) في الحال صرف نوڊ corp-000 تي موجود آھن ڇاڪاڻ ته اھو اھو آھي جتي اسان ٺاھيو-sym-ٽيبل ڪمانڊ ھليو آھي ۽ نقل کي منظم ڪنداسين. ۽ نوڊ اسٽور-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 &

جيڪڏهن توهان sym سرور جي عمل کي هلائيندا آهيو vm2 ميزبان تي، اهو پڻ ٺاهيندو SymmetricDS catalog جدولن ۾ PostgreSQL ڊيٽابيس ۾. جيڪڏهن توهان ٻنهي نوڊس تي سم سرور جي عمل کي هلائيندا آهيو، اهي هڪ ٻئي سان همراه ڪندا آهن ڊيٽا کي نقل ڪرڻ لاءِ corp-000 کان اسٽور-001 تائين. جيڪڏهن ڪجهه سيڪنڊن کان پوءِ اسان سوال ڪريون ته سڀئي 4 ٽيبل ٻنهي پاسن تي، اسان ڏسنداسين ته نقل ڪامياب ٿي وئي. يا توهان هيٺ ڏنل حڪم سان corp-001 کان نوڊ اسٽور-000 ڏانهن بوٽ اسٽراپ موڪلي سگهو ٿا.

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

ھن نقطي تي، ھڪڙو نئون رڪارڊ داخل ڪيو ويو آھي آئٽم جدول ۾ MySQL ڊيٽابيس ۾ node corp-000 (ميزبان: vm1)، ۽ توھان چيڪ ڪري سگھوٿا ان جي نقل پوسٽ گري ايس ايس ايل ڊيٽابيس تي نوڊ اسٽور-001 (ميزبان: vm2). اسان ڏسون ٿا پل آپريشن ڊيٽا منتقل ڪرڻ لاءِ ڪورپ-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 کان ڪورپ-000 تائين ڊيٽا کي منتقل ڪرڻ لاءِ پش آپريشن ڪرڻ لاءِ، اسان sale_transaction ٽيبل ۾ رڪارڊ داخل ڪريون ٿا ۽ تصديق ڪريون ٿا ته نقل ڪامياب آهي.

نتيجو

اسان 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)

ڪنفيگريشن کي پوءِ اسڪيما جي تبديليءَ جو اطلاع ڏنو ويو آهي، يعني هڪ نئين ٽيبل جو اضافو، symadmin ڪمانڊ کي sync-triggers argument سان استعمال ڪندي، جيڪو ٽيبل جي وضاحتن کي نقشي ۾ آڻڻ لاءِ ٽريگرز کي ٻيهر ٺاهي ٿو. موڪليو-اسڪيما تي عمل ڪيو ويو آهي اسڪيما تبديلين کي نوڊ اسٽور-001 ڏانهن موڪلڻ لاءِ، ۽ ٽيبل 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 توهان کي اجازت ڏئي ٿو ته ٻه طرفي نقل قائم ڪرڻ جي وچ ۾ ٻه، ٽي، يا اڃا به ڪيترائي هزار نوڊس فائلن کي نقل ڪرڻ ۽ هم وقت سازي ڪرڻ لاءِ. هي هڪ منفرد اوزار آهي جيڪو آزاديءَ سان ڪيترن ئي ڪمن کي انجام ڏئي ٿو، جهڙوڪ نوڊ تي ڊگھي عرصي کان پوءِ خودڪار ڊيٽا وصولي، HTTPS ذريعي نوڊس جي وچ ۾ محفوظ ۽ موثر ڊيٽا مٽائڻ، ضابطن جي هڪ سيٽ جي بنياد تي خودڪار تڪرار جو انتظام، وغيره. SymmetricDS انجام ڏئي ٿو. ڪنهن به ڊيٽابيس جي وچ ۾ نقل، تنهن ڪري، اهو مختلف قسم جي منظرنامي لاء استعمال ڪري سگهجي ٿو، بشمول لڏپلاڻ، لڏپلاڻ، تقسيم، فلٽرنگ، ۽ پليٽ فارمن تي ڊيٽا جي تبديلي.

مثال سرڪاري تي ٻڌل آهي تڪڙو ھدايت SymmetricDS پاران. IN استعمال ڪندڙ دستياب SymmetricDS سان نقل قائم ڪرڻ ۾ شامل مختلف تصورن کي تفصيل سان بيان ڪري ٿو.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو