عبر النسخ المتماثل بين PostgreSQL و MySQL

عبر النسخ المتماثل بين PostgreSQL و MySQL

سأتحدث بإيجاز عن النسخ المتماثل بين PostgreSQL و MySQL ، بالإضافة إلى طرق إعداد النسخ المتماثل بين خادمي قاعدة البيانات هذين. يشار إلى قواعد البيانات المتماثلة بشكل عام على أنها قواعد بيانات متجانسة ، وهذه طريقة ملائمة للترحيل من خادم RDBMS إلى خادم آخر.

تعتبر قواعد بيانات PostgreSQL و MySQL تقليديًا علائقية ، ولكن مع امتدادات إضافية توفر إمكانات NoSQL. سنناقش هنا النسخ المتماثل بين PostgreSQL و MySQL من منظور إدارة قواعد البيانات العلائقية.

لن نصف العناصر الداخلية بأكملها ، بل المبادئ الأساسية فقط ، حتى تحصل على فكرة عن إعداد النسخ المتماثل بين خوادم قاعدة البيانات والمزايا والقيود وحالات الاستخدام.

عادةً ، يتم إجراء النسخ المتماثل بين خادمين متطابقين لقاعدة البيانات إما في الوضع الثنائي أو عن طريق الاستعلامات بين السيد (المعروف أيضًا باسم الناشر أو الرئيسي أو النشط) والرقيق (المشترك أو الاستعداد أو الخامل). الغرض من النسخ المتماثل هو توفير نسخة في الوقت الحقيقي من قاعدة البيانات الرئيسية في الجانب البديل. في هذه الحالة ، يتم نقل البيانات من السيد إلى العبد ، أي من النشط إلى الخامل ، لأنه يتم إجراء النسخ المتماثل في اتجاه واحد فقط. ولكن يمكنك إعداد النسخ المتماثل بين قاعدتي البيانات في كلا الاتجاهين ، بحيث يتم نقل البيانات من التابع إلى الرئيسي في تكوين نشط نشط. كل هذا ، بما في ذلك النسخ المتماثل المتتالي ، ممكن بين اثنين أو أكثر من خوادم قاعدة البيانات المتطابقة. يعتمد التكوين النشط-النشط أو النشط-السلبي على الحاجة ، وتوافر هذه القدرات في التكوين الأولي أو استخدام حلول الضبط الخارجية والتجارة الحالية -أوفس.

التكوين الموصوف ممكن بين خوادم قاعدة البيانات المختلفة. يمكن تكوين الخادم لتلقي البيانات المنسوخة من خادم قاعدة بيانات آخر مع الاحتفاظ بلقطات الوقت الحقيقي للبيانات المنسوخة. تقدم MySQL و PostgreSQL معظم هذه التكوينات محليًا أو من خلال امتدادات جهات خارجية ، بما في ذلك طرق السجل الثنائي وأقفال القرص والطرق القائمة على الصفوف والجمل.

هناك حاجة إلى النسخ المتماثل بين MySQL و PostgreSQL للترحيل لمرة واحدة من خادم قاعدة بيانات إلى آخر. تستخدم قواعد البيانات هذه بروتوكولات مختلفة ، لذا لا يمكنك ربطها مباشرة. لتسهيل تبادل البيانات ، يمكنك استخدام أداة خارجية مفتوحة المصدر ، مثل pg_chameleon.

ما هو pg_chameleon

pg_chameleon هو نظام نسخ متماثل من MySQL إلى PostgreSQL في Python 3. ويستخدم مكتبة مفتوحة المصدر mysql-replication ، أيضًا في Python. يتم استرداد صور الصفوف من جداول MySQL وتخزينها ككائنات JSONB في قاعدة بيانات PostgreSQL ، ثم يتم فك تشفيرها بواسطة وظيفة pl / pgsql وتشغيلها في قاعدة بيانات PostgreSQL.

ميزات pg_chameleon

يمكن نسخ مخططات MySQL المتعددة من نفس المجموعة إلى قاعدة بيانات هدف PostgreSQL واحدة بتكوين واحد لكثير
لا يمكن أن يكون اسم مخطط المصدر والهدف متماثلين.
يمكن استرداد بيانات النسخ المتماثل من نسخة متماثلة متتالية من MySQL.
يتم استبعاد الجداول التي لا يمكن تكرارها أو إنشاء أخطاء.
يتم التحكم في كل وظيفة نسخ بواسطة الشياطين.
السيطرة مع المعلمات وملفات التكوين على أساس YAML.

مثال

يستضيف
vm1
vm2

