إعداد النسخ المتماثل Master-Slave في MySQL. الدليل المرجعي لـ MySQL النسخ المتماثل لقواعد البيانات المتعددة

09.07.2020

النسخ المتماثل هو آلية لمزامنة محتويات نسخ متعددة من كائن ما. تشير هذه العملية إلى نسخ البيانات من مصدر واحد إلى عدة مصادر أخرى والعكس صحيح.

التسميات:

  • رئيسي - الخادم الرئيسي الذي يجب تكرار بياناته؛
  • النسخة المتماثلة - خادم تم إصلاحه يقوم بتخزين نسخة من البيانات الرئيسية

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

على الخادم الرئيسي، قم بتحرير ملف my.cnf وأضف الأسطر التالية إلى قسم mysqld:

معرف الخادم = log-bin = mysql-bin log-bin-index = mysql-bin.index log-error = mysql-bin.err Relay-log = Relay-bin Relay-log-info-file = Relay-bin. معلومات تتابع سجل الفهرس = تتابع bin.indexنتهي_logs_days=7 binlog-do-db =

  • - معرف خادم MySQL فريد، رقم في النطاق 2 (0-31)
  • - اسم قاعدة البيانات، والتي سيتم كتابة المعلومات عنها في السجل الثنائي؛ إذا كانت هناك عدة قواعد بيانات، فكل منها يتطلب سطرًا منفصلاً مع المعلمة binlog_do_db

على العبد، قم بتحرير ملف my.cnf وأضف الأسطر التالية إلى قسم mysqld:

معرف الخادم = المضيف الرئيسي = المستخدم الرئيسي الرئيسي = كلمة المرور الرئيسية للنسخ المتماثل = منفذ كلمة المرور الرئيسي = 3306 سجل التتابع = صندوق التتابع ملف معلومات التتابع = سجل معلومات التتابع = فهرس سجل التتابع = Relay-log.index تكرار-do-db =

على الخادم الرئيسي، أضف مستخدم النسخ المتماثل الذي يتمتع بحقوق النسخ المتماثل للبيانات:

منح النسخ المتماثل على *.* إلى "النسخ المتماثل"@"النسخة المتماثلة" التي تم تحديدها بواسطة "كلمة المرور"

لنمنع قواعد البيانات المنسوخة على الخادم الرئيسي من تغيير البيانات، برمجيًا أو باستخدام وظيفة MySQL:

Mysql@master> الجداول المسطحة مع قفل القراءة؛ mysql@master> SET GLOBAL read_only = ON;

لفتح القفل، استخدم الأمر:

Mysql@master> SET GLOBAL read_only = OFF;

لنقم بعمل نسخ احتياطية لجميع قواعد البيانات الموجودة على الخادم الرئيسي (أو تلك التي نحتاجها):

Root@master# tar -czf mysqldir.tar.gz /var/lib/mysql/

أو باستخدام الأداة المساعدة mysqldump:

Root@master# mysqldump -u root -p --lock-all-tables > dbdump.sql

دعونا نوقف كلا الخادمين (في بعض الحالات يمكنك الاستغناء عنهما):

Root@master# mysqlamdin -u root -p اغلاق root@replica# mysqlamdin -u root -p اغلاق

دعونا نستعيد قواعد البيانات المنسوخة على الخادم التابع عن طريق نسخ الدليل. قبل بدء النسخ المتماثل، يجب أن تكون قواعد البيانات متطابقة:

Root@replica# cd /var/lib/mysql root@replica# tar -xzf mysqldir.tar.gz

أو وظيفة mysql، فلن تكون هناك حاجة لإيقاف mysql على الخادم التابع:

Root@replica# mysql -u root -p< dbdump.sql

لنقم بتشغيل mysql على الخادم الرئيسي (ثم على الخادم التابع، إذا لزم الأمر):

Root@master# /etc/init.d/mysql ابدأ root@replica# /etc/init.d/mysql ابدأ

دعونا نتحقق من تشغيل الخوادم الرئيسية والتابعة:

