مشغلات MySQL + النسخ المتماثل مع قواعد بيانات متعددة

StackOverflow https://stackoverflow.com/questions/98275

  •  01-07-2019
  •  | 
  •  

سؤال

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

الخادم "سيد"

  • قاعدة البيانات "legacydb"، تنسخ إلى الخادم "التابع".
  • تحتوي قاعدة البيانات "newdb" على مشغلات تقوم بتحديث "legacydb" ولا يوجد نسخ متماثل.

الخادم "العبد"

  • قاعدة البيانات "legacydb"

تحديثاتي لـ "newdb" تعمل بشكل جيد، وتطلق المشغلات الخاصة بي.يقومون بتحديث "legacydb" على الخادم "الرئيسي".ومع ذلك، لا يتم تكرار التغييرات وصولاً إلى العبيد.تقول مستندات MySQL أنه من أجل البساطة، ينظر النسخ المتماثل إلى سياق قاعدة البيانات الحالية (على سبيل المثال. "SELECT DATABASE();" ) عند تحديد الاستعلامات التي سيتم نسخها بدلاً من النظر إلى منتج الاستعلام.يتم تشغيل المشغل الخاص بي من سياق قاعدة البيانات "newdb"، لذا يتجاهل النسخ المتماثل التحديثات.

لقد حاولت نقل بيان التحديث إلى إجراء مخزن في "legacydb".هذا يعمل بشكل جيد (أي.تنسخ البيانات إلى الرقيق) عندما أقوم بالاتصال بـ "الرئيسي" وتشغيله يدويًا "USE newdb; CALL legacydb.do_update('Foobar', 1, 2, 3, 4);".ومع ذلك، عندما يتم استدعاء هذا الإجراء من مشغل فإنه لا يتم إجراء نسخ متماثل.

حتى الآن، كان تفكيري حول كيفية إصلاح ذلك واحدًا مما يلي.

  • فرض المشغل لتعيين قاعدة بيانات حالية جديدة.سيكون هذا أسهل، لكنني لا أعتقد أن هذا ممكن.هذا ما كنت أتمنى تحقيقه من خلال الإجراء المخزن.

  • قم بتكرار قاعدتي البيانات، واحصل على مشغلات في كل من السيد والعبد.هذا من شأنه أن يكون ممكنا، ولكن من الصعب اقامة.

  • فرض النسخ المتماثل لالتقاط كافة التغييرات على "legacydb"، بغض النظر عن سياق قاعدة البيانات الحالية.

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

أي مساعدة حول كيفية تحقيق ذلك سيكون موضع تقدير كبير.

هل كانت مفيدة؟

المحلول

قد يكون لهذا علاقة به:

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

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

بالإضافة إلى ذلك، هناك قائمة كاملة من المشكلات المتعلقة بالمشغلات:http://dev.mysql.com/doc/refman/5.0/en/routine-restrictions.html

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top