دليل استنساخ MySQL: الإعداد، الأنواع، وحل المشكلات لضمان التوافر العالي

目次

1. ما هو تكرار MySQL؟ نظرة عامة وحالات الاستخدام

تكرار MySQL هو ميزة تقوم بمزامنة نسخة من قاعدة البيانات إلى خادم آخر في الوقت الفعلي. هذا يعزز من تكرار قاعدة البيانات وأدائها. فيما يلي، نوضح بالتفصيل أين يُستخدم تكرار MySQL وكيفية عمله.

نظرة عامة على تكرار MySQL

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

حالات استخدام تكرار MySQL

يُستخدم تكرار MySQL على نطاق واسع في السيناريوهات التالية:

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

أنواع التكرار

لدى تكرار MySQL الأنواع التالية، اعتماداً على كيفية مزامنة البيانات:

  • التكرار غير المتزامن : لا ينتظر الخادم الرئيسي تأكيد الخادم التابع لاستلام التحديثات، مما يسمح بردود أسرع. ومع ذلك، قد لا تصل بعض البيانات إلى الخادم التابع في حالة حدوث فشل.
  • التكرار شبه المتزامن : ينتظر الخادم الرئيسي حتى يؤكد خادم تابع واحد على الأقل استلام البيانات قبل المتابعة. هذا يوفر موثوقية أعلى لكنه قد يكون أبطأ قليلاً.

في القسم التالي، سنشرح المفاهيم الأساسية لتكرار MySQL، بما في ذلك السجلات الثنائية وGTIDs.

2. المفاهيم الأساسية لتكرار MySQL

لفهم تكرار MySQL، من الضروري معرفة دور السجل الثنائي وGTID (معرف المعامل العالمي)، حيث يضمن كلاهما تكرار البيانات بدقة.

أدوار الخادم الرئيسي والخادم التابع

في تكرار MySQL، يمتلك الخادم الرئيسي والخادم التابع أدواراً متميزة. يسجل الخادم الرئيسي التحديثات في السجل الثنائي ويوزعها على الخوادم التابعة. يطبق الخادم التابع هذه السجلات لتحديث بياناته، مع الحفاظ على نفس الحالة مثل الخادم الرئيسي.

السجل الثنائي والسجل الوسيط

يعتمد تكرار MySQL على سجلين رئيسيين:

  1. السجل الثنائي
  • يسجل السجل الثنائي تغييرات البيانات (INSERT، UPDATE، DELETE، إلخ) على الخادم الرئيسي. هذا يضمن أن الخادم التابع يمكنه الحفاظ على نفس الحالة مثل الخادم الرئيسي.
  1. السجل الوسيط
  • يُخزن السجل الوسيط على الخادم التابع، ويحتوي على السجل الثنائي المستلم من الخادم الرئيسي. ينفذ خيط SQL الخادم التابع هذا السجل الوسيط بشكل تسلسلي لتطبيق التغييرات.

ما هو GTID (معرف المعامل العالمي)؟

يُعين GTID معرفاً فريداً لكل معاملة، مما يضمن التوافق عبر خوادم تابعة متعددة. مع GTID، لا حاجة لتتبع موضع السجل الثنائي، ويتم تطبيق المعاملات غير المطبقة تلقائياً فقط، مما يبسط الإدارة.

مزايا GTID

  • التعريف الفريد : لكل معاملة GTID فريد، مما يجعل من الواضح أي المعاملات تم تطبيقها.
  • الاستعادة السهلة : بعد إعادة التشغيل، يتم إعادة تطبيق المعاملات غير المطبقة تلقائياً فقط.
  • الإدارة الفعالة : يبسط GTID إدارة التكرار في البيئات الكبيرة مع خوادم تابعة متعددة.

لتمكين GTID، قم بتعيين gtid_mode=ON وenforce_gtid_consistency=ON على كل من الخادم الرئيسي والخادم التابع. هذا يفعل التكرار القائم على GTID.

في القسم التالي، سنغطي إعداد تكرار MySQL خطوة بخطوة.

3. خطوات إعداد تكرار MySQL

يشرح هذا القسم كيفية تكوين تكرار MySQL خطوة بخطوة. باتباع هذه التعليمات، يمكنك إعداد بيئة رئيسية-تابعة أساسية وتحقيق مزامنة البيانات في الوقت الفعلي.

تكوين الخادم الرئيسي