Mysql@replica> ابدأ بالعبد؛ mysql@replica> إظهار حالة التابع\G mysql@master> إظهار الحالة الرئيسية\G

على الخادم التابع، تحقق من السجلات في ملف master.info، ويجب أن يحتوي على طلبات لتغيير البيانات في قاعدة البيانات. لذلك يجب أولاً تحويل هذا الملف الثنائي إلى تنسيق نصي:

Root@replica# mysqlbinlog master.info > master_info.sql

في حالة حدوث أخطاء، يمكنك استخدام الأوامر:

Mysql@replica> إيقاف العبد؛ mysql@replica> إعادة تعيين العبد؛ mysql@master> إعادة تعيين MASTER؛

وكرر جميع الخطوات بدءًا من حظر قواعد البيانات.

لإضافة خوادم النسخ المتماثل الساخنة، يمكنك استخدام بناء الجملة التالي:

Mysql@replica> عرض الحالة التابعة\G mysql@master> إظهار الحالة الرئيسية\G mysql@replica-2> تغيير MASTER إلى MASTER_HOST = "master"، MASTER_USER ="replication"، MASTER_PASSWORD = "password"، MASTER_LOG_FILE ="mysql- bin.000004 "، MASTER_LOG_POS = 155؛ mysql@replica-2> ابدأ بالعبد؛

ستظهر المعلومات من الحالات موضع واسم ملف السجل الحالي.

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