إصدار نظام التشغيل
سينت أو إس لينكس 7.6 x86_64
سينت أو إس لينكس 7.5 x86_64

إصدار خادم قاعدة البيانات
الخلية 5.7.26
PostgreSQL 10.5

منفذ DB
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 على قسم من الإعدادات العامة (الإعدادات العامة) حيث يمكنك التحكم في الإعدادات مثل موقع ملف القفل ، وموقع السجلات ، وفترة تخزين السجلات ، وما إلى ذلك. القسم ، حيث القواعد المحددة لتجاوز الأنواع أثناء النسخ المتماثل. يستخدم المثال الافتراضي قاعدة تجاوز النوع التي تحول tinyint (1) إلى قيمة منطقية. في القسم التالي ، نحدد تفاصيل الاتصال بقاعدة البيانات الهدف. في حالتنا ، هذه قاعدة بيانات PostgreSQL ، يُشار إليها باسم pg_conn. في القسم الأخير ، نحدد البيانات المصدر ، أي معلمات الاتصال لقاعدة البيانات المصدر ، مخطط التعيين لقواعد البيانات المصدر والهدف ، الجداول التي سيتم تخطيها ، المهلة ، الذاكرة ، حجم الحزمة. لاحظ أن "المصادر" هي صيغة الجمع ، مما يعني أنه يمكننا إضافة قواعد بيانات مصدر متعددة لنفس الهدف لإعداد تكوين متعدد إلى واحد.

تحتوي قاعدة بيانات world_x في المثال على 4 جداول بها صفوف يقترحها مجتمع MySQL على سبيل المثال. يمكن تنزيله هنا. تأتي عينة قاعدة البيانات كأرشيف مضغوط وقطران مع إرشادات لإنشاء السلاسل واستيرادها.

يتم إنشاء مستخدم خاص بنفس الاسم usr_replica في قواعد بيانات MySQL و PostgreSQL. تمنحه 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. يتم تكوين مستخدم usr_replica في PostgreSQL تلقائيًا كمالك للمخططين 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 (الحرباء) الثلاثة التالية بإعداد البيئة وإضافة المصدر وتهيئة النسخة المتماثلة. تُنشئ الوسيطة create_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.

نتيجة.

كما قلنا بالفعل ، تدير الشياطين كل وظيفة نسخ. لعرضها ، استعلم عن جدول العملية باستخدام أمر Linux ps ، كما هو موضح أدناه.

نتيجة.

لا يتم اعتبار النسخ المتماثل مهيئًا حتى نقوم باختباره في الوقت الفعلي ، كما هو موضح أدناه. نقوم بإنشاء جدول ، وإدراج اثنين من السجلات في قاعدة بيانات 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 ، إلخ. الميزات المتوفرة: مزامنة قاعدة البيانات والملفات ، النسخ المتماثل لقاعدة البيانات الرئيسية المتعددة ، المزامنة المفلترة ، التحويل ، وغيرها. هذه أداة Java وتتطلب الإصدار القياسي JRE أو JDK (الإصدار 8.0 أو أعلى). هنا يمكنك تسجيل تغييرات البيانات على المشغلات في قاعدة البيانات المصدر وإرسالها إلى قاعدة البيانات الهدف المناسبة كدُفعات.

قدرات متماثلة DS

الأداة مستقلة عن النظام الأساسي ، مما يعني أنه يمكن لقواعد بيانات مختلفة أو أكثر تبادل البيانات.
تتم مزامنة قواعد البيانات العلائقية عن طريق تسجيل تغييرات البيانات ، وتستخدم قواعد البيانات القائمة على أنظمة الملفات مزامنة الملفات.
النسخ المتماثل ثنائي الاتجاه باستخدام طرق الدفع والسحب بناءً على مجموعة من القواعد.
يمكن نقل البيانات عبر شبكات وشبكات آمنة ذات عرض نطاق ترددي منخفض.
الاسترداد التلقائي عند استئناف العقد بعد الفشل وحل التعارض التلقائي.
واجهات برمجة تطبيقات تمديد فعالة ومتوافقة مع السحابة.

مثال

يمكن تكوين نظام DS المتماثل بإحدى طريقتين:
العقدة الرئيسية (الأصل) التي تنسق مركزيًا نسخ البيانات بين عقدتين تابعتين ، ويتم تبادل البيانات بين العقد الفرعية فقط من خلال الأصل.
يمكن للعقدة النشطة (العقدة 1) الاتصال من أجل النسخ المتماثل مع عقدة نشطة أخرى (العقدة 2) دون وسيط.

