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


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


تعتبر قواعد بيانات 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 متعددة من نفس المجموعة إلى نفس قاعدة البيانات الهدف بوستجرس مع تكوين واحد لكثير
لا يمكن أن تتطابق أسماء المصدر والخطط الهدف.
يمكن استرداد بيانات النسخ المتماثل من نسخة متماثلة MySQL.
يتم استبعاد الجداول التي لا يمكن تكرارها أو إنشاء أخطاء.
يتم التحكم في كل وظيفة النسخ المتماثل بواسطة الشياطين.
التحكم في استخدام المعلمات وملفات التكوين على أساس YAML.


مثال


مضيفvm1vm2
نسخة نظام التشغيلCentOS Linux 7.6 x86_64CentOS Linux 7.5 x86_64
إصدار خادم DBالخلية 5.7.26PostgreSQL 10.5
ميناء ديسيبل33065433
عنوان IP192.168.56.102192.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 (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 للمثال. يمكن تنزيله من هنا . نموذج قاعدة البيانات يأتي في شكل tar وأرشيف مضغوط مع تعليمات لإنشاء واستيراد السلاسل.


يتم إنشاء مستخدم خاص في قواعد بيانات 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. يتم تكوين مستخدم 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 (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 هي أداة مفتوحة المصدر تقوم بتكرار أي قاعدة بيانات إلى أي قاعدة بيانات مشتركة أخرى: Oracle و MongoDB و PostgreSQL و MySQL و SQL Server و MariaDB و DB2 و Sybase و Greenplum و Informix و H2 و Firebird وغيرها من مثيلات قاعدة البيانات السحابية ، على سبيل المثال Redshift ، و Azure ، إلخ. الوظائف المتاحة: تزامن قواعد البيانات والملفات ، وتكرار العديد من قواعد البيانات الرائدة ، والتزامن الذي تمت تصفيته ، والتحويل ، وغيرها. هذه أداة Java وتتطلب إصدارًا قياسيًا من JRE أو JDK (الإصدار 8.0 أو أعلى). هنا يمكنك تسجيل تغييرات البيانات على المشغلات في قاعدة البيانات المصدر وإرسالها إلى قاعدة البيانات الهدف المقابلة في شكل حزم.


متماثلات الميزات


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


مثال


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


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


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


مضيفvm1vm2
نسخة نظام التشغيلCentOS Linux 7.6 x86_64CentOS Linux 7.6 x86_64
إصدار خادم DBالخلية 5.7.26PostgreSQL 10.5
ميناء ديسيبل33065832
عنوان IP192.168.1.107192.168.1.112
متماثل الإصدارمتماثلات 3.9متماثلات 3.9
مسار التثبيت متماثل/usr/local/symmetric-server-3.9.20/usr/local/symmetric-server-3.9.20
متماثل اسم العقدةكورب-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 ، والذي يستخدم سلسلة الاتصال المحددة أعلاه وبيانات اعتماد تسجيل الدخول. نحن نتصل بقاعدة البيانات replica_db ، وسيتم إنشاء الجداول أثناء إنشاء المخطط. يعرض sync.url موقع التواصل مع عقدة المزامنة.


تم تكوين العقدة 2 على مضيف vm2 كـ store-001 ، ويتم تحديد الباقي في ملف node.properties أدناه. العقدة store-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 جداول. بعد ذلك ، يؤدي تشغيل 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 إلى store-001 من corp-000 باستخدام الأمر التالي.


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

في هذه المرحلة ، يتم إدراج سجل جديد في جدول العناصر في قاعدة بيانات MySQL على المضيف corp-000 (host: vm1) ، ويمكنك التحقق من النسخ المتماثل الخاص به في قاعدة بيانات PostgreSQL في host 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) 

لتنفيذ عملية Push لنقل البيانات من store-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 مع وسيطة مشغلات المزامنة ، والتي تقوم بإعادة إنشاء المشغلات لتتوافق مع تعريفات الجدول. يتم تنفيذ مخطط الإرسال لإرسال تغييرات المخطط إلى عقدة store-001 ، ويتم تكوين النسخ المتماثل لجدول t1.


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

فوائد SymmetricDS


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


متماثل عيوب


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


ملخص متماثل


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


تعتمد العينة على دليل البداية السريعة SymmetricDS. تفاصيل دليل المستخدم المفاهيم المختلفة المتعلقة بتكوين النسخ المتماثل باستخدام SymmetricDS.

Source: https://habr.com/ru/post/ar467313/


All Articles