قائمة المصادر المستخدمة

  1. Habrahabr.ru - أساسيات النسخ المتماثل في MySQL (http://habrahabr.ru/blogs/mysql/56702/)
  2. ويكيبيديا (http://ru.wikipedia.org/wiki/Replication_(computing_technology))

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

النسخ المتماثل- تقنية مستخدمة في هندسة الأنظمة التي تعمل تحت الحمل، والنتيجة هي توزيع الحمل عند العمل بقاعدة بيانات واحدة عبر عدة خوادم. يتم استخدام النسخ المتماثل MySQL MASTER SLAVE في كثير من الأحيان، ولكن يتم أيضًا استخدام نوع ثانٍ من النسخ المتماثل - Master-Master.

ما هو النسخ المتماثل MySQL MASTER SLAVE وما هو استخدامه؟

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

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

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

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

يتم تنفيذ توجيه الطلبات من نوع معين إلى خادم قاعدة بيانات معين على أي حال على مستوى التطبيق.

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

النسخ المتماثل مخصص للتسامح مع الخطأ، وليس للقياس.

النسخ المتماثل لـ MySQL MASTER SLAVE - الإعداد على دبيان

سوف نستخدم خادمين مع العناوين:

  • الخادم الرئيسي 192.168.0.1
  • الخادم التابع 192.168.0.2

للتوضيح، يتم استخدام VDS المتصل بالشبكة المحلية.
لنعرف دائمًا على وجه اليقين الخادم الذي نقوم بتنفيذ هذا الأمر أو ذاك، سنقوم بتحرير ملفات /etc/hosts على كلا الخادمين

192.168.0.1 رئيسي

192.168.0.2 العبد

دعونا نستبدل القيم الموجودة في /etc/hostname بالسيد والعبد، على التوالي، حتى تدخل التغييرات حيز التنفيذ ونعيد تشغيل الخادم.

1. نقوم بإجراء الإعدادات على الخادم الرئيسي.

الجذر @ ماستر:/#

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

mcedit /etc/mysql/my.cnf

حدد معرف الخادم - يمكنك تحديد أي رقم، الرقم الافتراضي هو 1 - فقط قم بإلغاء التعليق على السطر

معرف الخادم = 1

قم بتعيين المسار إلى السجل الثنائي - المحدد أيضًا بشكل افتراضي، وقم بإلغاء التعليق عليه

قم بتعيين اسم قاعدة البيانات التي سنقوم بنسخها إلى خادم آخر

binlog_do_db = db1

أعد تشغيل Mysql بحيث تتم إعادة قراءة ملف التكوين وتصبح التغييرات سارية المفعول:

/etc/init.d/mysql إعادة التشغيل

2. قم بتعيين الحقوق الضرورية للمستخدم

انتقل إلى وحدة تحكم خادم قاعدة البيانات:

نمنح المستخدم على الخادم التابع الحقوق اللازمة:

منح النسخ المتماثل على *.* إلى "slave_user"@"%" المعرّف بواسطة "123"؛

قفل كافة الجداول في قاعدة البيانات

جداول مسطحة مع قفل القراءة؛

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

+——————+———-+—————+——————+
| ملف | الموقف | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+—————+——————+
| الخلية-bin.000001 | 327 | ديسيبل 1 | |
+——————+———-+—————+——————+
صف واحد في المجموعة (0.00 ثانية)

3. إنشاء تفريغ قاعدة البيانات على الخادم

إنشاء تفريغ قاعدة البيانات:

mysqldump -u root -p db1 > db1.sql

فتح الجداول في وحدة تحكم MySQL:

4. قم بنقل تفريغ قاعدة البيانات إلى الخادم التابع

scp db1.sql [البريد الإلكتروني محمي]:/بيت

نقوم بتنفيذ المزيد من الإجراءات على الخادم التابع

الجذر @ الرقيق:/#

5. إنشاء قاعدة بيانات

تحميل التفريغ:

الخلية -u الجذر -p db1< db1.sql

6. قم بإجراء تغييرات على my.cnf

mcedit /etc/mysql/my.cnf

نقوم بتعيين معرف عن طريق زيادة القيمة المحددة على الخادم الرئيسي

معرف الخادم = 2

قم بتعيين المسار إلى سجل الترحيل

سجل التتابع = /var/log/mysql/mysql-relay-bin.log

والمسار إلى سجل المهملات على الخادم الرئيسي

log_bin = /var/log/mysql/mysql-bin.log

تحديد القاعدة

binlog_do_db = db1

إعادة تشغيل الخدمة

/etc/init.d/mysql إعادة التشغيل

7. قم بإعداد اتصال بالخادم الرئيسي

تغيير MASTER إلى MASTER_HOST = "192.168.0.1"، MASTER_USER = "slave_user"، MASTER_PASSWORD = "123"، MASTER_LOG_FILE = "mysql-bin.000001"، MASTER_LOG_POS = 327؛

نبدأ النسخ المتماثل على الخادم التابع:

يمكنك التحقق من عملية النسخ على التابع بالطلب التالي:

************************** 1. صف ******************** * ******
Slave_IO_State: في انتظار السيد لإرسال الحدث
المضيف_المضيف: 192.168.0.1
Master_User:slave_user
المنفذ الرئيسي: 3306
إعادة محاولة الاتصال: 60
ملف_السجل_الرئيسي: mysql-bin.000002
قراءة_ماستر_لوج_بوس: 107
Relay_Log_File: mysql-relay-bin.000003
Relay_Log_Pos: 253
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: نعم
Slave_SQL_Running: نعم
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
آخر_إيرنو: 0
الخطأ_الأخير:
عداد التخطي: 0
Exec_Master_Log_Pos: 107
مساحة سجل التتابع: 555
حتى_الحالة: لا يوجد
حتى_ملف_السجل:
حتى سجل نقاط البيع: 0
Master_SSL_Allowed: لا
الملف الرئيسي_SSL_CA_:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
مفتاح_SSL_Key:
ثواني_خلف_السيد: 0
Master_SSL_Verify_Server_Cert: لا
Last_IO_Errno: 0
خطأ_الإدخال_الأخير:
Last_SQL_Errno: 0
خطأ_SQL_الأخير:
Replicate_Ignore_Server_Ids:
معرف_الخادم_الرئيسي: 1
صف واحد في المجموعة (0.00 ثانية)

نظرًا لعدم حدوث أي أخطاء، يمكننا أن نستنتج أن النسخ المتماثل تم تكوينه بشكل صحيح.

يكون أداة جيدةالقياس، ولكن العيب الرئيسي هو عدم تزامن نسخ البيانات والتأخير، الأمر الذي يمكن أن يكون بالغ الأهمية.

يتيح لك استخدام حل أكثر حداثة تجنبها تمامًا. إنه سهل الإعداد وموثوق به ويلغي الحاجة إلى نسخ عمليات تفريغ قاعدة البيانات يدويًا.

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

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

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

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

الآن دعونا معرفة ذلك كيفية تكوين النسخ المتماثل في MySQL:

  1. تثبيت الأكثر أحدث إصدارات MySQLلجميع الخوادم.
  2. قم بإنشاء مستخدم لديه الامتياز على الخادم الرئيسي استبدال الرقيق. بالنسبة للعنوان الذي يمكن الاتصال منه، حدد " الجميع".
  3. إيقاف جميع الخوادم.
  4. في الإعدادات ماي إس كيو إل(في الملف my.cnf) في القسم أضف الأسطر التالية: سجل بن
    معرف الخادم = 1 يرجى ملاحظة ذلك معرف الخادميجب أن تكون مختلفة على كافة الخوادم. في الواقع، هذا ما يميز خادمًا عن آخر.
  5. على الخوادم التابعة، أضف إلى الإعدادات ماي إس كيو إلالأسطر التالية: master-host=master_host_name
    master-user=login of the create_user
    master-password=كلمة مرور المستخدم الذي تم إنشاؤه
    master-port=port_for_connecting_to_the_master_server
    server-id=id_of_this_slave_server
  6. تحريك كافة القواعدمن الخادم الرئيسي إلى العبيد.
  7. يجريالخادم الرئيسي، ثم جميع العبيد.

الجميع مساء الخير! اليوم في مقالتنا سنلقي نظرة على أمثلة لإعداد النسخ المتماثل من النوع "السيد والعبد".

القليل من النظرية

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

تركيب وتكوين الماجستير

نقوم بتغيير my.cnf على الخادم الرئيسي:

معرف الخادم = 1 - حدد معرف الخادم log_bin = /var/log/mysql/mysql-bin.log - اسم السجل والمسار

توضيح صغير: بشكل افتراضي، يكتب المعالج سجلات ثنائية لجميع قواعد البيانات، ويمكن تغيير ذلك باستخدام "binlog-do-db". سيتم تسجيل القيم في السجلات عند استخدام قاعدة بيانات معينة، ولن يتم تسجيل التغييرات في قواعد البيانات الأخرى.هنا يمكنك أيضًا تحديد عدد الأيام التي سيتم تخزين السجلات فيها، ونوع السجلات الحد الأقصى للحجم(المعلمات تنتهي_سجلات_الأيام وأقصى_حجم_سجل_لحجم). أضف مستخدمًا إلى MySQL سيتم تنفيذ النسخ المتماثل لحقوقه:

منح النسخ المتماثل الرقيق على *.* إلى user_name@ip_slave_server المعرف بواسطة "كلمة المرور"؛

تابع النسخ المتماثل هو امتياز يسمح للمستخدم بقراءة السجلات الثنائية. ip_slave_server - عنوان IP للخادم الذي سيتصل منه المستخدم. أعد تشغيل خادم MySQL:

/etc/init.d/mysql إعادة التشغيل

دعونا نتحقق من عمل السيد:

إظهار الحالة الرئيسية؛

يجب أن ترى اسم binlog وموقعه. عند تنفيذ الأوامر في قاعدة البيانات، سيتغير الموضع.

إعداد الرقيق

نقوم بإجراء تغييرات على ملف my.cnf:

معرف الخادم = 2 - يجب أن يكون معرف الخادم التابع مختلفًا عن المعرف الرئيسي. Relay-log = /var/lib/mysql/mysql-relay-bin - مثل السجل الثنائي، يتكون من مجموعة من الملفات المرقمة التي تحتوي على أحداث تصف التغييرات في قاعدة البيانات. Relay-log-index = /var/lib/mysql/mysql-relay-bin.index - ملف فهرس يحتوي على أسماء كافة ملفات سجل الترحيل المستخدمة. Replicate-do-db = قاعدة البيانات التي سيتم نسخها.

ملاحظة هامة! عند تنظيم قاعدة بيانات متقاطعة (عند استخدام قاعدة بيانات واحدة وتحديث البيانات في قاعدة بيانات أخرى)، لا يلزم تحديد binlog-do-db في إعدادات الخادم الرئيسي، ويجب كتابة binlog-and لجميع قواعد البيانات، وفي إعدادات الرقيق من الضروري استخدام النسخ المتماثل -do بدلاً من ذلك -db حدد النسخ المتماثل-wild-do-table=db_name.%، حيث db_name هو اسم قاعدة البيانات المنسوخة.أعد تشغيل خادم MySQL:

/etc/init.d/mysql إعادة التشغيل

تمكين النسخ المتماثل

SET GLOBAL read_only = ON؛

دعونا نلقي نظرة على حالة السيد:

إظهار الحالة الرئيسية؛

نتذكر قيم الملف والموضع (أو الأفضل من ذلك، كتابتها). يجب ألا تتغير قيمة الموضع الآن. نقوم بتفريغ السيد باستخدام الأمر mysqldump:

Mysqldump -uname -ppassword db_master_name > dump_db,

حيث الاسم هو اسم المستخدم، وكلمة المرور هي كلمة المرور، وdb_master_name هو اسم قاعدة البيانات، وdump_db هو اسم التفريغ. بعد اكتمال عملية التفريغ، نسمح بالكتابة إلى قاعدة البيانات:

SET GLOBAL read_only = OFF؛

نقوم بنقل التفريغ إلى العبد وتوسيعه

Mysql -uname -ppassword db_slave_name< dump_db

إعداد النسخ المتماثل

تغيير MASTER إلى MASTER_HOST = "عنوان IP الرئيسي"، MASTER_USER = "اسم_المستخدم"، MASTER_PASSWORD = "كلمة المرور"، MASTER_LOG_FILE = "اسم السجل"، MASTER_LOG_POS = الموضع؛

master ip - عنوان IP الخاص بالخادم الذي يوجد عليه الخادم الرئيسي، اسم المستخدم - اسم المستخدم الذي أنشأناه على الخادم الرئيسي، اسم السجل - قيمة الملف على الخادم الرئيسي عند إنشاء تفريغ قاعدة البيانات، الموضع - قيمة الموضع على الرئيسي عندما تم إجراء تفريغ قاعدة البيانات. لنبدأ العبد:

ابدأ بالعبد؛

دعونا نرى كيف يتم النسخ المتماثل: على الجهاز الرئيسي: SHOW MASTER STATUS\G على العبد: SHOW SLAVE STATUS\G

إعدادات الأمان على الخادم الرئيسي

تحدد معلمة عنوان الربط في /etc/mysql/my.cnf عنوان IP الذي سيستمع إليه خادم mysql أثناء انتظار الاتصال. عادةً ما يكون له قيمة عنوان الربط = 127.0.0.1. ولكن بعد إعداد الخادم التابع، نحتاج إلى السماح بالاتصالات من الخادم التابع ولا يزال يتعين علينا العمل اتصالات محلية. يمكن أن يسمح عنوان الربط بالاتصالات من عنوان IP واحد فقط أو من الكل. لأن نحتاج إلى تحديد أكثر من IP للاتصال، ونعلق على السطر بـ bind-address = 127.0.0.1. الآن سيقبل خادم MySQL الاتصالات من جميع عناوين IP، وهو أمر خطير للغاية. سوف يساعدنا iptables في حل هذه المشكلة:

Iptables -I INPUT -p tcp -s ip_slave_server-a --dport 3306 -j قبول -السماح أولاً بالاتصال من عنوان IP للخادم التابع iptables -I INPUT -p tcp --dport 3306 -j DROP - ثم رفض الاتصال من جميع عناوين IP الأخرى.

الآن سيكون لدينا خادمين MySQL يعملان في الوضع الرئيسي والتابع، مما يزيد بشكل كبير من موثوقية الموقع ويساعد بعض مواقع دروبال على زيادة سرعة العمل. في المقالة التالية سننظر في التبديل بين الوضعين الرئيسي والتابع في حالة فشل الخادم الرئيسي.

يستخدم مصطلح النسخ المتماثل للإشارة إلى آلية مزامنة نسخ متعددة من البيانات، مما يزيد من أمن المعلومات والتسامح مع الأخطاء وأداء النظام. ومن الأمثلة الصارخة على ذلك النسخ المتماثل لقاعدة البيانات بين خادمين.

النسخ المتماثل لـ Master-Slave MySQL

في مصطلحات Master-Slave، السيد هو الخادم الأساسي مع قاعدة البيانات؛ فهو يكتب إلى قاعدة البيانات، ولكن يتم توزيع القراءة بين السيد والعبد اعتمادًا على الحمل على النظام، مما يزيد من تحمل الخطأ والأداء. بالإضافة إلى ذلك، بفضل هذا النهج، تكون نسخة قاعدة البيانات في متناول اليد دائمًا ويمكن استعادتها في حالة فشل أحد الخوادم.

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

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

إعداد النسخ المتماثل ليس بالأمر الصعب على الإطلاق، حيث أن الآلية مدمجة في MySQL منذ البداية.

الإعداد على الخادم الرئيسي

لنبدأ بتحرير ملف التكوين my.cnf، والذي يوجد غالبًا في /etc/mysql/my.cnf. تحتاج إلى البحث وإلغاء التعليق (إزالة #)، أو كتابة مثل هذه السطور.

عنوان الربط = 0.0.0.0 معرف الخادم = 1 log_bin = /var/log/mysql/mysql-bin.log

مهم! إذا تم تسجيل عنوان الربط بالفعل، فيجب تغييره، وإلا فلن يكون من الممكن إنشاء اتصال بين الخوادم.

وبعد ذلك مباشرة، سنقوم بإعادة تشغيل قاعدة البيانات على الخادم.

/etc/init.d/mysql إعادة التشغيل

نحن الآن بحاجة إلى إنشاء مستخدم لديه حقوق نسخ قاعدة البيانات الخاصة بنا؛ ويمكن القيام بذلك من الجذر في وحدة تحكم MySQL باستخدام الأمر

منح النسخ المتماثل على *.* إلى "slave_user"@"%" المعرف بواسطة "slave_password"؛ امتيازات التدفق؛

حيث بدلاً من "slave_user" و"slave_password" تحتاج إلى كتابة تسجيل الدخول وكلمة المرور للعبد.

الآن دعونا نلقي نظرة على البيانات الرئيسية

عرض الحالة الرئيسية؛

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

الإعداد على الخادم التابع

الخطوة الأولى هي إنشاء قاعدة بيانات بنفس اسم تلك التي سنقوم بنسخها. وهذه خطوة مهمة ويجب عدم إهمالها. بعد ذلك، انتقل إلى ملف التكوين المألوف لنا بالفعل my.cnf واكتب الاعدادات

معرف الخادم = 2 سجل التتابع = /var/log/mysql/mysql-relay-bin.log bin-log = /var/log/mysql/mysql-bin.log

مهم! في bin-log، يتم كتابة المسار إلى bin-log على الخادم مستر . يجب أن يكون معرف الخادم مختلفًا عن المعرف الرئيسي، ومن الملائم تعيينه على معرف واحد آخر.

تغيير MASTER إلى MASTER_HOST = "1.1.1.1"، MASTER_USER = "slave_user"، MASTER_PASSWORD = "slave_password"، MASTER_LOG_FILE = "mysql-bin.000001"، MASTER_LOG_POS = 107؛ ابدأ بالعبد؛

عندما يكون المضيف هو عنوان IP الخاص بالجهاز الرئيسي، فإن تسجيل الدخول وكلمة المرور يتوافقان مع تلك التي أنشأناها على الجهاز الرئيسي، ويتم تعبئة ملف master_log_file وmaster_log_pos بالمعلومات من العنصر الأخير لتكوين الخادم الرئيسي .

من هذه اللحظة، سيتم نقل جميع التغييرات في قاعدة البيانات من السيد إلى العبد.

التحقق من حالة النسخ المتماثل

بالإضافة إلى الأمر SHOW MASTER STATUS؛