سؤال

لقد قمت بإعداد النسخ المتماثل لخادم MySQL. يمكنني الاتصال من آلة الرقيق إلى الخادم الرئيسي باستخدام مستخدم النسخ المتماثل / كلمة المرور. لقد حصلت على الخيط SQL Slave SQL، ولكن الرقيق I / O. الخيط لا يعمل ويتأتي حالة الرقيق I / O فارغة عند فحصها باستخدام "إظهار حالة الرقيق". ماذا ممكن ان تكون المشكلة؟

كيف يمكنني حل هذا؟ إعادة تشغيل الرقيق لا يساعد.

كان هذا سيئا: بدلا من إعطاء امتياز الرقيق "النسخ المتماثل" ل *.*, ، كنت فقط إعطائها ل my_db.*.

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

المحلول

بدلا من إعطاء امتياز "رفيع النسخ المتماثل".، كنت فقط إعطائها فقط ل my_db. *.

العبد النسخ المتماثل هو فقط امتياز عالمي (أي لكل مستخدم فقط)، وهذا يعني أن الأمر مثل

GRANT REPLICATION SLAVE on mydb.* TO 'someuser'@'%';

ليس له أي تأثير لأنه لا يمكنك منحه لكل قاعدة بيانات / عمود / جدول.

الأمر الذي تحتاج إلى تشغيله هو:

GRANT REPLICATION SLAVE on *.* TO 'someuser'@'%';

ثم القيام بذلك START SLAVE. وبعد قد تجد أيضا أنه من المفيد البحث في سجل خطأ MySQL.

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

نصائح أخرى

واجهت نفس المشكلة وثابتة باستخدام الخطوات التالية. رابط الخيط الكامل هو http://www.percona.com/forums/questions-Discussions/percona-xtrabackup/11842-backup-stopped-working-slave-sql-running-no.

الخطوات هي نفسها كما ذكرها @ luxknight007 باستثناء خطوته 2. ومع ذلك يحتوي هذا الموضوع على مزيد من التفاصيل وهو مفيد للغاية. فيما يلي الحل الذي استخدمته وهو يعمل.

"القضية الأولى هي أن قمت بتغيير موضع النسخ المتماثل بدلا من تحديد الخطأ، واستخدم تنسيق اسم ملف Binlog غير صحيح (من المحتمل أن تستخدم للتو من هذا المنشور الذي ترتبط به). للعودة إلى المكان الذي بدأت فيه ، تحتاج إلى العثور على ملف BINLOG وموضعه الذي توقف عن طريق الرقيق SQL_Thread. بناء على إخراج حالة الرقيق، يبدو أن العبد هو قراءة من ملف Binlog جديد (يمكنك أن ترى أن قيمة Read_Master_Log_Pos أصغر من قيمة Exec_macer_log_Pos ، مما يعني أنه يجب أن يقرأ ملف أحدث Binlog من حيث توقف SQL_Thernead عن المكان الذي توقفت فيه الرقيق SQL_Thread)، لذلك تحتاج إلى العثور على ملف Binlog الذي فشلت Slave SQL_Thread فعلا. لذلك ابحث في سجل الخطأ لشيء مثل أدناه:

رمز:

2013-10-08 12:48:51 37545 [ERROR] Slave SQL: Error 'Table 'testdb.test2' doesn't exist' on query. Default database: 'testdb'. Query: 'insert into test1 select * from test2', Error_code: 1146
2013-10-08 12:48:51 37545 [Warning] Slave: Table 'testdb.test2' doesn't exist Error_code: 1146
2013-10-08 12:48:51 37545 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.000001' position 3427

هذه عينة أعيد تنشأها، لذلك سيكون لديك مختلفة بعض الشيء. ملاحظة الخطأ يشبه ما تراه في حالة الرقيق الخاصة بك. لذلك ابحث عن رسالة الخطأ المحددة الخاصة بك في ملف سجل الأخطاء، ثم حدد موقع الجزء النهائي حيث يمنحك اسم الملف والموضع ("توقفنا عند تسجيل الدخول" MySQL-BIN.000001 "موضع 3427" في مثالي). يجب أن يكون الموقف 315098143 بناء على حالة العبد المعرض الخاص بك، كما هو الحال عندما توقف SQL_Thread عن الأحداث المنفذة (Exec_mace_log_pos) لكن Io_Thread استمر في القراءة في جديدة (read_master_log_pos).

بمجرد العثور على اسم ملف BINLOG الصحيح وموضعه، أعد تشغيل عبارة التغيير الرئيسية الخاصة بك على عبدك باستخدام المعلومات التي توجدها في سجل الخطأ. لاحظ أن اسم الملف الخاص بك يجب أن يكون مثل "NewCrmdb1-bin.xxxxxxxxxxxx"، وليس MySQL-BIN.XXXXXX (يمكنك رؤية هذه الاتفاقية التسمية في إظهار حالة الرقيق الخاصة بك أعلاه).

رمز:

mysql> change master to MASTER_LOG_FILE='newcrmdb1-bin.XXXXXX', Master_Log_Pos=315098143;

change master to MASTER_LOG_FILE='mysql-bin.000082' , Master_Log_Pos=47914844;

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

يبدو أن خطأ النسخ المتماثل الأولي يخبرك بأن الجدول asteriskcdr.bpleadcf غير موجود على الرقيق، لذلك فشل بيان الإدراج عند محاولة تحديد البيانات من هذا الجدول. وبالتالي فإن المشكلة هناك أن عبدك يبدو أنه بالفعل غير متزامن مع سيدك. إذا كان الجدول المعني في سيدات الماجستير ثابتا أو ثابتا، فمن المحتمل أن يحل هذا عن طريق تصدير البيانات من هذا الجدول فقط على Master باستخدام MySQLDump وتحميله في الرقيق. إذا لم يكن ذلك ممكنا، أو لا تهتم بهذه البيانات، فيمكنك دائما تخطي عبارة النسخ المتماثل مع SQL_SLAVE_SKIP_COUNTER، ولكن بعد ذلك سيكون العبد أكثر من المزامنة مع السيد.

وإذا فشل كل شيء آخر، يمكنك دائما إعادة بناء العبد من السيد كحل أخير أيضا. =) "

لقد واجهت نفس المشكلة وأحاول هذه الخطوات

أضف أولا هذا الرمز في مكان ما أسفل [MySQLD] في My.cnf أو My.ini slave-skip-errors=1046سيقوم هذا بتخطي جميع الإدخال المكرر لأننا سننفذ ملف السجل الثنائي بأكمله حيث توقف النسخ المتماثل، يمكنك التعليق على هذا الرمز بعد النسخ المتماثل الناجح.

1. العبد؛

2. الرعي الرقيق.

3.Change ماجستير إلى master_log_file = 'mysql-bin.000049'؛

Note: MASTER_LOG_FILE must be the last file where it stop from replicating

4.Change ماجستير إلى master_log_pos = 98؛

5. العبد

تحقق مما إذا كنت ناجحا

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