چگونگی راه اندازی (Master Slave Replication) در (MySQL)

الناز منشاری ۲۸ خرداد ۱۳۹۶ ۰ دیدگاه

(MySQL Replication) چیست؟

فرآیندی است که به‌کمک آن می‌توان از اطلاعات دیتابیس به صورت اتوماتیک کپی گرفت و به‌صورت بک‌آپ ذخیره کرد. استفاده از این نسخه اطلاعات سبب می‌شود تا رجوع به دیتابیس اصلی نیاز نباشد. در این بحث با توجه به آدرس (IP)های زیر چند نمونه از این فرآیند را بررسی می‌کنیم. (Master Slave Replication) در (MySQL) به شرح زیر است.

۱۲.۳۴.۵۶.۷۸۹- Master Database

۱۲.۲۳.۳۴.۴۵۶- Slave Database

تنظیمات

پیش از شروع از دسترسی (Sudo) و همچنین نصب (MySQL) بر روی سیستم‌عامل مطمئن شوید. اگر (MySQL) نصب نیست، با دستور زیر آن را نصب کنید.

sudo apt-get install mysql-server mysql-client

گام اول:

تنظیمات (Master Database)

تنظیمات فایل (Mysql) را در سرور باز کنید.

sudo nano /etc/mysql/my.cnf

این فایل را باید کمی تغییر بدهیم، ابتدا قسمتی که شامل عبارت زیر باشد را پیدا می‌کنیم.

bind-address = 127.0.0.1

و آدرس آن را به (۱۲.۳۴.۵۶.۷۸۹) تغییر می‌دهیم. تنظیمات بعدی که می‌بایست انجام دهیم، تغییر (server-id) است. شما هر عددی را می‌توانید به آن اختصاص دهید اما بهتر است آن عدد با ۱ آغاز شود، اما توجه داشته باشید که آن عدد می‌بایست منحصربه‌فرد باشد و با هیچ (server-id) دیگری در گروه یکسان نباشد. ما در این ‌جا عدد ۱ را به آن اختصاص می‌دهیم.

server-id = 1

