راه اندازی رپلیکیت master -slave در پایگاه داده MYSQL

درباره رپلیکیت master- slave

رپلیکیت MySQL یک فرآیند است که با کپی کردن اتوماتیک از master به پایگاه داده slave به شما اجازه می دهد به راحتی چندین نسخه از داده MySQL را نگه دارید. این می تواند به دلایل بسیاری از جمله تسهیل پشتیبان گیری برای داده ها، روش تجزیه و تحلیل آن بدون استفاده از پایگاه داده اصلی یا به سادگی به عنوان وسیله ای برای مقیاس کردن ، مفید باشد.
این آموزش نمونه ای بسیار ساده از رپلیکیت master-slave پایگاه داده MYSQL را پوشش می دهد – یک masterاطلاعات را به یک slaveارسال خواهد کرد. برای انجام کار  شما به دو آدرس IP نیاز دارید: یکی سرور masterو یکی سرور slave.

این آموزش از آدرس های زیر استفاده می کند:
۱۲٫۳۴٫۵۶٫۷۸۹- پایگاه داده master
۱۲٫۲۳٫۳۴٫۴۵۶- پایگاه داده slave

نصب رپلیکیت master-slave پایگاه داده MYSQL

این مقاله فرض می کند که کاربر دارای امتیازات sudo است و MySQL را نصب کرده اید. اگر شما MySQL ندارید، می توانید آن را با این دستور نصب کنید:

sudo apt-get install mysql-server mysql-client

مرحله اول – پیکربندی پایگاه داده master

فایل پیکربندی mysql را در سرور masterباز کنید.

sudo nano /etc/mysql/my.cnf

هنگامی که در داخل آن فایل قرار میگیریم، باید چند تغییر انجام دهیم.

اولین گام این است که قسمت مورد نظر را پیدا کنید، سرور را به میزبان محلی متصل کنید:

bind-address = 127.0.0.1

آدرس IP استاندارد را با آدرس IP سرور عوض کنید.

bind-address = 12.34.56.789

تغییر پیکربندی بعدی مربوط به شناسه سرور است که در قسمت [mysqld] واقع شده است. شما می توانید هر شماره ای را برای این نقطه انتخاب کنید (ممکن است ساده تر با ۱ شروع شود) ، اما این شماره باید منحصر به فرد باشد و نمی تواند با سایر شناسه های سرور در گروه رپلیکیت شما مطابقت داشته باشد. من قصد دارم آن را ۱ شماره گذاری کنم.
اطمینان حاصل کنید که این خط از حالت کامنت خارج شده باشد.

server-id = 1

به خط log_bin بروید. این جایی است که جزئیات واقعی رپلیکیت نگهداری می شود. Slave تمام تغییرات ثبت شده در لاگ را کپی می کند. برای این مرحله ما به سادگی باید خطی را که به log_bin مربوط است، از حالت کامنت خارج کنیم:

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

در نهایت، ما باید نام پایگاه داده ای را که روی سرور slave رپلیکیت خواهد شد تعیین کنیم. شما می توانید بیش از یک پایگاه داده را با تکرار این خط برای تمام پایگاه های مورد نیاز خود اضافه کنید.

binlog_do_db = newdatabase

بعد از اینکه همه تغییرات را انجام دادید، ذخیره کرده و از فایل پیکربندی خارج شوید .

MYSQL را ریستارت کنید.

sudo service mysql restart

مراحل بعدی در پوسته MySQL انجام می شود.

پوسته MySQL را باز کنید.

mysql -u root -p

ما باید به slaveها امتیاز بدهیم. شما می توانید از این خط برای نام slave خود استفاده کنید و گذرواژه خود را تنظیم کنید. دستور باید در این فرمت باشد:

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

پیگیری با:

FLUSH PRIVILEGES;

بخش بعدی کمی پیچیده است برای انجام این کار شما نیاز به باز کردن یک پنجره یا برگه جدید دارید .

در برگه فعلی خود به «پایگاه داده جدید» بروید.

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 | |
+——————+———-+————–+——————+
۱ row in set (0.00 sec)

این موقعیتی است که پایگاه داده slave شروع به رپلیکیت می کند. این اعداد را ضبط کنید، آنها بعدا مفید خواهند بود. اگر هر تغییر جدیدی در یک پنجره ایجاد کنید، پایگاه داده به طور خودکار باز خواهد شد. به همین دلیل شما باید برگه جدید یا پنجره باز کنید و با مراحل بعدی در آنجا ادامه دهید.
در ادامه با پایگاه داده هنوز قفل شده ، پایگاه داده خود را با استفاده از mysqldump در پنجره جدید استخراج کنید (مطمئن شوید که این دستور را در پوسته bash تایپ کنید، نه در MySQL).

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

اکنون، به پنجره اصلی خود بازگردید، پایگاههای داده را باز کنید (دوباره آنها را قابل نوشتن کنید)
با خارج شدن از پوسته((shell به کار خود خاتمه دهید.

UNLOCK TABLES;
QUIT;

اکنون کار شما با پیکربندی پایگاه داده master تمام شده است.

مرحله دوم- پیکربندی پایگاه داده slave

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

CREATE DATABASE newdatabase;

EXIT;

پایگاه داده ای را که قبلا از پایگاه داده masterاستخراج کرده اید وارد نمایید.

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

حالا ما باید slaveرا همانطور که master رانجام دادیم پیکربندی کنیم:

sudo nano /etc/mysql/my.cnf

ما باید اطمینان حاصل کنیم که در این پیکربندی چند تنظیم انجام داده باشیم. اولی server-id است. این شماره، همانطور که قبلا ذکر شد، باید منحصر به فرد باشد. از آنجا که به طور پیش فرض (هنوز ۱) تنظیم شده است، مطمئن شوید که آن را به چیزی متفاوت تغییر دهید.

server-id = 2

پس از آن، اطمینان حاصل کنید که سه معیار زیر به درستی پر شده است:

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

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

binlog_do_db = newdatabase

شما باید در خط relay-logاضافه کنید: به طور پیش فرض وجود ندارد. هنگامی که همه تغییرات لازم را انجام داده اید، ذخیره کرده و از فایل پیکربندی slave خارج شوید.
دوباره MySQL را ریستارت کنید :

sudo service mysql restart

گام بعدی این است که رپلیکیت از داخل پوسته MySQL فعال شود.

پوسته MySQL را یک بار دیگر باز کنید و جزئیات زیر را تایپ کنید، و مقادیر را برای مطابقت با اطلاعات شما جایگزین کنید:

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 ما تعیین می کند.

۲- این برای سرور اطلاعات ورود صحیح را فراهم می کند.

۳-از همه مهمتر، این اجازه می دهد تا سرور slave بداند رپلیکیت را از کجا شروع کند ، فایل لاگ اصلی و مکان لاگ توسط اعدادی که قبلا داده ایم مشخص می شود.

با آن – شما یک سرور master و slave را پیکربندی کرده اید.

سرور slave را فعال کنید.

START SLAVE;

شما می توانید با تایپ کردن در این دستور جزئیات مربوط به رپلیکیت slave را ببینید. \ G متن را دوباره مرتب می کند تا آن را قابل خواندن تر کند.

SHOW SLAVE STATUS\G

اگر در اتصال مشکل وجود دارد، می توانید با یک دستور برای شروع سرور slave آن را رفع کنید:

SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; SLAVE START;

تمام است.

 

منبع

ترجمه شده توسط : آرزو رنجبرپور

لینک کوتاه مقاله :