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

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

MySQL Replication چیست؟

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

12.34.56.789- Master Database

12.23.34.456- 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

و آدرس آن را به 12.34.56.789 تغییر می‌دهیم. تنظیمات بعدی که می‌بایست انجام دهیم تغییر server-id می‌باشد. شما هر عددی را می توانید به آن اختصاص دهید اما بهتر است آن عدد با 1 آغاز شود اما توجه داشته باشید که آن عدد می بایست منحصر بفرد باشد و با هیچ 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 |      107 | newdatabase  |                  |
+------------------+----------+--------------+------------------+
1 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=  107;

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

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

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

START SLAVE;

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

SHOW SLAVE STATUS\G

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

SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; SLAVE START;

 

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

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