MySQL: التكرار بين الخادم الرئيسي والخادم التابع في MySQL…

آخر تحديث: 2026-08-26

يُعد النسخ المتماثل بنظام «الماستر-السلايف» أساس التوافر العالي في MySQL — حيث يعتمد عليه كل من الفصل بين القراءة والكتابة والتحويل التلقائي في حالة الفشل.

يشرح هذا الدرس مبادئ النسخ المتماثل بين الخادم الرئيسي والخادم التابع وكيفية تهيئتهما.

1. ما ستتعلمه



2. قصة حقيقية

(1) المشكلة: لا يستطيع الخادم الواحد تحمل عبء عمليات القراءة والكتابة

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

(2) حل يعتمد على النسخ المتماثل بنظام «الرئيسي-التابع» وفصل عمليات القراءة عن عمليات الكتابة

تنفيذ النسخ المتماثل بين قاعدة البيانات الرئيسية وقاعدة البيانات التابعة: تُسجَّل عمليات الكتابة في قاعدة البيانات الرئيسية، بينما تُجرى عمليات القراءة في قاعدة البيانات التابعة. وفي حال تعطل قاعدة البيانات الرئيسية، يتم ترقية قاعدة البيانات التابعة إلى قاعدة بيانات رئيسية، مما يضمن استمرارية الأعمال.

البعد خادم واحد النسخ المتماثل بين الخادم الرئيسي والخادم التابع + الفصل بين القراءة والكتابة
أداء القراءة الحد الأقصى لعدد الخوادم الفردية التوسع الأفقي (إضافة قواعد بيانات تابعة)
أداء الكتابة التنافس بين عمليات القراءة والكتابة قاعدة البيانات الأساسية المخصصة للكتابة حصريًّا
التوافر 99% 99.9%
التعافي من الكوارث التعافي اليدوي (كل ساعة) التحويل التلقائي في حالة الفشل (كل دقيقة)


3. مبدأ التكرار

100%
graph LR
    A[Master<br/>Primary Database] -->|binlog| B[Slave IO Thread]
    B -->|relay log| C[Slave SQL Thread]
    C -->|Replay| D[Slave Data<br/>Data from the database]
الخطوة الوصف
1 يقوم الخادم الرئيسي بتسجيل البيانات في سجل الأحداث
2 مؤشر ترابط الإدخال/الإخراج التابع يستخرج سجل العمليات الثنائية
3 الكتابة إلى سجل الترحيل المحلي
4 مؤشر ترابط SQL التابع يعيد تشغيل سجل الترحيل


4. تكوين النسخ المتماثل بين الخادم الرئيسي والخادم التابع

▶ مثال: التكوين الرئيسي

INI
# my.cnf
[mysqld]
server-id = 1
log_bin = mysql-bin
binlog_format = ROW
SQL
-- Create a replication user
CREATE USER 'repl'@'%' IDENTIFIED BY 'ReplPass123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

-- View master status
SHOW MASTER STATUS;

▶ مثال: تكوين العبد

INI
# my.cnf
[mysqld]
server-id = 2
relay_log = relay-bin
SQL
-- Configure master-slave relationship
CHANGE MASTER TO
    MASTER_HOST='master_ip',
    MASTER_USER='repl',
    MASTER_PASSWORD='ReplPass123!',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=154;

-- Start the slave database
START SLAVE;

-- Check slave database status
SHOW SLAVE STATUS\G


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

100%
graph TB
    A[Applications] -->|Write| B[Master]
    A -->|Read| C[Slave 1]
    A -->|Read| D[Slave 2]
    B -->|Replicate| C
    B -->|Replicate| D


6. النسخ شبه المتزامن

SQL
-- Install the semi-synchronous plugin
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
SET GLOBAL rpl_semi_sync_master_enabled = 1;
طريقة النسخ الوصف
النسخ المتزامن لا ينتظر الخادم الرئيسي تأكيدًا من الخادم التابع (الافتراضي)
النسخ شبه المتزامن لا يتم الإرجاع إلا بعد أن يؤكد تابع واحد على الأقل استلام البيانات
النسخ المتزامن الكامل يجب أن تؤكد جميع الخوادم التابعة (أداء ضعيف)


7. النسخ المتماثل الجماعي في MySQL

SQL
-- Install the Group Replication plugin
INSTALL PLUGIN group_replication SONAME 'group_replication.so';

-- Start Group Replication
SET GLOBAL group_replication_bootstrap_group = ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group = OFF;


❓ أسئلة شائعة

س ماذا عليّ أن أفعل بشأن زمن الاستجابة بين الخادم الرئيسي والخادم التابع؟
ج تحقق من الشبكة، وقم بتحسين المعاملات الكبيرة، واستخدم النسخ المتوازي.
س ماذا عليّ أن أفعل في حالة تعطل قاعدة البيانات الرئيسية؟
ج التحويل التلقائي أو اليدوي في حالة الفشل (MHA/Orchestrator/ProxySQL).
س هل يمكن أن يكون هناك عدة خوادم رئيسية؟
ج يدعم "Group Replication" وضع الخوادم الرئيسية المتعددة، لكن يُنصح باستخدام وضع الخادم الرئيسي الواحد.
س ماذا عليّ أن أفعل في حالة حدوث تأخير في النسخ المتماثل بين قاعدة البيانات الرئيسية والقاعدة التابعة؟
ج قم بإجراء عمليات القراءة الحرجة من قاعدة البيانات الرئيسية، واستخدم النسخ المتماثل شبه المتزامن، وقم بتمكين النسخ المتماثل المتوازي، وقم بتحسين المعاملات الكبيرة.
س ماذا عليّ أن أفعل في حالة تعطل قاعدة البيانات الأساسية؟
ج قم بترقية قاعدة البيانات الثانوية إلى قاعدة البيانات الأساسية، إما يدويًّا أو تلقائيًّا باستخدام MHA/Orchestrator.

📖 ملخص


📝 تمارين

  1. سؤال أساسي (مستوى الصعوبة: ⭐): قم بإعداد بيئة النسخ المتماثل من النوع «الرئيسي-التابع».

  2. مشكلة متقدمة (درجة الصعوبة ⭐⭐): التحقق من مزامنة البيانات بين الخادم الرئيسي والخادم التابع.

  3. التحدي (مستوى الصعوبة: ⭐⭐⭐): قم بمحاكاة عطل في قاعدة البيانات الرئيسية وقم بإجراء عملية التحويل التلقائي يدويًّا.

Web-Tutorial.com

فريق Web-Tutorial التقني

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

100%