أولاً، قم بتحرير ملف تكوين الخادم الرئيسي (عادةً my.cnf أو my.ini) لتمكين تسجيل ثنائي وتعيين معرف خادم.

  1. تحرير ملف التكوين
  • أضف الإعدادات التالية إلى قسم [mysqld]، وحدد معرف خادم فريد (مثل 1).
    [mysqld]
    server-id=1
    log-bin=mysql-bin
    
  • يجب أن يكون server-id فريدًا لكل خادم. log-bin يفعل تسجيل السجلات الثنائية.
  1. إنشاء مستخدم التكرار
  • أنشئ مستخدم تكرار على خادم الرئيسي وقدم الامتيازات المطلوبة.
    CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
    FLUSH PRIVILEGES;
    
  • هذا المستخدم مطلوب للسيرفر التابع للوصول إلى بيانات الرئيسي.
  1. فحص حالة الرئيسي
  • فحص ملف السجل الثنائي الحالي والموقع، والذي سيُحتاج لتكوين التابع.
    SHOW MASTER STATUS;
    
  • ستُستخدم قيم File و Position المعروضة عند تكوين التابع.

تكوين خادم التابع

بعد ذلك، قم بتحرير ملف تكوين خادم التابع لتحديد معرف خادم فريد وتحديد معلومات الرئيسي.

  1. تحرير ملف التكوين
  • خصص server-id فريدًا (مثل 2) لخادم التابع. يجب أن يختلف معرف الخادم عن معرف الرئيسي.
    [mysqld]
    server-id=2
    
  • من الشائع أيضًا تفعيل read_only=ON لمنع الكتابات غير المقصودة على التابع.
  1. تكوين معلومات الرئيسي على التابع
  • قم بتشغيل الأمر التالي على خادم التابع، مع تحديد مضيف الرئيسي، والمستخدم، وملف السجل الثنائي، وموقع السجل.
    CHANGE MASTER TO
        MASTER_HOST='master_host',
        MASTER_USER='repl',
        MASTER_PASSWORD='password',
        MASTER_LOG_FILE='mysql-bin.000001',
        MASTER_LOG_POS=123;
    
  • استخدم قيم MASTER_LOG_FILE و MASTER_LOG_POS المحصلة من إخراج SHOW MASTER STATUS للرئيسي.
  1. بدء التكرار
  • قم بتشغيل الأمر التالي على خادم التابع لبدء التكرار.
    START SLAVE;
    

فحص حالة التكرار

تحقق مما إذا كان التكرار بين الرئيسي والتابع يعمل بشكل صحيح.

  • فحص حالة الرئيسي
    SHOW MASTER STATUS;
    
  • فحص حالة التابع
    SHOW SLAVE STATUSG;
    
  • إذا كان كلا Slave_IO_Running و Slave_SQL_Running يظهران Yes ، فإن التكرار يعمل بشكل طبيعي.

في القسم التالي، سنستكشف خيارات التكوين المتقدمة لتكرار MySQL، بما في ذلك الاختلافات بين التكرار غير المتزامن والتكرار شبه المتزامن وإعدادات GTID.

4. أنواع التكرار وتطبيقاتها

يأتي تكرار MySQL في نوعين رئيسيين اعتمادًا على طريقة التزامن: التكرار غير المتزامن و التكرار شبه المتزامن. فهم الاختلافات ومتى يُستخدم كل منهما يساعد في تحسين الأداء والموثوقية. يغطي هذا القسم أيضًا مزايا استخدام GTID (Global Transaction Identifier) في إعدادات التكرار.

الاختلافات بين التكرار غير المتزامن والتكرار شبه المتزامن

1. التكرار غير المتزامن

في التكرار غير المتزامن، يرد خادم الرئيسي فورًا على العميل بمجرد اكتمال المعاملة، دون الانتظار حتى يطبق التابع التحديث. هذا يضمن استجابة ممتازة، مما يجعله مناسبًا لأنظمة توازن الحمل. ومع ذلك، إذا حدث عطل، قد تفقد أي معاملات لم تُطبق بعد على التابع.

2. التكرار شبه المتزامن

في التكرار شبه المتزامن، ينتظر خادم الرئيسي حتى يتلقى على الأقل تابع واحد البيانات قبل الرد على العميل. هذا يحسن اتساق البيانات لكنه يزيد من وقت استجابة المعاملة لأن الرئيسي يجب أن ينتظر التأكيد. التكرار شبه المتزامن مثالي للبيئات التي تُعطي الأولوية لـ اتساق البيانات و الموثوقية.

