النسخ المتماثل لسجل MySQL الثنائي:هل يمكن ضبطه لتجاهل الأخطاء؟

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

سؤال

أنا أقوم بتشغيل نظام النسخ المتماثل للسجل الثنائي MySQL للسيد والعبد (phew!) والذي، بالنسبة لبعض البيانات، غير متزامن (بمعنى، يحتفظ السيد ببيانات أكثر من العبد).لكن العبد يتوقف بشكل متكرر عند أدنى خطأ في MySQL، هل يمكن تعطيل ذلك؟(ربما يكون إعداد my.cnf لتجاهل أخطاء النسخ المتماثل للعبد المتماثل أو بعضًا من هذا النوع؛))

وهذا ما يحدث، بين الحين والآخر، عندما يحاول العبد نسخ عنصر غير موجود، يموت العبد.فحص سريع في إظهار حالة العبد \G; يعطي

       Slave-IO-Running: Yes
      Slave-SQL-Running: No
        Replicate-Do-DB: 
             Last-Errno: 1062
             Last-Error: Error 'Duplicate entry '15218' for key 1' on query. Default database: 'db'. Query: 'INSERT INTO db.table ( FIELDS ) VALUES ( VALUES )'

والذي أقوم بإصلاحه على الفور (عندما أدرك أن العبد قد تم إيقافه) عن طريق القيام بما يلي:

STOP SLAVE;
RESET SLAVE;
START SLAVE;

...لقد أصبح هذا أمرًا مرهقًا في الآونة الأخيرة، وقبل أن أقوم بإصدار نوع ما من PHP الذي يقوم بذلك من أجلي، كنت أتساءل عما إذا كان هناك بعض إدخالات my.cnf التي لن تقتل العبد عند الخطأ الأول.

هتافات،

/ النائب

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

المحلول

نعم، مع --slave-skip-errors=xxx في my.cnf، حيث xxx هي "الكل" أو قائمة رموز الأخطاء بفاصلة sep.

نصائح أخرى

توقف عن العبد؛قم بتعيين sql_slave_skip_counter=1;ابدأ بالعبد؛

يمكنك تجاهل الخطأ الحالي فقط ومتابعة عملية النسخ المتماثل.

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

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

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

إذا كان لديك وقت يمكن فيه إغلاق الملف الرئيسي للوصول للكتابة لفترة كافية لاستنساخ قاعدة البيانات واستيرادها إلى العبد، فقد يؤدي ذلك إلى اختفاء المشاكل.

حديث mysqldump تحتوي الأوامر على خيارين للمساعدة في إعداد النسخ المتماثل المتسق.الدفع --master-data والذي سيضع ملف السجل الثنائي وموضعه في التفريغ ويتم ضبطه تلقائيًا عند تحميله في الرقيق.أيضًا --single-transaction سيتم إجراء التفريغ داخل المعاملة بحيث لا تكون هناك حاجة إلى قفل الكتابة لإجراء تفريغ متسق.

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

أعتقد أنك تقوم بالنسخ المتماثل بدون مزامنة قاعدة البيانات أولاً، قم بمزامنة قاعدة البيانات وحاول النسخ المتماثل وتقوم الخوادم بإنشاء نفس المعرفات الفريدة وتحاول تعيين إزاحة التثبيت التلقائي

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