في كلا الخيارين ، يحدث تبادل البيانات باستخدام الدفع والسحب. في هذا المثال ، سننظر في التكوين النشط النشط. إنه طويل جدًا لوصف العمارة بأكملها ، لذا ادرس توجيهلمعرفة المزيد حول جهاز SymmetricDS.

يعد تثبيت SymmetricDS أمرًا سهلاً: قم بتنزيل ملف مضغوط مفتوح المصدر من هنا واستخرجها أينما تريد. يسرد الجدول التالي موقع التثبيت وإصدار SymmetricDS في هذا المثال ، بالإضافة إلى إصدارات قاعدة البيانات وإصدارات Linux وعناوين IP والمنافذ لكلا العقدتين.

يستضيف
vm1
vm2

إصدار نظام التشغيل
سينت أو إس لينكس 7.6 x86_64
سينت أو إس لينكس 7.6 x86_64

إصدار خادم قاعدة البيانات
الخلية 5.7.26
PostgreSQL 10.5

منفذ DB
3306
5832

عنوان IP
192.168.1.107
192.168.1.112

نسخة DS المتماثلة
متماثل DS 3.9
متماثل DS 3.9

مسار التثبيت SymmetricDS
/usr/local/symtric-server-3.9.20
/usr/local/symtric-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

تسمى هذه العقدة corp-000 في تكوين SymmetricDS ويتم التعامل مع اتصال قاعدة البيانات بواسطة مشغل mysql jdbc الذي يستخدم سلسلة الاتصال أعلاه وبيانات اعتماد تسجيل الدخول. نحن على اتصال بقاعدة بيانات replica_db وسيتم إنشاء الجداول أثناء إنشاء المخطط. يعرض sync.url الرابط إلى العقدة المراد مزامنتها.

تم تكوين العقدة 2 على مضيف vm2 كمخزن 001 والباقي محدد في ملف node.properties أدناه. تدير عقدة store-001 قاعدة بيانات PostgreSQL ، و pgdb_replica هي قاعدة البيانات المراد نسخها. Register.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 جداول. ثم يؤدي تنفيذ create-sym-tables باستخدام الأمر symadmin إلى إنشاء جداول دليل حيث سيتم تخزين قواعد واتجاهات النسخ المتماثل بين العقد. أخيرًا ، يتم تحميل بيانات العينة في الجداول.

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_selling_price تلقائيًا للنسخ المتماثل من corp-000 إلى store-001 ، ويتم تكوين جداول البيع (sale_transaction و sale_return_line_item) تلقائيًا للنسخ المتماثل من store-001 إلى corp-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 ، لأن هذا هو المكان الذي قمنا فيه بتشغيل الأمر create-sym-tables وسنتولى إدارة النسخ المتماثل. وفي قاعدة البيانات في العقدة store-001 ، سيكون هناك 4 أمثلة فقط للجداول بدون بيانات.

الجميع. البيئة جاهزة لتشغيل عمليات خادم sym على كلا العقدتين كما هو موضح أدناه.

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

يتم إرسال إدخالات السجل إلى ملف سجل الخلفية (symmetric.log) في مجلد السجل في الدليل حيث تم تثبيت SymmetricDS ، وكذلك إلى الإخراج القياسي. يمكن الآن بدء تشغيل خادم sym على عقدة store-001.

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

إذا قمت بتشغيل عملية خادم sym على مضيف vm2 ، فسيقوم بإنشاء جداول كتالوج SymmetricDS في قاعدة بيانات PostgreSQL أيضًا. إذا قمت بتشغيل عملية خادم sym على كلا العقدتين ، فسوف ينسقان مع بعضهما البعض لنسخ البيانات من corp-000 إلى store-001. إذا استعلمنا بعد بضع ثوانٍ عن جميع الجداول الأربعة على كلا الجانبين ، فسنرى أن النسخ المتماثل كان ناجحًا. أو يمكنك إرسال bootstrap إلى المخزن 4 من corp-001 باستخدام الأمر التالي.

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

في هذه المرحلة ، يتم إدراج سجل جديد في جدول العناصر في قاعدة بيانات MySQL على العقدة corp-000 (host: vm1) ويمكن التحقق من النسخ المتماثل إلى قاعدة بيانات PostgreSQL على node store-001 (host: vm2). نرى عملية سحب لنقل البيانات من corp-000 إلى store-001.

mysql> insert into item values ('22000002','Jelly Bean');
Query OK, 1 row affected (0.00 sec)

vm2$> psql -p 5832 -U postgres pgdb_replica -c "select * from item"
 item_id  |   name