التكرار مع GTID

يُعين GTID (Global Transaction Identifier) معرفًا فريدًا لكل معاملة، مما يضمن الاتساق بين خادم الرئيسي والتابع. تفعيل GTID يبسط إدارة التكرار مقارنة بالتكرار التقليدي المبني على مواقع السجل الثنائي.

مزايا GTID

  • تحسين اتساق البيانات : يسمح GTID للخادم التابع بتحديد المعاملات غير المطبقة تلقائيًا، مما يضمن الاتساق.
  • تبسيط الإدارة : يقضي GTID على الحاجة إلى تحديد مواقع سجل ثنائي يدويًا، مما يجعل عمليات الفشل الاحتياطي والاسترداد أسهل.

إعداد تكرار GTID

لتمكين GTID، أضف الخيارات التالية إلى ملفات تكوين الخادم الرئيسي والتابع.

تكوين خادم الرئيسي

[mysqld]
server-id=1
log-bin=mysql-bin
gtid_mode=ON
enforce_gtid_consistency=ON

تكوين خادم التابع

[mysqld]
server-id=2
gtid_mode=ON
enforce_gtid_consistency=ON
read_only=ON

بمجرد تمكين GTID، فإن إعداد التكرار على الخادم التابع باستخدام أمر CHANGE MASTER TO سيتعامل تلقائيًا مع التكرار القائم على GTID.

في القسم التالي، سنشرح ممارسات صيانة ومراقبة تكرار MySQL.

5. صيانة ومراقبة التكرار

لتشغيل تكرار MySQL بفعالية، تكون الصيانة المنتظمة والمراقبة أمرًا أساسيًا. يشرح هذا القسم كيفية التحقق من حالة التكرار وكيفية التعامل مع الأخطاء الشائعة.

كيفية التحقق من حالة التكرار

استخدم الأوامر التالية لمراقبة التزامن بين خوادم الرئيسي والتابع.

التحقق من حالة الرئيسي

على خادم الرئيسي، قم بتشغيل SHOW MASTER STATUS لعرض ملف السجل الثنائي الحالي والموقع. يظهر هذا التحديثات الأحدث التي يجب إرسالها إلى الخوادم التابعة.

SHOW MASTER STATUS;

تشمل الحقول الرئيسية:

  • File : اسم ملف السجل الثنائي الحالي
  • Position : الموقع الحالي داخل السجل الثنائي
  • Binlog_Do_DB و Binlog_Ignore_DB : قواعد البيانات المضمنة أو المستبعدة من التكرار

التحقق من حالة التابع

على خادم التابع، قم بتشغيل SHOW SLAVE STATUS للتحقق من صحة التكرار.

SHOW SLAVE STATUSG;

تشمل الحقول المهمة:

  • Slave_IO_Running و Slave_SQL_Running : يجب أن يكون كلاهما Yes إذا كان التكرار يعمل بشكل طبيعي.
  • Seconds_Behind_Master : يشير إلى مدى تأخر الخادم التابع بالثواني. يجب أن يكون هذا 0 بشكل مثالي.

استكشاف أخطاء التكرار

تشمل المشكلات الشائعة في التكرار أخطاء الاتصال و عدم اتساق البيانات. فيما يلي حالات خطأ نمطية وحلولها.

1. أخطاء الاتصال

إذا كان Slave_IO_Running هو No، فإن الخادم التابع لا يمكنه الاتصال بالرئيسي. تشمل الحلول المحتملة:

  • التحقق من مضيف الرئيسي / IP : تأكد من تعيين العنوان الصحيح.
  • إعدادات الجدار الناري : تأكد من أن المنفذ 3306 مفتوح ويمكن الوصول إليه.

2. عدم اتساق البيانات

إذا ظهرت أخطاء في Last_Error، فقد تكون البيانات غير متسقة بين الرئيسي والتابع. لحل ذلك:

STOP SLAVE;
# Fix the data manually
START SLAVE;

بالنسبة لعدم الاتساق الرئيسي، قم بإعادة التزامن من خلال استعادة نسخة احتياطية كاملة من الرئيسي.

3. تأخر التكرار

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

يشرح القسم التالي المشكلات الشائعة في التكرار وحلولها التفصيلية.

