سؤال

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

لدي الآن إجراء مخزن (وليس وظيفة) يتم استدعاؤه بواسطة مشغل على الإدخال.وفقًا لمستندات MySQL، بالنسبة لمشغلات النسخ المتماثل، قم بتسجيل استدعاء المشغل بينما تقوم الإجراءات المخزنة فعليًا بتسجيل نتيجة الإجراء المخزن.

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

شكرًا

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

المحلول

في MySQL 5.0 (وMySQL 5.1 مع التسجيل الثنائي المستند إلى البيانات)، يتم تسجيل استعلام الاستدعاء فقط، لذلك في حالتك، سيتم تسجيل INSERT.

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

في MySQL 5.1، يوجد تسجيل ثنائي قائم على الصفوف، والذي سيسجل فقط الصفوف التي تم تغييرها، لذلك لن يتم إعادة تشغيل المشغل على العبد، ولكن سيتم نشر جميع الصفوف التي تم تغييرها.

نصائح أخرى

بالإضافة إلى إجابة هاريسون الممتازة:

  • بافتراض أن قواعد البيانات متزامنة (المخطط، البيانات، نفس الإصدار) في البداية، يجب أن تعمل فقط
  • إذا لم يكن الأمر كذلك، فمن المحتمل أنك تستخدم شيئًا غير حتمي في استفساراتك أو مشغلاتك.أصلح هذا.
  • بغض النظر عن كيفية استخدامك للنسخ المتماثل، فأنت بحاجة إلى المراقبة للتأكد من أن العبيد متزامنون دائمًا.بدون أي مراقبة، ستصبح غير متزامنة (بمهارة) ولن تلاحظ ذلك.لا يحتوي MySQL على ميزة مدمجة تلقائية للتحقق من ذلك أو إصلاحه.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top