فایل (log_bin) فایلی است که در آن جزئیات نسخه‌های کپی نگهداری می‌شود. (Slave) تمام اطلاعاتی که روی آن هست را کپی می‌کند. در این گام کافی‌ست تا خط زیر را از حالت (comment) حذف کنیم (علامت# را از ابتدای خط حذف کنیم).

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

حال برای کپی کردن فایل‌ها از دستور زیر می‌توان استفاده کرد. توجه داشته باشید تکرار این دستور دوباره فایل را در تعداد بیشتر کپی می‌کند.

binlog_do_db  = newdatabase

نهایتاً می‌بایست سروری را که از آن نسخه کپی تهیه می‌شود را مشخص کنیم. لازم به‌ذکر است فقط یک دیتابیس لازم نیست، می‌توان چند دیتابیس را در نظر گرفت و تعیین کرد.

binlog_do_db  = newdatabase

پس از انجام تنظیمات، از آن خارج شده و (Mysql) را (restart) می‌کنیم.

sudo service mysql restart

قدم بعدی تنظیماتی در محیط (shell) دیتابیس است. (MySQL Shell) را باز کنید.

mysql -u root -p

نیاز است تا برای (slave)، نام و رمز عبور مشخص کنیم.

GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'password';

FLUSH PRIVILEGES;

برای کامل کردن این فرآیند نیاز است تا در یک (tab) یا پنجره جدید دستورات زیر را وارد کنید.

USE newdatabase;

FLUSH TABLES WITH READ LOCK;

در آن دستور زیر را نیز وارد کنید:

SHOW MASTER STATUS;

پس از آن جدولی همانند زیر نمایش داده می‌شود:

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      ۱۰۷ | newdatabase  |                  |
+------------------+----------+--------------+------------------+
۱ row in set (0.00 sec)

این جدول بیانگر این است که (slave) از کدام دیتابیس شروع به کپی برداری می‌کند. بهتر است این اعداد را پیش خود نگه دارید. در ادامه به آن‌ها نیاز خواهید داشت.

اگر شما تغییری در پنجره یا (tab) دیگری بدهید، دیتابیس به طور اتوماتیک (unblock) می‌شود. به‌همین دلیل بعد از باز کردن پنجره جدید فقط مراحل را ادامه دهید.

با دستور زیر دیتا و اطلاعات را در دیتابیس جدید کپی کنید. لازم به تذکر است این عمل را در یک محیط (shell) جداگانه انجام دهید.

mysqldump -u root -p --opt newdatabase > newdatabase.sql

اکنون به پنجره اصلی کار خود بازگردید و مراحل را به پایان برسانید.

UNLOCK TABLES;
QUIT;

گام دوم:

تنظیمات (Slave Database)

پس از آن‌ که در گام اول تنظیمات (master database) را انجام دادیم، نوبت به تنظیم (Slave) است. وارد سرور (Slave) شوید و (MySQL shell) را باز کنید. یک دیتابیس جدید ایجاد کنید و سپس آن را ببندید.

 

CREATE DATABASE newdatabase;
EXIT;

دیتابیسی را که از دیتابیس (master) خارج کرده بودید را در آن وارد کنید.

mysql -u root -p newdatabase < /path/to/newdatabase.sql

حال تنظیمات مربوط به (slave) را انجام می‌دهیم:

sudo nano /etc/mysql/my.cnf

در این جا نیز نیاز است تا (server-id) را تغییر دهید. همان‌طور که در بالا گفته شد، این نام باید منحصربه‌فرد باشد.

server-id = 2

سپس به شرح زیر مراحل را طی کنید و آن‌ها را کامل کنید.

relay-log = /var/log/mysql/mysql-relay-bin.log
log_bi  = /var/log/mysql/mysql-bin.log
binlog_do_db = newdatabase

پس از ایجاد دیتابیس مراحل را (save) کرده و سپس از آن خارج شوید.

دوباره (MySQL) را (restart) کنید.

sudo service mysql restart

قدم بعدی فعال کردن (Replication) در محیط (MySQL shell) است. آن را دوباره باز کنید و جزئیات زیر را در آن وارد کنید:

CHANGE MASTER TO MASTER_HOST='12.34.56.789',MASTER_USER='slave_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=  ۱۰۷;

این دستور باعث ایجاد تغییرات زیر می‌گردد:

  • این عمل سرور فعلی را به‌عنوان (slave) برای (master) قرار می‌دهد.
  • اعتبار سنجی (login‌)ها در سرور درست انجام می‌شود.
  • در آخر، به سرور (slave) اعلام می‌کند تا از کجا عمل کپی برداری را آغاز کند. (طبق همان عددهایی که برای آن‌ها مشخص کردیم)

پس از اتمام تنظیمات، سرور (slave) را فعال می‌کنیم:

START SLAVE;

برای مشاهده جزئیات آن نیز از دستور زیر استفاده می‌کنیم:

SHOW SLAVE STATUS\G

اگر برای برقراری ارتباط مشکلی پیش آمد و نتوانست وصل شود، از دستور زیر نیز می‌توان استفاده کرد:

SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; SLAVE START;

 

فناوران شبکه سینداد (آهنگ نوآوری)

سینداد یعنی هدیه‌ی سیمرغ، یا فرزند سیمرغ؛ به عبارتی یعنی خود سیمرغ، با همه ی شگفتی هایش، اما جوانتر و سرزنده تر. و این چیزی است که ما سعی می کنیم در سینداد باشیم. از سال ۱۳۸۵ دانش مان را به صورت خدماتی در حوزه ی هاستینگ، شبکه و تولید نرم افزار در اختیار مشتریان مان قرار داده ایم و به این افتخار می کنیم که تک تک آنها تا به امروز همراه ما مانده اند. باور داریم که سینداد صرفاً یک شرکت نیست، بلکه نوعی باور است به ارائه ی شگفت انگیز از هر چیز.