كيف يتم تنفيذ استنساخ MySQL Master-Slave؟

كيف يتم تنفيذ استنساخ MySQL Master-Slave؟

قبل الانتقال إلى قسم كيفية القيام بذلك، دعونا نتحدث قليلاً عن المتطلبات.

  • نحتاج إلى الحد الأدنى من جهازين ماديين أو افتراضيين. في هذه المقالة، سنستخدم جهازين افتراضيين بنظام Debian 10. نوصي بشدة باستخدام نفس التوزيعات. يجب أن يكون مُثبتًا نفس إصدار MySQL على كلا الجهازين الافتراضيين.
  • تكوين Firewall باستخدام UFW.
  • مطلوب خادم NTP مثبت ومتزامن على كلا من جهاز الماستر والعبد للتواصل بينهما.

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

1. تكوين NTP

ستكون خطوتنا الأولى هي إعداد نفس تكوين NTP على كلا الجهازين. إذا لم تكن قد قمت بتثبيته بعد، يمكنك تثبيته باستخدام الأمر التالي.

apt -y install ntp

الآن سنقوم بتكوين خوادم NTP التي قمنا بتثبيتها لتتزامن مع بعضها البعض. سنستخدم خوادم NTP من آسيا في مقالتنا.

*nano /etc/ntp.conf*
server 0.asia.pool.ntp.org iburst
server 1.asia.pool.ntp.org iburst
server 2.asia.pool.ntp.org iburst
server 3.asia.pool.ntp.org iburst

بعد تعديل ملف التكوين، نقوم بحفظه وإعادة تشغيل خدمة NTP.

*/etc/init.d/ntp restart*

2. يجب أن تتعرف الأجهزة على بعضها

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

*nano /etc/hosts*
master_server_ip master_server_hostname
slave_server_ip slave_server_hostname

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

3. تكوين Firewall

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

apt -y install ufw

إذا كنت متصلاً باستخدام SSH، يجب عليك أولاً السماح بالمنفذ SSH بعد التثبيت. خلاف ذلك، قد تفقد اتصال SSH الخاص بك عند تشغيل خدمة UFW.

ufw allow 22
ufw allow from slave_server_ip to any port 3306
systemctl enable ufw
systemctl start ufw
ufw enable

أولاً، سمحنا بالمنفذ 22، أي منفذ SSH، ثم القاعدة التي كتبناها هي إذن المنفذ 3306 المستخدم بواسطة MySQL. لا تنسَ تغيير الجزء slave_server_ip بعنوان IP لجهاز العبد الخاص بك.

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

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

يقع ملف تكوين خادم MySQL في Debian 10 باسم **mysqld.cnf** تحت المجلد **/etc/mysql/mysql.conf.d/**. أولاً، نفتح خادمنا الماستر باستخدام محرر **nano**. إذا كان لديك محرر مختلف تفضله، يمكنك استخدامه أيضًا.

nano /etc/mysql/mysql.conf.d/mysqld.cnf

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

bind-address = master_server_ip

بعد إجراء تعديل bind-address، ابحث عن سطر **server-id**. إذا لم يكن موجودًا، أضفه كما في السابق. يمكنك إعطاء قيمة 1، يجب أن تكون هذه القيمة فريدة للخوادم.

server-id = 1

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

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

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

binlog_do_db = testdb

بعد الانتهاء من التعديلات، احفظ عن طريق الضغط على CTRL + X، Y و ENTER.

بعد الخروج، نعيد تشغيل خدمة MySQL.

systemctl restart mysql

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

mysql -u root -p
CREATE USER 'slave_user'@'slave_server_ip' IDENTIFIED WITH mysql_native_password BY 'password';
لاحظ أن هذا الأمر يحدد أن مستخدم العبد سيستخدم ملحق مصادقة mysql native password. بدلاً من ذلك، يمكن استخدام آلية المصادقة الافتراضية لـ MySQL والتي هي caching_sha2_password، ولكن لهذا، يجب أن يتم إنشاء اتصال مشفر بين خادم الماستر والعبد. سيكون هذا النوع من الإعداد مثاليًا لبيئات الإنتاج، إلا أن تكوين الاتصال المشفر غير متوفر في هذا الدليل.
GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'slave_server_ip';
FLUSH PRIVILEGES;

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

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


عند أخذ الإحداثيات، يجب علينا التأكد من أن أي مستخدم لم يقم بتغيير أي بيانات من خلال قفل قاعدة البيانات لفترة قصيرة.
FLUSH TABLES WITH READ LOCK;

بعد ذلك، قم بتشغيل الكود التالي لعرض حالة ملفات السجل الثنائي.

SHOW MASTER STATUS;

```

+------------------+----------+--------------+------------------+-------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000001 | 899 | testdb | | |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

```

ستحصل على مخرجات مشابهة لما سبق.

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

UNLOCK TABLES;
CREATE DATABASE testdb;

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

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

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

nano /etc/mysql/mysql.conf.d/mysqld.cnf
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = testdb

أخيرًا، نضيف توجيه relay-log الذي يحدد مسار ملف السجل العابر على خادم العبد.

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

بعد الانتهاء من التعديلات، نعيد تشغيل خدمة MySQL هنا أيضاً.

systemctl restart mysql

الآن، نحن جاهزون لاختبار عملية النسخ المتماثل. ندخل إلى قشرة MySQL على خادم العبد.

mysql -u root -p

الآن جاء دور عملية النسخ المتماثل. نقوم بإدخال المعلومات التي يجب علينا إدخالها لخادم العبد من خادم الماستر.

CHANGE REPLICATION SOURCE TO
SOURCE_HOST='master_server_ip',
SOURCE_USER='slave_user',
SOURCE_PASSWORD='password',
SOURCE_LOG_FILE='mysql-bin.000001',
SOURCE_LOG_POS=899;
START REPLICA;

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

SHOW REPLICA STATUS\G

يمكننا رؤية حالة النسخ المتماثل على خادم العبد باستخدام الأمر أعلاه.

```

*************************** 1. row ***************************

Replica_IO_State: Waiting for master to send event

Source_Host: 'slave_server_ip'

Source_User: slave_user

Source_Port: 3306

Connect_Retry: 60

Source_Log_File: mysql-bin.000001

Read_Source_Log_Pos: 1273

Relay_Log_File: mysql-relay-bin.000003

Relay_Log_Pos: 729

Relay_Source_Log_File: mysql-bin.000001

```

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

نبحث عن كتّاب وصحفيين!

نبحث عن كتّاب وصحفيين!

إذا كنت صحفياً، لديك رغبة في التعمق في المواضيع المتعلقة بالأعمال والقطاعات، نريد العمل معك!

Fatih Çevik

متحمس لبلس كلاودز
Sales

معلومات المنتج

#
قلم أوتوماتيكي
تكتب AutoQuill محتوى تسويقي تابع وتنشره لك.

أسهل مال ستحققه على الإطلاق

مع أداة AutoQuill التي بدأت PlusClouds بتقديمها لشركائها، سيتمكن منشئو المحتوى من البيع بنقرة واحدة فقط. دعنا نوضح لك كيف يمكنك الحصول على نصيبك من هذه الثورة.