----------+-----------
 11000001 | Yummy Gum
 22000002 | Jelly Bean
(2 rows)

لإجراء عملية دفع لنقل البيانات من المخزن 001 إلى corp-000 ، نقوم بإدخال سجل في جدول sale_transaction والتحقق من اكتمال النسخ المتماثل.

نتيجة.

نرى إعدادًا ناجحًا للنسخ المتماثل ثنائي الاتجاه لنماذج الجداول بين قواعد بيانات MySQL و PostgreSQL. لإعداد النسخ المتماثل لجداول المستخدم الجديدة ، قم بتنفيذ الخطوات التالية. نقوم بإنشاء الجدول t1 على سبيل المثال وإعداد قواعد النسخ المتماثل الخاصة به على النحو التالي. لذلك قمنا بإعداد النسخ المتماثل فقط من corp-000 إلى store-001.

mysql> create table  t1 (no integer);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into sym_channel (channel_id,create_time,last_update_time) 
values ('t1',current_timestamp,current_timestamp);
Query OK, 1 row affected (0.01 sec)

mysql> insert into sym_trigger (trigger_id, source_table_name,channel_id,
last_update_time, create_time) values ('t1', 't1', 't1', current_timestamp,
current_timestamp);
Query OK, 1 row affected (0.01 sec)

mysql> insert into sym_trigger_router (trigger_id, router_id,
Initial_load_order, create_time,last_update_time) values ('t1',
'corp-2-store-1', 1, current_timestamp,current_timestamp);
Query OK, 1 row affected (0.01 sec)

يتم إخطار التكوين بعد ذلك بتغيير المخطط ، أي إضافة جدول جديد ، باستخدام الأمر symadmin مع وسيطة sync-triggers ، والتي تعيد إنشاء المشغلات لتتناسب مع تعريفات الجدول. يتم تشغيل مخطط الإرسال لإرسال تغييرات المخطط إلى المخزن 001 ، ويتم نسخ الجدول t1.

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

فوائد SymmetricDS

سهولة التثبيت والتكوين ، بما في ذلك مجموعة جاهزة من الملفات مع معلمات لإنشاء مخطط بثلاث أو عقدتين.
قواعد البيانات عبر الأنظمة الأساسية واستقلالية النظام الأساسي ، بما في ذلك الخوادم وأجهزة الكمبيوتر المحمولة والأجهزة المحمولة.
انسخ أي قاعدة بيانات إلى أي قاعدة بيانات أخرى محليًا أو على WAN أو في السحابة.
القدرة على العمل على النحو الأمثل مع بضع قواعد بيانات أو عدة آلاف من أجل النسخ المتماثل بسهولة.
نسخة مدفوعة مع واجهة المستخدم الرسومية ودعم ممتاز.

عيوب SymmetricDS

يجب عليك تحديد قواعد واتجاه النسخ المتماثل يدويًا على سطر الأوامر عبر عبارات SQL لتحميل جداول الكتالوج ، والتي قد تكون غير مريحة.
يمكن أن يكون إعداد العديد من الجداول للنسخ المتماثل مملاً ما لم تستخدم البرامج النصية لإنشاء عبارات SQL التي تحدد قواعد واتجاه النسخ المتماثل.
هناك الكثير من المعلومات في السجلات ، وفي بعض الأحيان تحتاج إلى تنظيف ملف السجل بحيث لا يشغل مساحة كبيرة.

ملخص المتماثل DS

يسمح لك نظام SymmetricDS بإعداد نسخ متماثل ثنائي الاتجاه بين عقدين أو ثلاثة أو حتى عدة آلاف من العقد من أجل نسخ الملفات ومزامنتها. إنها أداة فريدة من نوعها تؤدي العديد من المهام بمفردها ، مثل الاستعادة التلقائية للبيانات بعد فترة توقف طويلة على العقدة ، والتواصل الآمن والفعال بين العقد عبر HTTPS ، وإدارة الصراع تلقائيًا بناءً على مجموعة من القواعد ، وما إلى ذلك. بين أي قواعد بيانات ، لذلك ، يمكن استخدامه لمجموعة متنوعة من السيناريوهات ، بما في ذلك الترحيل والترقية والتوزيع والتصفية وتحويل البيانات عبر الأنظمة الأساسية.

المثال يستند إلى المسؤول مرشد سريع بواسطة SymmetricDS. في دليل الاستخدام يصف بالتفصيل المفاهيم المختلفة المتضمنة في إعداد النسخ المتماثل باستخدام SymmetricDS.

المصدر: www.habr.com

إضافة تعليق