6. المشكلات الشائعة في التكرار وحلولها

قد تنشأ مشكلات متنوعة أثناء تكرار MySQL. يفصل هذا القسم المشكلات المتكررة وكيفية حلها.

1. Slave_IO_Running متوقف

المشكلة: إذا كان Slave_IO_Running هو No، فإن الخادم التابع لا يمكنه الاتصال بالرئيسي.

الأسباب والحلول:

  • مشكلات الشبكة : تحقق من الجدار الناري والاتصال بالرئيسي.
  • مضيف الرئيسي / IP غير صحيح : تحقق من تكوين CHANGE MASTER TO.
  • امتيازات المستخدم : تأكد من أن مستخدم التكرار لديه الصلاحيات الصحيحة مع GRANT REPLICATION SLAVE.

2. عدم اتساق بيانات التابع

المشكلة: تختلف البيانات بين الرئيسي والتابع.

الأسباب والحلول:

  • إصلاح يدوي : أوقف الخادم التابع، أصلح البيانات غير المتسقة، ثم أعد تشغيل التكرار. STOP SLAVE; # Fix data START SLAVE;
  • إعادة تزامن كامل : بالنسبة للاختلافات الشديدة، أعد استيراد نسخة احتياطية من الرئيسي.

3. تأخر التكرار

المشكلة: Seconds_Behind_Master أكبر من 0، مما يعني أن الخادم التابع متأخر.

الأسباب والحلول:

  • قيود الأجهزة : قم بترقية مواصفات خادم التابع.
  • تحسين الاستعلام : حسّن الفهرسة والاستعلامات لتقليل وقت المعالجة على التابع.

4. أخطاء صلاحيات مستخدم التكرار

المشكلة: الأخطاء في Last_Error تشير إلى صلاحيات غير كافية.

الحل:

  • منح الصلاحيات الصحيحة : تأكد من الحقوق المناسبة للتكرار. GRANT REPLICATION SLAVE ON *.* TO 'repl'@'slave_ip'; FLUSH PRIVILEGES;

5. نمو السجل الثنائي

المشكلة: سجلات الخادم الرئيسي الثنائية تنمو بشكل مفرط، مستهلكة مساحة القرص.

الحل:

  • تدوير السجلات : استخدم expire_logs_days للحذف التلقائي للسجلات القديمة. SET GLOBAL expire_logs_days = 7; # Purge logs older than 7 days

من خلال فهم وإعداد لهذه المشكلات الشائعة، يمكن للمديرين الحفاظ على عمليات التكرار مستقرة.

7. الخاتمة

تكرار MySQL هو ميزة أساسية لضمان اتساق البيانات وموثوقية النظام. غطت هذه المقالة أساسيات التكرار، إجراءات الإعداد، المراقبة، واستكشاف الأخطاء. أدناه ملخص للنقاط الرئيسية.

النقاط الرئيسية المستفادة

  1. اختر نوع التكرار المناسب
  • يقدم التكرار غير المتزامن السرعة وتوازن الحمل، بينما يوفر التكرار شبه المتزامن موثوقية أقوى. اختر بناءً على متطلبات النظام.
  1. استفد من GTID
  • يبسط GTID التكرار بإزالة الحاجة لتحديد مواقع السجل الثنائي، مما يجعله قيماً للبيئات الكبيرة أو الحرجة.
  1. راقب الحالة بانتظام
  • استخدم SHOW MASTER STATUS و SHOW SLAVE STATUS بشكل متكرر للكشف عن الشذوذ مبكراً وتقليل المخاطر.
  1. أتقن مهارات استكشاف الأخطاء
  • كن على دراية بمعالجة المشكلات الخاصة بالتكرار مثل أخطاء الاتصال، عدم التوافق، والتأخير.
  1. أدر السجلات الثنائية
  • منع مشكلات استخدام القرص بتكوين expire_logs_days وتدوير السجلات بانتظام.

يتطلب تكرار MySQL مراقبة وصيانة مستمرة، ليس فقط الإعداد الأولي. من خلال التحقق من الحالة بانتظام وتعديل التكوينات حسب الحاجة، يمكنك بناء وصيانة نظام قاعدة بيانات موثوق للغاية.

نأمل أن يساعد هذا الدليل في فهم وتنفيذ تكرار MySQL بفعالية، مما يضمن عمليات سلسة ومستقرة.