المؤلف: shuixian
هل تعمل إجراءات ووظائف MySQL 5.1 المخزنة على النسخ المتماثل؟
نعم، يتم تنفيذ السلوك القياسي في الإجراءات والوظائف المخزنة التي يتم نسخها من خادم MySQL الرئيسي إلى الخادم التابع.
هل يمكن نسخ الإجراءات والوظائف المخزنة التي تم إنشاؤها على الخادم الرئيسي إلى الخادم التابع؟
نعم، يتم تنفيذ الإجراءات والوظائف المخزنة من خلال بيانات DDL العامة، والتي يتم نسخ إنشائها على الخادم الرئيسي إلى الخادم التابع، وبالتالي سيكون الهدف موجودًا على كلا الخادمين. يتم أيضًا نسخ عبارات ALTER وDROP للإجراءات والوظائف المخزنة.
كيف يحدث السلوك ضمن الإجراءات والوظائف المخزنة المنسوخة؟
يسجل MySQL كل حدث DML يحدث ضمن الإجراءات والوظائف المخزنة، وينسخ هذه الإجراءات الفردية إلى الخوادم التابعة. لا يتم نسخ الاستدعاءات الفعلية للإجراءات والوظائف المخزنة.
هل هناك أي متطلبات أمنية خاصة لاستخدام الإجراءات والوظائف والنسخ المتماثل المخزنة معًا؟
نعم، نظرًا لأن العبد لديه الإذن بتنفيذ أي عبارة تقرأ السجل الثنائي للسيد، فإن قيود الأمان المحددة موجودة للإجراءات والوظائف المخزنة المستخدمة مع النسخ المتماثل. إذا تم تمكين النسخ المتماثل أو التسجيل الثنائي بشكل عام (لأغراض الاسترداد في نقطة زمنية معينة)، فإن MySQL DBA لديه خياران للأمان متاحان:
يجب منح أي مستخدم يريد إنشاء إجراءات مخزنة امتيازات فائقة.
وبدلاً من ذلك، يمكن لـ DBA تعيين متغير النظام log_bin_trust_routine_creators إلى 1، مما سيسمح لأي شخص لديه أذونات CREATE ROUTINE القياسية بإنشاء الإجراءات والوظائف المخزنة.
ما هي القيود المفروضة على سلوك نسخ الإجراءات والوظائف المخزنة؟
لا يتم نسخ الخطوط غير المحددة (العشوائية) أو المستندة إلى الوقت المضمنة في الإجراءات المخزنة بشكل صحيح. النتائج التي يتم إنشاؤها عشوائيًا، بحكم طبيعتها، يمكن التنبؤ بها ولا يمكن استنساخها بشكل موثوق. ولذلك، فإن السلوك العشوائي المكرر على العبد لن يعكس ما يحدث على السيد. لاحظ أن الإعلان عن إجراء مخزن أو وظيفة محددة أو تعيين متغير النظام على 0 في log_bin_trust_routine_creators سيسمح باستدعاء عمليات القيمة العشوائية.
بالإضافة إلى ذلك، لا يمكن تكرار السلوك المستند إلى الوقت على الخادم التابع لأن هذا السلوك المستند إلى الوقت غير قابل للتكرار في الإجراء المخزن من خلال السجل الثنائي المستخدم للنسخ المتماثل، لأن السجل الثنائي يسجل أحداث DML فقط ولا يتضمن قيود التوقيت.
أخيرًا، إذا حدث خطأ في جدول غير تفاعلي أثناء إجراء DML كبير (مثل إدراج مجمع)، فقد يخضع الجدول غير التفاعلي للنسخ المتماثل، وقد يتم تحديث الخادم الرئيسي جزئيًا من إجراء DML في الإصدار المنسوخ من الجدول غير التفاعلي. ولكن بسبب الخطأ الذي حدث، لم يكن هناك تحديث للخادم التابع. بالنسبة لسلوك DML للوظيفة، سيتم تنفيذ مساحة العمل باستخدام الكلمة الأساسية IGNORE بحيث يتم تجاهل التحديثات التي تسبب أخطاء على الخادم الرئيسي، ويتم نسخ التحديثات التي لا تسبب أخطاء إلى الخادم التابع.