كيف يمكنني الحصول على إحداثيات سجل MySQL الثنائي من الملفات الثنائية؟

dba.stackexchange https://dba.stackexchange.com/questions/104927

  •  26-09-2020
  •  | 
  •  

سؤال

أحاول إعداد النسخ المتماثل لقاعدة بيانات MySQL كبيرة (120 جيجابايت) وقد أخطأت.

لقد قمت بإيقاف تشغيل البرنامج الرئيسي، ونسخ ملفات البيانات، وأعدت تشغيل البرنامج الرئيسي.لقد قمت الآن بإعداد العبد وبدأت تشغيله، وأدركت أنني أهملت الحصول على MASTER_LOG_FILE و MASTER_LOG_POS القيم اللازمة لإعداد النسخ المتماثل.

لا يزال لدي نسخة لم تمسها من ملفات البيانات.هل هناك أي طريقة لتحديد MASTER_LOG_FILE و MASTER_LOG_POS من تلك الملفات؟

سؤال ذو صلة:

  • ماذا يحدث إذا قمت بتعيين MASTER_LOG_POS إلى نقطة سابقة في الوقت المناسب؟
  • هل أنا على حق في افتراض أنه سيتم تنفيذ الاستعلامات المكررة، مما قد يؤدي إلى بيانات مكررة؟

يحرر

لقد تم التحقيق في mysqlbinlog الأمر واكتشفت ما يشبه المعلومات الصحيحة عن طريق تنفيذ:

mysqlbinlog --to-last-log --start-datetime='2015-06-21 20:05:00'
    mysql-bin.000006 | grep end_log_pos

يبدو الإخراج شيئًا مثل هذا:

... a whole bunch more lines ...

#150621 20:10:21 server id 1  end_log_pos 720159843     Query   thread_id=901489    exec_time=0 error_code=0
#150621 20:10:21 server id 1  end_log_pos 720161877     Query   thread_id=901489    exec_time=0 error_code=0
#150621 20:10:21 server id 1  end_log_pos 720162762     Query   thread_id=901489    exec_time=0 error_code=0
#150621 20:10:22 server id 1  end_log_pos 720164796     Query   thread_id=901489    exec_time=0 error_code=0
#150621 20:10:22 server id 1  end_log_pos 720164815     Stop

أعتقد أنه يجب علي استخدام أحد هذين الموضعين الأخيرين، لكنني لست متأكدًا من أي منهما.

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

المحلول

نأمل أنك لم تبدأ mysqld على العبد بعد.

يحدث أن موضع binlog هو أيضًا حجم binlog في نهاية كل حدث binlog.في حالتك، يمكنك استخدام آخر binlog يراه العبد، وهو ما يمكنني افتراضه mysql-bin.000006.احصل على الملف واستخدمه كموضع.

لذلك، على الرقيق سوف تعمل

STOP SLAVE;
CHANGE MASTER TO
    MASTER_HOST='...',
    MASTER_PORT=3306,
    MASTER_USER='repluser',
    MASTER_PASSWORD='replpassword',
    MASTER_LOG_FILE='mysql-bin.00006',
    MASTER_LOG_POS=720164815;
START SLAVE;

وينبغي أن تفعل ذلك !!!

لقد ناقشت موضع binlog كونه الملف من قبل

لقد سألت أيضا

ماذا يحدث إذا قمت بتعيين MASTER_LOG_POS على نقطة زمنية سابقة؟

نعم، سيعيد تشغيل حدث binlog ويسبب مشكلات.

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